カテゴリー: tool

PHPでSelenium2(WebDriver API)を使うための構成

PHPでSelenium2(WebDriver API)を使うための構成

Seleniumを使っての自動テスト環境を作るときに
いつも何がどの役割なのかわからなくなるので構築
方法をメモする。Seleniumの情報に古いのが多くて
結構はまった。

今回は簡易的なところまででJenkinsと連携して
自動ビルド&自動ユニットテスト&自動UIテストとかは
次の話しということで。
そもそもこのやり方がいいのかちょっとわからないです。。。
おかしなところあったら指摘してください。

■今回の構成

◆クライアントPC(実際にUIテストを行なうPC)

OS:Windows7 32bit
ブラウザ:IE9とFirefox16.0.2
Java:1.7.0_09
IP:192.168.1.10

◆サーバ

VMware上で。
OS:CentOS6.3
Webサーバ:Apache 2.2.15
PHP:5.4.8
PHPUnit:3.7.8
Java:1.7.0_09
IP:192.168.1.100

今回の構成ではクライアントPCとサーバの両方でselenium-server
を起動する形式にする。
selenium-serverはこちらのページの「Selenium Server (formerly the Selenium RC Server)」をダウンロードする。

※この時点でのバージョンは2.25.0

↑今回の構成図

サーバ側はSelenium Gridとして動かし分散実行にも備える。
クライアントPC側は役割をwebdriverとし、ハブとして
サーバ側で起動したSelenium Gridを指定して自身をテスト
マシンとして登録する。

■実際の実行手順

①サーバ側にselenium-serverを配置、役割をハブ(Selenium Grid)として実行。
※デフォルトは4444ポートで起動

$ java -jar selenium-server-standalone-2.25.0.jar -role hub

ブラウザでSelenium Gridの確認
http://192.168.1.100:4444/grid/console

②次にクライアントPCにselenium-serverを配置。役割をwebdriverとして起動。このときにサーバを指定。
※パスは読み替えてください。

C:\work>java -jar selenium-server-standalone-2.25.0.jar -role webdriver -hub http://192.168.1.100:4444/grid/register

この状態でサーバ側のSelenium Gridの画面を確認すると
クライアントPCが表示されているはず。

ブラウザでSelenium Gridの確認
http://192.168.1.100:4444/grid/console

ここまで設定を行えばあとはPHPUnitのテストケースで
「PHPUnit_Extensions_Selenium2TestCase」をextendsして
テストケースを作成し、実行を行えばクライアントPCで指定
したブラウザが立ち上がりテストが実行される。

記述方法はPHPUnitのページにあります。

サポートしているメソッドとか、実際の記述方法は
PHPUnit_Extensions_Selenium2TestCase のエンドツーエンドテストを確認してください。

以下実際に動かしたサンプルテストケース(SeleneseTest.php)
※seleniumのページを開いてtitleの内容をチェック。
※setHostに「192.168.1.100」、setPortに「4444」を指定する

class Selenese2Test extends PHPUnit_Extensions_Selenium2TestCase {

    protected function setUp() {
        $this->setHost("192.168.1.100");
        $this->setPort(4444);
        //$this->setBrowser("internet explorer");
        $this->setBrowser("firefox");
        $this->setBrowserUrl("https://www.google.co.jp/");
    }

  public function testMyTestCase()
  {
        $this->url('http://seleniumhq.org/');
        $this->assertEquals('Selenium - Web Browser Automation', $this->title());
  }
}

③テストケースを実行する。

$ phpunit SeleneseTest.php
PHPUnit 3.7.8 by Sebastian Bergmann.

.

Time: 14 seconds, Memory: 1.50Mb

OK (1 test, 1 assertion)

Selenium Grid経由で192.168.1.10のFirefoxが立ち上がりテストが始まる。

これで完了。
クライアントでIE9を使うとエラーが表示されるかもしれない。
こんなやつ↓
「リモートデバイスまたはリソースが接続を受け付けません」
これはブラウザの設定で「ツール」⇒「インターネットオプション」⇒「セキュリティ」で
全部のセキュリティゾーンの設定(保護モード)をそろえればいいということらしい。

Selenium2のInternetExplorerDriverでエラーになった

今回はSelenium Gridとphpunitの実行を同じサーバでおこなったけど
別に一緒のサーバでやる必要はないです。
使えるリソースが無かっただけです。。。。

■参考サイト
Selenium2.0 WebDriverで複数ブラウザのUIテスト もう一度、Selenium再入門
PHPUnit Manual 第17章 PHPUnit と Selenium
Selenium 2.0 と WebDriver
Selenium2.0ってどんなもの?とりあえず動かしてみよう!
Selenium + PHPUnitで簡単エンドツーエンドテストを実現する
Seleniumを使ったWeb UI自動テストシステムの構築でやったことまとめ
Selenium2のInternetExplorerDriverでエラーになった

lftpできない時の対応

lftpで同期が出来ないサーバがあったので調査の方法と一応の対策

debugモードにしてつないでコマンドを打ってみる

$ lftp
lftp :~> debug 5
lftp :~> open -p 21 -u user,passwd XX.XX.XX.XX
lftp user@XX.XX.XX.XX:~> ls
...
ここにデバッグ情報がいろいろ出る
...

実際に今回出ていたエラーはこちら
WARNING: Certificate verification: The certificate’s owner does not match hostname ‘XX.XX.XX.XX’

SSL証明書のオーナーとホスト名が合わないってことみたい。
とりあえずSSLをオフにしてみる↓

set ftp:ssl-allow off

一応解決したけれど、「XX.XX.XX.XX」をドメイン名にしたら直るかも。。。
DNS切り替え前だからIPでのアクセスなんだけど。。

ftp:ssl-allow (boolean)
if true, try to negotiate SSL connection with ftp server for
non-anonymous access. Default is true. This and other ssl set‐
tings are only available if lftp was compiled with an ssl/tls
library.

今回の参考
lftpで接続できない時の対処法・・・

A basic walkthrough to using lftp

lftp(1)

今回の参考じゃないけど為になったところ
lftpのmirrorが時々うまく機能しない罠

PHP Google Analyticsのデータを扱う GAPI Version 1.3

Google Analyticsのデータを取得してウニャウニャする必要が
あったのでデータの取得方法から調べてみた。
(昔APIができたとかいう時にちょっと触ったけど完全に覚えていないのでやり直し。。)

とりあえず今回取得したいデータはgoogle analyticsを仕込んであるサイトの指定期間内の
コンテンツ単位のページビューランキング※ただし特定の形式のURLのみのランキング
まずはgoogle analyticsのサイトで調べる。
使うのはこれ。

Data Export API

Google Analytics Data Export API を使用すると、クライアント
アプリケーションを作成して、許可したユーザーの既存のアナリティクス
プロファイルからのデータをリクエストしたり、クエリ
パラメータを使用してリクエストの結果を絞り込むことができます。
現在、Data Export API は Google アナリティクス データへの読み取り専用
アクセスをサポートしています。

とりあえずスタートガイドを読んでおく。

もっと読む PHP Google Analyticsのデータを扱う GAPI Version 1.3

Linux ddコマンドとisoファイルの圧縮

ちょっとddコマンドが気になったのでメモ。

dd(wikipedia)

ddはUNIXやLinuxなどのOS上でファイルシステム等のデータに直接アクセスを行い、コピーや変換を行うプログラムである。IBM社のJCL上に実装されていたプログラムのインターフェースを模倣しており、呼称はデータ定義(dataset definition)の短縮形である。

ddの主な機能は指定されたバイト数もしくはブロック数のデータのコピーであり、この機能は、ハードディスク(全体もしくはパーティション単位、またはブートセクター等)のバックアップや、/dev/zeroや/dev/randomを用いて指定された領域を完全消去するために利用される。

ファイルの変換・コピー
ファイルのコピー・ディスクダンプ・バックアップ・リストア・ファイル作成

実際に使ったコマンド

# dd if=/dev/cdrom of=./temp.iso

進捗がわからなくていつ終わるんだろうかと。。

これがよさそう。
LinuxのDDコマンドで進捗状況をリアルタイムで確認する方法

で、isoは作ったけど焼こうと思ったら容量がでかくて困ったのでDVD Shrinkを使ってみる。

4.7GBを超えたISOファイルはDVDShrinkで圧縮

 

XPでIE9が入らなくてブラウザ確認で困る人へ

どうにかならないかとしらべたら・・・。

3パターンある。

仮想マシンにVistaいれてIE9入れる方法

IE9をWindows XPにインストールしよう。

多分挙動は一番正確だとおもうけど、英語なのとセットアップに時間がかかりそうな感じ。
それと90日で使えなくなる(当たり前だけど)正確な確認をしたい場合は
大変だけどこれをしたほうがよさそう。

もっと読む XPでIE9が入らなくてブラウザ確認で困る人へ

postgreSQL ER図ツール「A5:SQL Mk-2」

久しぶりにpostgreSQLでの開発を依頼されて困ったのでメモ。

MySQLの時はDBDesignerMySQLworkbenchでやっていたけれどpostgreSQLの場合
どうすればいいのか分からなかったのでgoogleで検索。
はるか昔は直接SQL文書いてたけどそれはしんどいので・・・。

どうも「A5:SQL Mk-2」というのがいいらしい。

上記サイトからダウンロードして「A5M2.exe」で起動。

postgreSQLへの接続のところがわからず困ったけど

A5:SQL Mk-2 から PostgreSQL への接続手順」のとおりに作業する。

途中、
開発サーバのpostgreSQLへの接続でpostgreSQL自体の設定が自ホストのみから
接続を許可だったので設定は変更した。

他ホストから接続するための設定

とりあえず接続はできた。

とりあえずER図をリバース生成したかったので
オンラインマニュアル」を参考に生成。

なんとか出来た。