BehatでSeleniumを実行
受け入れテストとしてBehatを動かしつつSelenumで画面のエミュレーションは実行できるのか?
みたいなことをちょっと気になったので実装でテストを続けていくとだんだん面倒なことになりそうな場合はある程度の処理を自動化できれば楽になりそう。
参考
Behat+Selenium Webdriverで受け入れテストの自動化をやってみた
BehatとSeleniumを組み合わせ受け入れテストを自動化する | Ryuzee.com
Behat 3: Taking screenshots after failed steps · Issue #649 · Behat/Behat · GitHub
準備
Behat3をいれて、Seleniumのjarをダウンロードしておく
動作する環境ではfirefoxなどのブラウザを稼働すると思われるのでvmの環境で動かすのはちょっとむずかしいかも
Behat3
$ mkdir sample1; cd $_; $ cat << _EOT_ > composer.json { "require-dev": { "behat/behat": "3.*", "behat/mink": "1.*", "behat/mink-extension": "*", "behat/mink-goutte-driver": "*", "behat/mink-sahi-driver": "*", "behat/mink-selenium2-driver": "*", "behat/mink-zombie-driver": "*" }, "require": { "phpunit/phpunit": "*" } } _EOT_ $ composer update $
selenium
http://www.seleniumhq.org/よりダウンロード
$ wget http://selenium-release.storage.googleapis.com/2.48/selenium-server-standalone-2.48.2.jar $
jdk
入れていない場合はインストールしておく
Behat作成
初期化
$ vendor/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 $
behat.ymlをコピーして編集
$ cp -p vendor/behat/mink-extension/behat.yml.dist behat.yml
behat.yml編集
default: suites: default: path: %paths.base%/features contexts: [FeatureContext] extensions: Behat\MinkExtension: browser_name: firefox base_url: http://google.co.jp/ sessions: default: selenium2: capabilities: {"browser":"firefox","version":"*"}
フィーチャ作成
$ vi features/browser.feature ---- # language: ja フィーチャ: Seleniumテスト @javascript シナリオ: Google参照して検索 前提 ホームページを表示している かつ 5 秒待つ もし "q" フィールドに "php" と入力する かつ "btnK" ボタンをクリックする かつ 5 秒待つ ならば検索結果を表示していること ----
FeatureContext.phpを編集
<?php use Behat\Behat\Hook\Scope\AfterStepScope; use Behat\Mink\Driver\Selenium2Driver; use Behat\MinkExtension\Context\MinkContext; use Behat\Behat\Context\Context; use Behat\Behat\Context\SnippetAcceptingContext; use Behat\Gherkin\Node\PyStringNode; use Behat\Gherkin\Node\TableNode; /** * Defines application features from the specific context. */ class FeatureContext extends MinkContext implements SnippetAcceptingContext { /** * Initializes context. */ public function __construct() { } /** * @Given :arg1 秒待つ */ public function miaoDaiTu($arg1) { $this->getSession()->wait($arg1 * 1000); } /** * @Then 検索結果を表示していること */ public function jianSuoJieGuoWobiaoShiSiteirukoto() { // driver $driver = $this->getSession()->getDriver(); if (! $driver instanceof Selenium2Driver) { return; } // キャプチャ取得 $filename = sprintf( '%s_%s_%s.%s', $this->getMinkParameter('browser_name'), date('Ymd') . '-' . date('His'), uniqid('', true), 'png' ); // ファイルを保存 $this->saveScreenshot($filename, "/tmp"); } }
※一部の画面キャプチャなどの処理を追加実装
実行画面
所感
seleniumと連携すれば画面での入力を省略してテストが可能。
実際に入力しているわけではないので完全とか言えないが手順書に基づいたテストを実行しているので例外としての動きを除けば問題ないのかも。
上手く活かせるなら画面キャプチャを簡単に取れるかもしれない
- 作者: 渡辺一宏,吉羽龍太郎,岸田健一郎,穴澤康裕
- 出版社/メーカー: インプレス
- 発売日: 2015/01/14
- メディア: Kindle版
- この商品を含むブログを見る