Codeceptionを自社のプロジェクトに導入した話
皆さんこんばんは。ぐーどらです。
3月頃からアサインしているテスター業務に4月入社の新卒の女の子をアサインされ、完全に駆け出しってなんもわからんとなっています。
白羽の矢が立つ
部長「codeceptionっていいねぇ。入れてほしいなぁ(チラッチラッ」
噂には聞いていましたし、自社にテストコード無いのは大問題だと思っていたので、codeception入れたいなあと思っていました。まさか本当に駆け出しの自分にテストフレームワークのインストールとコードの記述の仕事が回ってくるとは思っていませんでしたけどね
テストコード書けるのは良い経験になりそうなので、とりあえず頑張る。とりあえずCTOとのやり取りは若干盛ってますが大体そんな感じ。すっげえ雑に振られました。
codeceptionとは
ご存知の方も多いでしょうが、PHPのテストフレームワークです。対応するFWも多く、LaravelやCakeは当然のこと、CodeIgniterやSymfony、Phalconなど、考えうるPHPフレームワークでほぼほぼ動作するテストフレームワークです。
公式はこちら。
やったこと
新卒ちゃんのトレーニングとテスト実行業務とcodeceptionの導入など。駆け出しエンジニアのはずなんだけどどうしてこうなった
WindowsにPHP 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要素で生成されているボタンをクリックできるようにする。
チェックボックスを扱えるようにする。
プロジェクトに最適なテストコードを書く
特にプロジェクトに対して最適なコードを書く方法がわからなくて宙に浮いている感じがしています。何かいい本などあったらぜひ教えてください!