zombiejsは我々の中でも最弱
関連記事:
- [behat3とzombiejsでBDDに挑戦(1)]
- [behat3とzombiejsでBDDに挑戦(2)]
- [behat 3.0 とzombiejsでBDDに挑戦(3)]
- behat 3.0とphantomjsでBDDに挑戦(4)
- [behat 3.0とJenkins CIでBDDに挑戦(5)]
- [behatとChrome HeadlessでBDDを実践(6)]
[behat3とzombiejsでBDDに挑戦(1)]:http://qiita.com/dozo/items/be0ff9e9443413a32d25
[behat3とzombiejsでBDDに挑戦(2)]:http://qiita.com/dozo/items/4cb29ee55c4bd8891786
[behat 3.0 とzombiejsでBDDに挑戦(3)]:http://qiita.com/dozo/items/ec0448ffcbb703df9e43
[behat 3.0とphantomjsでBDDに挑戦(4)]:http://qiita.com/dozo/items/5a5f81061a5aade383d6
[behat 3.0とJenkins CIでBDDに挑戦(5)]:http://qiita.com/dozo/items/4de280e580bdc48c9d93
[behatとChrome HeadlessでBDDを実践(6)]:https://qiita.com/dozo/items/f023c3a4ae9c35768a65
ヾ(・ω<)ノ" 三三三● ⅱⅲ コロコロ♪
------------------- ↓ 余談はここから ↓-------------------
zombie.jsについて
運用すればわかるがzombie.jsではいろいろ不都合がある。
まず、同じテストが成功したり失敗したりと安定しない。
サイトのレスポンスに時間がかかっても返答を待ってくれないので、
データが取得できずに失敗扱いとなるわけだ。
それからCPUをフルパワーで使うぐらい重い。
あと、個人的にやりたかったスクリーンショットを撮るということができない。
テストに失敗したとき、どう失敗したのかを知りたくてもヒントなしになるので、
解決に時間がかかってしまう。
スクリーンショットが取れれば解決も早くなるだろう。
それらを解決するの方法がphantomjs利用というわけ。
behat3について全体的に把握できたので、
以前失敗したphantomjsを導入してみる。
一つ勘違いをしていたのだが。
phantomjsは2012年12月に独自でWebDriverに対応していた。
(PhantomJS 1.8 Release Notes参照)
検証のために読んでいた各種記事通りに動作しないのはこのためか。
seleniumがいらなくなるのはありがたい。
例によって以前の環境と別にするため、
ディレクトリは別に切ることにする。
phpとnodeはyumで入れている(第2回参照)前提で話す。
$ mkdir behat_phantom
$ cd behat_phantom
------------------- ↑ 余談はここまで ↑-------------------
ヾ(・ω<)ノ" 三三三● ⅱⅲ コロコロ♪
------------------- ↓ 本題はここから ↓-------------------
behat3とphantomjsのインストール
phantomjsのインストール
$ sudo npm -g install phantomjs
※2014/10/15追記
後で知ったがphantomjsはnodejsをインストールをしなくても、
バイナリファイルをダウンロードして利用することもできる。
Z### behat3のインストール
毎度毎度、ゼロからインストールしていているのは、
検索からこの記事に直接来たときでも問題ないようにするためで、
必要なければ読み飛ばしてもらっていい。
composerのインストール
$ curl http://getcomposer.org/installer | php # composerのダウンロード
$ ./composer.phar init -n # composer.jsonの生成
$ ./composer.phar config bin-dir "bin/" # binディレクトリ指定
$ ./composer.phar install # venderディレクトリ生成
$ ./composer.phar require "behat/behat 3.*@stable" "behat/mink 1.6.*@dev" "behat/mink-extension 2.*@dev" "behat/mink-browserkit-driver *@dev" "behat/mink-goutte-driver *@dev" "behat/mink-selenium2-driver *@dev" --prefer-dist # 各種インストール
インストール確認
$ ./bin/behat --version
behat version 3.0.8
behat3の設定
behatのプロジェクトを初期化する。
featuresディレクトリが新規に作成され必要なファイルが生成される。
$ ./bin/behat --init
+d features - place your *.feature files here
+d features/bootstrap - place your context classes here
+f features/bootstrap/FeatureContext.php - place your definitions, transformations and hooks here
extensionの設定
zombie.jsと同様phantomjsを使うにはextensionを登録する必要がある。
behat.yml作成
phantomjs実行シェル作成ととbehat設定ファイルbehat.ymlの作成をする
テンプレートがmink-extendsのインストール先にあるので、それを使う
$ cp vendor/behat/mink-selenium2-driver/bin/run-phantomjs.sh ./bin # phantomjs起動シェル
$ cp vendor/behat/mink-extension/behat.yml.dist ./behat.yml # behat設定ファイル
$ vi behat.yml
default:
suites:
default:
paths: # ←↓ここ修正
- %paths.base%/features
contexts: # ←↓ここ修正
- FeatureContext
- Behat\MinkExtension\Context\MinkContext
extensions:
Behat\MinkExtension:
base_url: http://en.wikipedia.org/
sessions:
default:
selenium2: # ←↓ここ修正
wd_host: http://127.0.0.1:4444/wd/hub
動作確認だけしておこう。(エラーメッセージが出なければ成功)
$ sh ./bin/run-phantomjs.sh # phantomjs起動。初回のみ。停止のときはpkill node。
$ ./bin/behat
No scenarios
No steps
0m0.05s (15.05Mb)
設定はこれで完了。
実際のフィーチャファイルで動作を確認する。
$ cp vendor/behat/mink-extension/features/search.feature ./features # behat設定ファイル
$ ./bin/behat
dlオプションでフィーチャファイル内で使える用語リストが取得できるのだが、
Extensionが設定できていないと取得できない。
これを利用して動作確認する。
$ ./bin/behat -dl --lang=ja
default | Given /^(?:|I )am on (?:|the )homepage$/
default | When /^(?:|I )go to (?:|the )homepage$/
default | Given /^(?:|ユーザーは )"(?P<page>[^\s]+)" を表示している$/u
default | When /^(?:|ユーザーが )"(?P<page>[^\s]+)" へ移動する$/u
・・・
また、下記のコマンドに表示される内容はフィーチャファイル作成時に必要になるので、
どこかにメモとして保管して置くといいだろう。
$ ./bin/behat --story-syntax --lang=ja # フィーチャ書式構文
$ ./bin/behat -dl --lang=ja # 書式一覧
$ ./bin/behat -di --lang=ja # 書式一覧+詳細説明
$ ./bin/behat --config-reference # behat.yml設定パラメータ
------------------- ↑ 本題はここまで ↑-------------------
ヾ(・ω<)ノ" 三三三● ⅱⅲ コロコロ♪
------------------- ↓ 補足はここから ↓-------------------
- phantomjsの起動オプション
phantomjsを起動するときに使っているrun-phantomjs.shだが、
現状の状態ではいろいろ問題があったのでいかのように修正している
#!/usr/bin/env sh
set -e
phantomjs --version
echo ' Running PhantomJS'
phantomjs --webdriver=4444 --ignore-ssl-errors=yes --cookies-file=/tmp/webdriver_cookie.txt > /tmp/webdriver_output.txt &
- エラー1
[RuntimeException]
Install MinkGoutteDriver in order to use goutte driver.
behat.ymlの設定ミス。
以下の記述を削除すればよい
Goutte: ~
- エラー2
[Behat\Behat\Context\Exception\ContextNotFoundException]
Behat\MinkExtension\Context\MinkContextontexts
context class not found and can not be used.
[PhantomJSが起動していない。
以下のコマンドを実行し、再度試してほしい。
$ sh ./bin/run-phantomjs.sh