PHP

Selenium + PHPUnit テストケース作り


ふと思いたちまして、Selenium + PHPUnitでテストケースのベース作りに励んでみました。

それほど詰まるところはありませんでしたが手順の割には落とすソフトやドライバも豊富なので覚書です。

ローカルで完結しております。

今回の環境

PHP 5.3.27
java 8

使用したブラウザバージョン

IE 11
Chrome ver 46
Firefox ver 42.0

おおまかな手順

  • composer ダウンロード・パス通す
  • phpunitやらなんやらをcomposerでinstall or update
  • Selenum Server ダウンロード
  • javaのパス通す(通していたらゴメン)
  • Selenium Serverを動かす
  • テストケース書く(もっと早く書いてもよいよ)
  • テスト実行 phpunit Xxxx

できること

ブラウザ周りで実施する総合テスト(受け入れテスト)っぽいことをPHPで自動化できます。

それでは始めましょう

composer ダウンロード・パス通す

Windowsの場合下記サイト通りでどうでしょう。

Installation – Windows

  • composerダウンロード(composer.phar)
  • 適当なフォルダ(上記サイトではc:\bin)にin
  • 下記内容*のbatファイル作成して同じフォルダにin
  • すぐに叩けるようにフォルダへはパスを通しておきましょう

batファイルの中身(batの名前はサイト通りcomposer.batでいいんじゃないでしょうか)

 

@php "%~dp0composer.phar" %*

phpunitやらなんやらをcomposerでinstall or update

composerがどこからでも叩けるようになりましたらテストコードを置いておく任意のフォルダを用意しましょう。

  1. テストコード配置場所となりフォルダの用意(どこでもいいっす)
  2. コマンドプロンプトでまずはそのフォルダへ
  3. 下記内容*のcomposer.jsonを作成します
  4. compser install venderフォルダやらcomposer.lockファイルなどが作成されます
  5. 作成後vender/binにパスを通しておくとよいです(そしたらphpunitがどこからでも叩けます)

composer.jsonの中身(log4phpはオマケ)

 

{
    "require": {
        "apache/log4php": "2.3.0"
    },
    "require-dev": {
        "phpunit/phpunit": "4.8.*",
        "phpunit/phpunit-selenium": ">=1.2"
    }
}

Selenium Serverダウンロード

下記サイトからダウンロードしましょう。

SeleniumHQ Download

Selenium Standalone ServerってとこのDownload version x.xx.xってリンクですね。

  1. Selenium Standalone Serverというjarファイルをダウンロード
  2. jarの置き場はどこでも構いません(わかりやすいようにテストコード配置場所と同じフォルダに置く前提で進めますね)
  3. 上記のjarを実行するためにjavaのパスも通しておきましょう

Selenium Serverを動かす

動かすだけ

  • コマンドプロンプトを立ち上げます(すでに立ち上げている場合も新規で立ち上げます)
  • Selenium Standalone Severのjarを置いているフォルダに移動
  • java -jar selenium-server-standalone-xxx.jar
  • 実行が成功するとSelenium Server is up and runningなどのログが流れます
  • 実行中はコマンドプロンプトはそのまま(停止はCtrl + cでバスっと)

テストケース書く

テストケースとなるphpファイルの保存場所は今回は以下とします。

テストコード配置場所フォルダ/tests

テストコード配置場所フォルダをc:/sel_phpとしたら

c:/sel_php/tests
c:/sel_php/vender
c:/sel_php/composer.json
c:/sel_php/composer.lock

こんな感じでしょうか(先に書いておけばよかったね)

  • testsフォルダ直下にBrowserTest.phpを作成します
<?php
require '../vendor/autoload.php';

class BrowserTest extends PHPUnit_Extensions_Selenium2TestCase
{
    const IE      = 'internet explorer';
    const FIREFOX = 'firefox';
    const CHROME  = 'chrome';

    protected function setUp()
    {
        // 利用ブラウザ
        $this->setBrowser(self::FIREFOX);
        // URL
        $this->setBrowserUrl('http://testsite.com');
    }

    public function testLogin()
    {
        $this->url('/');
        // id=idのエレメントを取得
        $elementId = $this->byId('id');
        // value値を空に!(最初は空だろうけど)
        $elementId->clear();
        // value値をセット
        $elementId->value('testid');
        $elementPw = $this->byId('pw');
        $elementPw->clear();
        $elementPw->value('testpass');

        // name=loginのエレメントを取得
        $loginBtn = $this->byName('login');

        $loginBtn->click();

        // スクリーンショット(保存場所は実行時のフォルダだよ)
        file_put_contents('ss_'. __LINE__. '_'. date('YmdHis'). '.png', $this->currentScreenshot());

        // 第一引数と同じだったらセーフ!違ったらエラー!
        $this->assertEquals('テスト タロウ', $this->byClassName('userName')->text());
    }
}

ポイントだけまとめると…

  • composerでインストールしたもろもろをrequireするためにrequire '../vendor/autoload.php';
  • PHPUnit_Extensions_Selenium2TestCaseを継承
  • setUp()は必須
  • 今のところブラウザはデフォルトのfirefoxのみ
  • 今回のテストケースはtestLogin()1つのみ(testXxx()を追加すればいくつでも)

テスト実行

phpunitへのパスが通っていればどこからでもシンプルに叩けます。

  1. コマンドプロンプトでtests(テストケースを書いたphpファイルがある場所)へ移動
  2. phpunit BrowserTest.php

実行時によく出るエラー

  • org.openqa.selenium.NoSuchElementException

idやclassやらで紐付くエレメントが見つからなかったということですね。
素直にテストケースを修正しましょう。

実行結果はPHPUnit形式で出てくるはずです。

番外編

デフォルトだとFireFoxのみとなってしまいます。
IEとChromeでテスト実行するためには別途ドライバが必要になります。

IEの場合

Selenium Standalone Serverをダウンロードしたページと同じ場所から

SeleniumHQ Download

The Internet Explorer Driver Serverという項目から32bitか64bitかに合わせてダウンロードしてください。

  • ダウンロードしたzipを解凍
  • IEDriverServer.exeファイルをSelenium Standalone Serverのjarがある場所と同じ場所へin(同じじゃなくてもいいんですが)

後は、テストケースとなるプログラムをちょこっと編集します。

<?php
require '../vendor/autoload.php';

class BrowserTest extends PHPUnit_Extensions_Selenium2TestCase
{
    const IE      = 'internet explorer';
    const FIREFOX = 'firefox';
    const CHROME  = 'chrome';

    protected function setUp()
    {
        // 利用ブラウザ ここだけ!
        $this->setBrowser(self::IE);
        ~省略~
  • テスト実行時のコマンドがjava -jar selenium-server-standalone-x.xx.x.jar -Dwebdriver.ie.driver=IEDriverServer.exeとなります(他は特に変更なし)

Chromeの場合

Chromeの場合もドライバを用意するだけです。

Selenium Standalone Serverをダウンロードしたページと同じ場所から(実際にはそこからリンクを辿り以下のページへ)

chromedriver list

32bit版しかないので、windowsの場合はそれをダウンロード

  • ダウンロードしたzipを解凍
  • chromedriver.exeファイルをSelenium Standalone Serverのjarがある場所と同じ場所へin(同じじゃなくてもいいんですが)

後は、テストケースとなるプログラムをちょこっと編集します。

<?php
require '../vendor/autoload.php';

class BrowserTest extends PHPUnit_Extensions_Selenium2TestCase
{
    const IE      = 'internet explorer';
    const FIREFOX = 'firefox';
    const CHROME  = 'chrome';

    protected function setUp()
    {
        // 利用ブラウザ ここだけ!
        $this->setBrowser(self::CHROME);
        ~省略~
  • テスト実行時のコマンドがjava -jar selenium-server-standalone-x.xx.x.jar -Dwebdriver.chrome.driver=chromedriver.exeとなります(他は特に変更なし)

テストケースに合わせたコーディングをスタートできるようにするだけでも結構な手順ですね。

今回は以上です。