2016-04-01

PHPの自動テストcodeception【実行サンプルDL可】

開発を多数こなしていると、やはり感じるのは実行テストというのはなかなか難しいなということです。
というのも、やはりプログラムを組んだ本人はもちろんそれでうまくいくと信じてコードを書いているわけで、残念ながら基本的なバグに気がつかなかったりします。

この辺は前から懸案だったたのですが、「じゃあ自動テストは?」というと人の目でチェックしていないため完璧ではなく、しかも時間がかかり、さらにテストコードすらテストが必要になるんだろ?というのが頭にずっとあったため正直言うと敬遠してきたという経緯があります。

しかし、今回は「デバッグの効率化」という観点から現在人気があり、なおかつとてもシンプルに自動テストができる「Codeception」を体験してみました。
雑感としてはとても好感触です。
今後は納品する際にテストの結果をつけてもいいのかなと考えています。

・・・と、いうことで今回は「Codeception」のインストール〜Acceptance testの基本的な使い方をご紹介します。


【Codeceptionの実行結果サンプル】




【実行環境】
OS: Ubuntu 14.04
言語: PHP 5.6.19


【インストール】
ここではグローバルで利用ができるようにインストールする方法です。
以下のコマンドをターミナルから実行します。

sudo curl -LsS http://codeception.com/codecept.phar -o /usr/local/bin/codecept
sudo chmod a+x /usr/local/bin/codecept

はい。これで codecept コマンドが利用できるはずです。
codecept -v
を実行すると 2.1.7 がインストールされていました。
(ちなみに2016/03/31の時点で2.2 は今ベータ版だそうですので、すぐに正式版が出そうですね。)


【自動テストの開始】
ターミナルでテスト実行したいサイトのルートフォルダへ移動して以下のコマンドを実行します。
codecept bootstrap
これを実行すると、以下が作成されます。

1. codeception.yml
2. testsフォルダ


【Acceptance Test の設定】 

tests/acceptance.suite.yml ファイルを開いてトップページのURLをセットして保存します。
class_name: 
AcceptanceTester
modules:
    enabled:
        - PhpBrowser:
            url: {あなたのチェックしたいサイトのトップURL}
        - \Helper\Acceptance


【自動テストファイルの作成】

codecept generate コマンドを使って個別の自動テストシナリオを作成します。

codecept generate:cept acceptance Welcome

これは、「Welcome」という名前のAcceptance Test(受け入れテスト)をするファイルを作成するという意味になります。
そして、実行後は以下にファイルが作成されますのでここに実際に命令を追加していくことになります。

・tests/acceptance/WelcomeCept.php


では実際の例を見てみましょう。

(実際の例)
$I = new AcceptanceTester($scenario);
$I->wantTo('フォームエラーをチェック');
$I->amOnPage('/form_error');
$I->see('フォームエラーのテスト');
$I->click('送信する');
$I->see('メールアドレスは必須です。');
 見ての通り、シンプルな英語の文法とほぼ同じなのでとても簡単に追加ができます。

1行目はお約束の文章。($Iは「私」のアイです。)
2行目「wanTo」はこのファイルで実行するテストの要約です。実行テスト自体には関係ありません。

3行目からが自動テストの本体になります。具体的には、

amOnPage(): 「/form_error」にアクセス
see(): 「フォームエラーのテスト」という文字があるか確認
click(): 「送信する」ボタンをクリック
see: 「メールアドレスは必須です。」という文字があるか確認

となります。
つまり、チェックの流れとしては、

1. わざとメールアドレスを入力せずに
2. 送信ボタンをクリック
3. エラーが表示

となります。

以上、本当に基本的ですが以下にシンプルかを知ってもらいたかったのでこの辺で終了します。
他にも「DBにデータが存在してるのか?」 といったチェックもできるので興味のある人は以下からチェックしてみてください。

Codeception(英語)
Codeceptionの公式ドキュメントの日本語化(ガイドのみ)


(ちなみに)
この動画はCodeception入門者にはとてもわかり易いと思います。
ホントに便利な時代になりましたよね。



(終わりに)
ふと、クライアントにテスト結果を提出するとき英語じゃやっぱり嫌がられるのかな...?と感じました。
時間ができたら自動翻訳ページ作ってみても面白いかもしれません。
あと、JavaScriptは実行できないのでその辺は Selenium  などとも連携できるようなのでまたトライしてみたいと思います。







0 件のコメント:

コメントを投稿