19
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PHPのbehatとzombiejsでBDDに挑戦(1)

Last updated at Posted at 2014-06-07

TDD is dead. Long live testing.に触発されたわけではないがけど。

ヾ(・ω<)ノ" 三三三● ⅱⅲ コロコロ♪

関連記事:

昔からTDDを念頭にものを作ってきた。
のだが、「テストコードを書く」という行為に納得感がなく、手法をあれこれ変えてみたりしていた。
そんな折、自動テストについて調査する機会があり、そこでBDDという手法があることを知った。
BDDの詳細についてはこちらを: エンドツーエンドテストの自動化は Cucumber から Turnip へ

さて、ツールの選定をするわけだが、
必要なのはBDDテストツールとブラウザテストツール。
言語問わず探してみた。

BDDテストツール
ツール 言語 詳細
Cucumber Ruby RSpecよりも自然言語(英語とか日本語とかそういうの)に近いGherkin書式を使ってテストシナリオを記述できる
Turnip Ruby cucumberの進化系でより読みやすくしたもの
Cucumber.js JavaScript cucumberのJavaScript版。発展途上で今後の進化に期待したいところ
Behat PHP Cucumberをインスパイアしたテストツール
Codeception PHP 各種テストツールを統合的に取り扱う

ブラウザテストツール

ツール 言語 詳細
Selenium Java 自動テストの定番。使いにくさも折り紙付き。
Capybara Ruby 受け入れテストツール。要QTライブラリ。
Phantomjs node.js JavaScriptも解析できる高性能ヘッドレスブラウザ
Zombie.js node.js phantomjsの簡易版

最初はTurnipで行く予定だったが、
私があまりRubyに明るくなく、インストールの段階で挫折。
node.jsなら行けるかとMocha, Jasmine, Cucumber.jsと試すものの、内容を理解できず終了。
最後に残ったPHP製のBehatで行くことにした。
PHPerな私にはちょうどいいか。

Behat

PHP製のBDDツール。Cucumber互換のGherkin書式でテストコード(フィーチャ)を作成し、付属のヘッドレスブラウザ(Mink)を通してWebサービスのテストをすることができる。
Minkはドライバを経由してSeleniumやSahiなどの外部ツールとの連携が可能。
バージョン3ではTurnip書式にも対応。

ヘッドレスブラウザですが同梱のMinkだとHTMLは取得できてもJavaScriptを展開できない。
最近ではHTMLだけで済ますことが非常に少なく、これでは要求を満たせない。
そこでヘッドレスブラウザは外付けにすることにした。
JavaScriptを使えるPhantomjsZombie.jsで迷ったが、
多機能なPhantomjsで行きたかったが、Seleniumを通さなきゃいけなかったり、ちゃんと動かなかったりと結構頑張ったが諦めた。
ということで、zombie.jsで行くことに。

zombie.js

JavaScriptを解析できるnode.jsベースのヘッドレスブラウザ
軽量コンパクトな反面、機能は限定的

Phantomjsはまた、そのうち試そう。

さて、次回はインストールを記事にしよう。

19
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?