Selenium × PHP でテスト自動化!【環境構築編】
はじめに
みなさんこんにちは、プロダクト開発本部の亀梨です。
普段はXmediaOneというメディアプランニング・広告運用管理・トラッキング・マーケティング分析を行う
統合プラットフォームの開発を担当しています。
テスト自動化の背景
わたくしが担当するXmediaOneでは品質担保のために①コードベース(ScalaTest)の単体テスト②人力での端末操作の単体テスト・シナリオテストを行っていますが、高い品質を維持しようとすると②の工数・負荷が高くなり日々の業務を圧迫しています。
そこで、Seleniumを使ってテスト自動化することで工数削減→さらなる品質強化のためにテストカバレッジ向上をしていこうということになりました。
今回はSelenium導入にあたっての環境構築の手順を紹介したいと思います。
PCはMacでPHPプリインストール済みであることを前提としています。
環境構築の手順
それではさっそく始めていきましょー。
0. テストを実行するディレクトリを作成する
適当なディレクトリを作ります。
1 2 |
$ mkdir selenium $ cd selenium |
1. selenium-serverのインストール
Homebrew経由でインストール
1 2 3 4 5 6 7 8 9 10 |
$ brew install selenium-server-standalone ==> Downloading https://selenium-release.storage.googleapis.com/3.11/selenium-server-standalone-3.11.0.jar ######################################################################## 100.0% ==> Caveats To have launchd start selenium-server-standalone now and restart at login: brew services start selenium-server-standalone Or, if you don't want/need a background service you can just run: selenium-server -port 4444 ==> Summary 🍺 /usr/local/Cellar/selenium-server-standalone/3.11.0: 5 files, 22.3MB, built in 4 seconds |
2. 各ブラウザ用ドライバのインストール
SeleniumServer標準ではSafariに対応済み それ以外(ChromeとかFirefox)にはドライバが必要
Selenium Google Chrome Driver
ChromeDriver – WebDriver for Chrome
downloads zip file
Selenium Firefox Driver
ここから最新版をダウンロードする。
本記事執筆時点だとv0.20.1の「 geckodriver-v0.20.1-macos.tar.gz」をダウンロード。
ダウンロードしたらファイルを解凍する。
1 |
$ tar zxvf geckodriver-v0.20.1-macos.tar.gz |
各ドライバをダウンロードしたらファイルを移動
ダウンロードしたドライバをカレントディレクトリに移動する
1 2 3 4 5 6 7 8 |
$ mv /Users/username/Downloads/chromedriver ./ $ mv /Users/username/Downloads/geckodriver ./ $ ls -la total 31920 drwxr-xr-x 7 username staff 238 5 24 17:42 . drwxr-xr-x+ 55 username staff 1870 5 24 17:42 .. -rwxr-xr-x@ 1 username staff 11917200 4 20 16:39 chromedriver -rwxr-xr-x@ 1 username staff 4404680 4 8 21:44 geckodriver |
3. PHPでWebブラウザを操作するために必要なライブラリ「facebook-webdriver」のダウンロード
Composerのダウンロード
ComposerはPHPのパッケージ管理ツールです。
1 2 3 4 5 6 |
$ curl -sS https://getcomposer.org/installer | php All settings correct for using Composer Downloading... Composer (version 1.6.5) successfully installed to: /Users/kamenashikou/selenium/composer.phar Use it: php composer.phar |
facebook-webdriverのインストール
Facebookさんが作ってくれたツールです。少し時間がかかります。
1 2 3 4 5 6 7 8 9 10 11 |
$ php composer.phar require facebook/webdriver Using version ^1.6 for facebook/webdriver ./composer.json has been created Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 2 installs, 0 updates, 0 removals - Installing symfony/process (v4.1.1): Downloading (100%) - Installing facebook/webdriver (1.6.0): Downloading (100%) facebook/webdriver suggests installing ext-SimpleXML (For Firefox profile creation) Writing lock file Generating autoload files |
4. ここでディレクトリ構成を確認
以下のようになっていれば成功です。
1 2 3 4 5 6 7 8 9 10 |
$ ls -la total 38368 drwxr-xr-x 8 username staff 272 7 5 09:49 . drwxr-xr-x+ 95 username staff 3230 7 5 09:35 .. -rwxr-xr-x@ 1 username staff 12093844 6 7 13:25 chromedriver -rw-r--r-- 1 username staff 64 7 5 09:49 composer.json -rw-r--r-- 1 username staff 4447 7 5 09:49 composer.lock -rwxr-xr-x 1 username staff 1849094 7 5 09:48 composer.phar -rwxr-xr-x@ 1 username staff 5685072 6 16 05:56 geckodriver drwxr-xr-x 6 username staff 204 7 5 09:49 vendor |
5. Selenium Server の起動
バックグラウンドで起動
以下コマンドを実行します。
1 2 3 4 5 6 7 |
$ selenium-server -port 4444 & [1] 33415 C02SY1XFGTFJ:selenium username$ 18:04:14.512 INFO [GridLauncherV3.launch] - Selenium build info: version: '3.11.0', revision: 'e59cfb3' 18:04:14.513 INFO [GridLauncherV3$1.launch] - Launching a standalone Selenium Server on port 4444 2018-05-24 18:04:14.624:INFO::main: Logging initialized @441ms to org.seleniumhq.jetty9.util.log.StdErrLog 18:04:14.882 INFO [SeleniumServer.boot] - Welcome to Selenium for Workgroups.... 18:04:14.882 INFO [SeleniumServer.boot] - Selenium Server is up and running on port 4444 |
ctrl + c でコマンドプロンプトに戻ったら、jobsコマンドを実行するとバックグラウンドでselenium serverが起動しているのが確認できます。
1 2 |
$ jobs [1]+ Running selenium-server -port 4444 & |
はい、これで環境構築は完了です。
それでは早速テストコードを実行してみましょう
実際に動作するかを以下のテストコードで試してみましょう。
1 |
$ vim test.php |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<?php require_once './vendor/autoload.php'; use Facebook\WebDriver\Remote\RemoteWebDriver; use Facebook\WebDriver\Remote\DesiredCapabilities; use Facebook\WebDriver\WebDriverExpectedCondition; use Facebook\WebDriver\WebDriverBy; // テスト実行 sample(); /** * selenium facebook-webdriver 実行のサンプル */ function sample() { // selenium $host = 'http://localhost:4444/wd/hub'; // chrome ドライバーの起動 $driver = RemoteWebDriver::create($host,DesiredCapabilities::chrome()); // 指定URLへ遷移 (Google) $driver->get('https://www.google.co.jp/'); // スクリーンショットを撮って保存する $file = __DIR__ . '/' . __METHOD__ . ".png"; $driver->takeScreenshot($file); // ブラウザを閉じる $driver->close(); } |
では実行してみましょう。
はい、無事に実行できてスクリーンショット画像も保存されていますね。テスト実行は終了です。
最後に、Seleniumサーバーを必ず終了させましょう。
1 2 3 4 5 |
$ jobs [1]+ Running selenium-server -port 4444 & (wd: ~/selenium) $ kill %1 $ jobs [1]+ Exit 143 selenium-server -port 4444 (wd: ~/selenium) |
以上、環境構築でした
これで準備は整いましたので、これからテストケースをじゃんじゃん書いていきたいと思います。
テストコードの知見が貯まってきたらまた投稿したいと思います。それではまたー。

関連記事
-
-
gulp.jsで広告タグの開発環境を整える
SEOの観点から、サイト表示速度の高速化のためJavaScriptファイルから不用な空白や改行、 コメントを除去したりやローカル変数名を短縮するminifyが奨励されていますが、 これはタスクランナーのgulp.jsとプラグインを使って自動化する事が可能です。 ※gulpの基本的な使い方については下 …
-
-
modern.IEを使ってMac上でWindows10を動かす
Microsoftが提供している modern.IE というプロジェクトがある。そこで提供されている仮想環境を使って、MacにWindows10をインストールしてみる。ちなみに、このプロジェクトの本来の目的はInternet Explorerの表示確認やデバッグの支援。 VirtualBoxの準備 …
-
-
プログラミング初心者がswiftでゲームアプリ的なものを作ってみた。
こんにちは、DAC2年目のkumataです。 普段は素敵な先輩方に囲まれてインフラ周りのお仕事をさせて頂いていますが、 今回は業務とは全く関係ないプログラミングをやってみました。 全く初心者なのですが、swift+Xcodeで簡単にスマホゲーム的なものが作れました。 初心者の目線から作成方法をつらつ …
-
-
【未経験からのRuby on Rails – 第2回】Rubyのプログラムを書いてみる(Mac)
こんにちは。新卒1年目のmatsuariです。 前回はRubyとは何か、簡単にご紹介をしましたが、 今回は実際にRubyファイルを作成して、プログラムを書いてみるところまでご紹介していけたらと思います。 Mac環境のプログラミング初心者向けです。 はじめに、Rubyのプログラムを書くためのファイルを …
-
-
Tableauを利用してMySQLとRedshiftのクロスDBジョインを実現する
はじめに RedshiftやTreasureDataなどのデータマート用のDBにはID単位の解析結果が格納され、ローカルのMySQLにはIDに紐づいた名称マスタが管理されている構成の場合、データマートのクロス集計結果に対してIDに紐づいた名称を付与したいことがあります。 データマート用に用意したDB …
-
-
AWSにRailsアプリをデプロイする(公開編)
次にデプロイするため“aws rails デプロイ”でググってみるとunicorn、nginxというキーワードがでてくるので とりあえずこれを設定していきます。 アプリのsecret_key_baseの設定 [crayon-5c71447f59bba851644 …
-
-
【小ネタ】JSで要素の組み合わせを列挙する
下記のような、キーの数や要素数が可変のデータの組み合わせを、列挙するjavascriptコードです。 pythonにはitertoolなどの順列・組み合わせ計算を行う定番ライブラリがあるようです。 やっている事ですが、イメージとしては組み合わせを数列に置き換えています。 1桁目が2進数、3桁目が3進 …
-
-
Scala入門 基礎編「Scalaの書き方を理解しよう」 – PHP使いからScala使いへ転身!
はじめに みなさんこんにちは、プロダクト開発本部の亀梨です。 普段はXmediaOneというメディアプランニング・広告運用管理・トラッキング・マーケティング分析を行う 統合プラットフォームの開発を担当しています。 さて、今回はScala入門第二弾として、Scalaの書き方を紹介する基礎編をお送りしま …
-
-
Scala番外編「Boxに保存したファイルをBox APIを使ってダウンロードしよう!」
はじめに みなさんこんにちは、プロダクト開発本部の亀梨です。 普段はXmediaOneというメディアプランニング・広告運用管理・トラッキング・マーケティング分析を行う 統合プラットフォームの開発を担当しています。 Box APIを使う背景・目的 DACはメディアレップです メディアレップとは、インタ …
-
-
slack×Nagiosでアラートをプッシュ通知
DACではサーバ・NW機器のリソースの監視に「Nagios」を利用してます。 監視ホストも数百台規模で増え続けており、アラート検知が非常に重要な課題となってきています。 メールの通知では、各MLを通知先に設定して、フィルタ分けして…と何かと面倒ですね。 そこで「slackへアラート内容を …