酒と開発の日々

飲酒大好き駆け出しエンジニアのブログ

Codeceptionを自社のプロジェクトに導入した話

皆さんこんばんは。ぐーどらです。

3月頃からアサインしているテスター業務に4月入社の新卒の女の子をアサインされ、完全に駆け出しってなんもわからんとなっています。

白羽の矢が立つ

部長「codeceptionっていいねぇ。入れてほしいなぁ(チラッチラッ」

噂には聞いていましたし、自社にテストコード無いのは大問題だと思っていたので、codeception入れたいなあと思っていました。まさか本当に駆け出しの自分にテストフレームワークのインストールとコードの記述の仕事が回ってくるとは思っていませんでしたけどね

 テストコード書けるのは良い経験になりそうなので、とりあえず頑張る。とりあえずCTOとのやり取りは若干盛ってますが大体そんな感じ。すっげえ雑に振られました。

codeceptionとは

ご存知の方も多いでしょうが、PHPのテストフレームワークです。対応するFWも多く、LaravelやCakeは当然のこと、CodeIgniterやSymfony、Phalconなど、考えうるPHPフレームワークでほぼほぼ動作するテストフレームワークです。

公式はこちら。

Codeception  

やったこと

新卒ちゃんのトレーニングとテスト実行業務とcodeceptionの導入など。駆け出しエンジニアのはずなんだけどどうしてこうなった

WindowsPHP CLIとcomposerとcodeceptionを入れる

PHPとcomposerはこちらを読んでいただいている方々には今更なんで書きません。Windows環境なので、codeceptionのインストールもcomposer経由が一番簡単そうと感じました。

$ composer require codeception/codeception --dev
(中略)
the requested PHP extension curl is missing from your system

おいまじか

Windowsもう嫌、Docker使えないし、だいたい使うPHP拡張がデフォルトで用意されてないし、そもそもターミナルコマンドがLinuxと違うしetc (ビルドやんなきゃだめかなあ)と一瞬Windows環境でビルドをするという苦行が頭をよぎりましたが、冷静にphp.iniを覗き、見つけたextension=curlコメントアウトを外したらcurl有効になりました。公式ありがとう!そして心臓に悪い。

とりあえずPHP Browserでログイン処理を書いてみた

$ ./vendor/bin/codecept bootstrap
$ ./vendor/bin/codecept generate:cept acceptance login

cedeceptionで自動生成できる形式にはCept形式とCest形式があるようで、cePtはPlaneで、ceStはSimpleだとか。とりあえずPlaneのほうがより簡素。

# acceptance.suite.yml
actor: AcceptanceTester
modules:
    enabled:
        - PhpBrowser:
            url: https:(プロジェクトのURL)
        - \Helper\Acceptance

公式に書いてあったこと丸コピですね。わかります。

// loginCept.php
<?php
I = new AcceptanceTester($scenario);
I->wantTo('ログインテスト');
I->amOnPage('/login');
I->fillField('login_id', '/*プロジェクトで使っているID*/');
I->fillField('password', '/*プロジェクトで使っているパスワード*/');
I->click('ログイン');

とりあえず実行。

$ ./vendor/bin/codecept run
Acceptance Tests (1) -------------------------------
✔ loginCept: ログインテスト
----------------------------------------------------

Time: 1 second, Memory: 10.00Mb

OK (1 test, 1 assertions)

めちゃ簡単だった

PHP BrowserではJSで生成されるリンクがクリックできないようなので、ChromeWebDriverを入れ、acceptance.suite.ymlを編集します。

# acceptance.suite.yml
modules:
    enabled:
       - WebDriver:
         url: https:(プロジェクトのURL)
         window_size: false
         port: 9515
         browser: chrome
         capabilities:
             "goog:chromeOptions":
      - \Helper\Acceptance

codecept runで動きました。簡単。

今後やりたいこと

  • dl要素で生成されているボタンをクリックできるようにする。

  • チェックボックスを扱えるようにする。

  • プロジェクトに最適なテストコードを書く

特にプロジェクトに対して最適なコードを書く方法がわからなくて宙に浮いている感じがしています。何かいい本などあったらぜひ教えてください!