Codeception + Vagrant + Laravel + Selenium

Seleniumを使う機会があったので、その際に行った手順をまとめました CodeceptionのAcceptanceTest(受け入れテスト)のシナリオを、Selenium通じてブラウザ上で行います Laravelとタイトルに入れているもののあんまりLaravelは関係ないかも

環境としては以下を想定

  • Windowsのホストマシン上に, VagrantCentOSの開発環境が構築されている
  • Codeceptionの実行はVagrantゲストマシン上から行う
  • ブラウザのテストはWindowsのホストマシン上で行う

前提

  • Vagrant上のゲストマシンにLaravel, Codeceptionが導入されていて、AcceptanceTestが作成済み
  • ホストマシンにJavaがインストール済み
  • 以降、ホストマシンで行う作業を[host], ゲストマシンで行う作業を[guest]で表しています

Selenium Serverダウンロード [host]

Selenium Serverダウンロード Selenium Standalone Serverの download x.x.x のリンクを選択(執筆時点では3.4.0) jarが落ちてくるので、 C:\selenium-java-3.4.0 に置く

※ Java7だとselenium-java-3.4.0がうまく動かないという情報がありました Javaのバージョンを上げられない場合は、previous versionからバージョンの古いStandalone Serverを入れる

WebDriverダウンロード [host]

使用するほうをダウンロードし、C:\selenium-java-3.4.0 に置く

ホストマシンのIPアドレスを調べる [guest]

netstat -rn | grep "^0.0.0.0 " | cut -d " " -f10

調べたアドレスをWebDriverのIPアドレスとして設定する

$ vi ./vendor/Codeception/Codeception/src/Codeception/Module/WebDriver.php
// 略
protected $requiredFields = ['browser', 'url'];
protected $config = [
'protocol' => 'http',
'host' => '10.0.2.2', // ホストマシンのIPを設定
'port' => '4444'

Vagrantでゲストからホスト見た時のIPは調べるまでもなくだいたい10.0.2.2っぽい。。。

テスト設定ファイルを修正 [guest]

vi ./tests/acceptance.suite.yml
actor: AcceptanceTester
modules:
enabled:
- WebDriver:
url: {アプリケーションのURL}
browser: chrome
- \Helper\Acceptance

※ もちろんFirefox使う場合は、browser: の部分はfirefoxって書く。

Seleniumサーバー起動 [host]

Chromeの場合

C:\selenium-java-3.4.0>java -jar -Dwebdriver.chrome.driver=./chromedriver.exe selenium-server-standalone-3.4.0.jar

FireFoxの場合

C:\selenium-java-3.4.0>java -jar -Dwebdriver.gecko.driver=./geckodriver.exe selenium-server-standalone-3.4.0.jar

テスト実行 [guest]

./vendor/bin/codecept run
Codeception PHP Testing Framework v2.3.3
Powered by PHPUnit 5.7.14 by Sebastian Bergmann and contributors.

Acceptance Tests (1) -------------------------------------------------------------------------------------------------------------
✔ FirstCest: Try to test (2.51s)
----------------------------------------------------------------------------------------------------------------------------------

Functional Tests (0) -------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------

Unit Tests (0) -------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------

Time: 6.27 seconds, Memory: 10.00MB

OK (1 tests, 9 assertions)

ホストマシンのブラウザが起動してテストが実行される

参考