darudaru

だるだるしてるエンジニア

PHPのCodeceptionでE2Eテスト

PHPでE2Eテストが作れるCodeceptionが簡単に使えてとても良かったという話。

Codeception

インストール

composerでインストール

Codeceptionをインストールしたいディレクトリ配下でcomposerでインストールを行う。

composer require "codeception/codeception" --dev

使ってみる

セットアップ

./vendor/bin/codecept bootstrap

Codeceptionの設定ファイルと、テストのディレクトリが作成されます。

テストクラスを作成する

./vendor/bin/codecept generate:cest acceptance First

FirstCest.phpというテストのクラスの雛形が作成されます。

初期設定

tests/acceptance.suite.yml
actor: AcceptanceTester
modules:
    enabled:
        - PhpBrowser:
            url: https://www.google.co.jp/
        - \Helper\Acceptance

PhpBrowserを指定してますが、PhantomJSやSelenium WebDriverを指定することもできます。PhantomJS、Selenium WebDriverを使うときはDriverのインストールが必要です。
JavaScriptが発動する画面のテストが必要な場合は、PhpBrowserだとテストができません。PhantomJS、Selenium WebDriverのどちらかを使いましょう。

テストを書く

<?php
class FirstCest 
{
    public function frontpageWorks(AcceptanceTester $I)
    {
        $I->amOnPage('/');
        $I->see('Google');  
    }
}

googleのサイトを開いて、ページ内に「Google」という文字列が存在するかというテストを書いてます。
と説明しなくても、テストの書き方が英語表記に近いので、どんなテストをしてるのかなんとなくわかると思います。

テストを実行する

./vendor/bin/codecept run

runコマンドでテスト実行ができ、何も引数に指定しないとテスト全体を実行します。
他にもテストの実行方法はいろいろありまして。

ファイル単位で実行したい場合は、ファイルパスを指定。

./vendor/bin/codecept run tests/acceptance/FirstCest.php

テストスイートを指定して実行したい場合は、テストスイートの名前を指定すればいいです。

./vendor/bin/codecept run acceptance

オプションで、--stepsはテストのステップごとを出力、--debugはより詳細なデバッグ情報を出力してくれます。

./vendor/bin/codecept run --steps

感想

  • 簡単。
  • テストの書き方が英語表記に近く、直感的にわかりやすい。好き。
  • テストが失敗すると、スクリーンショットを撮っといてくれる。嬉しい。
  • 今回はE2Eテストのことしか書いてませんが、単体テスト〜受け入れテストまですべてCodeceptionで書くことができる。管理がしやすそう。