Windows7でSelenium RCを動かしてみる。
Windows7でSeleniumRCを動かしてみました。結構7ならではのハマりどころがあったので同じようにハマった人はどうぞ。
参考
構成
テストサーバ:テスト実行するPC
Webサーバ:テスト対象のサービスが動いているサーバ
Windows7にSelenium RCを入れる
まずはSelenium RCをインストールします。Selenium RCはテストサーバにインストールします。テストケースが増えていくと結構パワー使うので注意です。
実行コマンド
C:\Windows\System32>java -jar "C:\Program Files\Java\jdk1.6.0_24\bin\Selenium\selenium-server-standalone-2.0b3.jar" -interactive
PHPUnitを使えるようにする
Windows用のPHPインストーラーでインストールします。
Webサーバは入れずに後はデフォルト構成でインストール。
PHP For Windows: Binaries and sources Releases
次にpearをインストールするために、PHPのZIPファイルから「go-pear.bat」とPEARのディレクトリだけコピーしてPHPをインストールしたディレクトリに配置する。go-pear.batをコンソール上から実行すればインストールできるが、この時go-pear.batのあるディレクトリに移動して作業しないとインストールに失敗するので注意。さらに、Window7の場合cmdを管理者権限で実行していないと途中でこけるので注意。
Could not open input file: PEAR\go-pear.phar
PHPUnitのインストール
#PEARのアップグレード >pear upgrade PEAR #チャンネルを追加、インストール >pear channel-discover pear.phpunit.de >pear channel-discover pear.symfony-project.com >pear install symfony/YAML >pear channel-discover components.ez.no >pear install components.ez.no/ConsoleTools #PHPUnitのインストール >pear install -a phpunit/PHPUnit could not extract the package.xml file from "C:\Program Files (x86)\PHP\tmp\PHPUnit-3.5.13.tgz" Unable to create directory 'C:/Program/Fil763B.tmp' Unable to create path for C:/Program/Fil763B.tmp/package.xml
入らないですね。ここを読むとpearの使う作業ディレクトリにスペースが入っているのがまずいそうです。
C:\Windows直下にあったpear.iniを編集します。
s:8:"temp_dir";s:6:"C:\tmp";s:12:"download_dir";s:6:"C:\tmp"
C直下にtmpディレクトリを作って再度インストールをしたら動きました。
試してみる
テストサーバを起動し、Googleへアクセスするテストを実行してみます。
このテストはfirefoxを起動して、googleでhellow worldを検索し、検索結果のページタイトルに"Google Search"という文字列が含まれるかをチェックするものです。日本語の場合は"Google 検索"というページタイトルになるのでその辺を少しいじってやると成功します。
>C:\Windows\System32>java -jar "C:\Program Files\Java\jdk1.6.0_24\bin\Selenium\selenium-server-standalone-2.0b3.jar" -interactive >C:\Program Files (x86)\PHP>phpunit tests\Testing_Selenium\tests\GoogleTest.php
CentOS5.5で時間のズレを修正する
現在のntpの状況を確認します。ntpqで確認するとローカルクロックしか動いていないことがわかります。
% ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== *LOCAL(0) .LOCL. 10 l 44 64 377 0.000 0.000 0.001
/etc/ntp.confの設定で接続先のサーバを記述しますが、事前にサーバのIPを調べておきます。
% nslookup ntp.nict.jp Non-authoritative answer: Name: ntp.nict.jp Address: 133.243.238.243 Name: ntp.nict.jp Address: 133.243.238.244 Name: ntp.nict.jp Address: 210.171.226.40 Name: ntp.nict.jp Address: 133.243.238.163 Name: ntp.nict.jp Address: 133.243.238.164 % nslookup ntp.jst.mfeed.ad.jp Non-authoritative answer: Name: ntp.jst.mfeed.ad.jp Address: 210.173.160.57 Name: ntp.jst.mfeed.ad.jp Address: 210.173.160.87 Name: ntp.jst.mfeed.ad.jp Address: 210.173.160.27
/etc/ntp.confの設定ではrestrictに先ほど調べたIPを, serverにホストを追加します。設定完了後ntpdを再起動します。
%vi /etc/ntp.conf restrict 133.243.238.243 mask 255.255.255.255 nomodify notrap noquery restrict 133.243.238.244 mask 255.255.255.255 nomodify notrap noquery restrict 210.171.226.40 mask 255.255.255.255 nomodify notrap noquery restrict 133.243.238.163 mask 255.255.255.255 nomodify notrap noquery restrict 133.243.238.164 mask 255.255.255.255 nomodify notrap noquery restrict 210.173.160.57 mask 255.255.255.255 nomodify notrap noquery restrict 210.173.160.87 mask 255.255.255.255 nomodify notrap noquery restrict 210.173.160.27 mask 255.255.255.255 nomodify notrap noquery server -4 ntp.nict.jp minpoll 6 maxpoll 10 # (stratum 1) server -4 ntp.jst.mfeed.ad.jp # (stratum 2) % service ntpd restart
CentOS5.5にImageMagickを入れてPHP5.3で動かす
サービスの中で画像合成が必要になったので、ImageMagickを入れてみます。
ImageMagickのインストール
今回はソースコードからインストールします。インストールの手順は本家ページに書かれています。
% wget ftp://ftp.kddlabs.co.jp/graphics/ImageMagick/ImageMagick-6.6.6-2.tar.bz2 % tar lxvf ImageMagick-6.6.6-2.tar.bz2 % cd ImageMagick-6.6.6-2 % ./configure % make % sudo
PHP用のライブラリをインストール
PECLからPHP用ライブラリをインストールします。
インストール後php.iniにモジュールのインストール先を指定しますが、デフォルトの設定でインストールしたら保存先が違ったのでシンボリックリンクを張ってインストール完了。
% pecl install imagick % vi /etc/php.ini extension_dir = "/usr/lib64/php/modules" extension=imagick.so % ln -s /usr/lib64/20090626/imagick.so /usr/lib64/php/modules/ % service httpd restart
画像合成をしてみる
//オブジェクトを生成 $hair = new Imagick($hair_url); $face = new Imagick($face_url); //画像合成 $face->compositeImage($hair, Imagick::COMPOSITE_OVER, 0, 0); //gifを指定 $face->setImageFormat("gif"); //ファイル書き出し $wing->writeImage($saveFilePath);
OpenSocial Specification Version1.1のリリース
OpenSocial Foundationから「OpenSocial Specification Version 1.1」が公開されました。
ガジェット間の通信がPub/Subモデルでできるようになるみたいですね。
max_allowed_packetの影響でスレーブサーバのエラー
バイナリログのサイズが大きくなり、マスターおよびスレーブのmax_allowed_packetの値をファイルサイズがこえるとエラーが発生することがあります。
101122 10:37:51 [ERROR] Error reading packet from server: log event entry exceeded max_allowed_packet; Increase max_allowed_packet on master ( server_errno=1236) 101122 10:37:51 [ERROR] Got fatal error 1236: 'log event entry exceeded max_allowed_packet; Increase max_allowed_packet on master' from master when reading data from binary log
マスター、スレーブのmy.confの設定で回避します。
% vi /etc/my.conf # マスタの設定 max-binlog-size = 256M # バイナリログは256Mまで max_allowed_packet = 256M # 読み込むファイルサイズは256まで % vi /etc/my.conf # スレーブの設定 max_allowed_packet = 256M # 読み込むファイルサイズは256まで
syslogで複数のapacheサーバのログを集積する
CentOS5.5でsyslogとapacheの設定を弄って、ログサーバにログを集めます。
設定
設定は、「ログを受け取るサーバ」と「ログを送信するサーバ」の双方に行います。
syslogはudpを使ってログを送信するので、どうしてもログの取りこぼしが発生します。
今回のゴールは「ログを受け取るサーバ」と「ログを送信するサーバ」の双方にログを残し、送信失敗したログもローカルで確認できるようにします。
ログを受け取るサーバの設定
まずは、ログを受け取るサーバの設定をします。具体的には/etc/sysconfig/syslogのSYSLOGD_OPTIONS変数に、-rを追加し、514/udpを待機状態にします。
% vi /etc/sysconfig/syslog SYSLOGD_OPTIONS="-m 0 -r" % service syslog restart % netstat -an |grep -i udp | grep 514 #ポートが待機中になっているか確認
次にログを受け取るサーバのログの出力先を指定します。/etc/syslog.confではログのタイプ(facility)やログレベルと出力先を紐づける設定を行います。syslog.confの設定を終えたら設定を反映させます。
% vi /etc/syslog.conf #以下を追記 # apache access_log local6.* /var/log/httpd/access_log # apache error log local5.* /var/log/httpd/error_log # syslog.confの変更をsyslogdへ反映させる % kill -HUP `cat /var/run/syslogd.pid`
以上でログを受け取る設定は完了です。
次にログを送信するサーバの設定を行います。
ログを送信するサーバの設定
まずhttpd.confの設定でaccess_logとエラーログをsyslogに出力するように設定します。
% vi /etc/httpd/conf/httpd.conf <VirtualHost *:80> ServerName oratta.com DocumentRoot "/var/httpdocs" ErrorLog syslog:local5 # エラーログの出力設定 CustomLog logs/access_log combined CustomLog "|/usr/bin/logger -p local6.info --" combined # アクセスログの出力設定 AddType application/x-httpd-php .html .php php_flag display_errors on </VirtualHost> # サーバ再起動 % service httpd restart
次にsyslog.confを設定し、ログを先ほど設定した受取先サーバに転送する設定をします。
この時に、apacheエラーログのローカル出力先も指定します。CustomLogはローカルとリモートと双方指定できますが、ErrorLogは2つの出力先を選べないので、双方syslogに出力するようにします。
% vi /etc/syslog.conf # apache error log local5.* /var/log/httpd/error_log # to log server *.* @192.168.1.5 #転送先サーバのIP # syslog.confの変更をsyslogdへ反映させる % kill -HUP `cat /var/run/syslogd.pid`
以上で設定完了。apacheのエラーログとアクセスログが「ログを受け取るサーバ」と「ログを送信するサーバ」の双方に保存されるようになりました。