Codeception-新しいテスト

PHPは非常に人気のあるプログラミング言語ですが、PHPでのテストは必要不可欠というよりも専門家の特権です。 それは本当にPHP開発者がすべて田舎のコーダーだからでしょうか? 私は信じない。 最も可能性が高いのは、テストシステムが時々不必要に複雑になるという事実です。 そして、逆に、テストは非常に単純でなければなりませんでした。読みやすく、書きやすく、デバッグし、そしてもちろん、すばやく実行できます。 これをPHPに実装する方法についての私のビジョンは、 Codeceptionと呼ばれるプロジェクトをもたらしました。



これにより、Webアプリケーションのテストは次のようになります。

<?php $I = new TestGuy($scenario); $I->wantTo('create new blog post'); $I->amOnPage('/blog/posts'); $I->click('Create new post'); $I->fillField('Title','Codeception, a new way of testing!'); $I->fillField('Text','Codeception is new PHP full-stack testing framework.'); $I->click('Send'); $I->see('Congratulations, your post is successfully created!');
      
      







同意して、このようなテストは追加のコメントなしで理解できます。

そして今、最も興味深いもの:このコードは、 symfonySymfony2Zend Frameworkのフレームワーク 、ブラウザーエミュレーターGoutte、さらにはSeleniumの機能テストとして、変更なしで実行できます。 したがって、ほとんどすべてのサイトの機能テストを作成するための単一のインターフェースが提供されます。



Codeceptionでは 、最も単純な方法で、テスト全体をスクリプトとして記述します。 Webアプリケーションを使用するユーザーのアクションを繰り返します。リンクをクリックしてフォームに入力し、結果が表示されることを期待します。 アクションを正確に反映するテストを作成することは論理的です。 同時に、IDEでオートコンプリートを使用する場合、テストを記述するプロセスは非常に簡単です。







Codeceptionは3つの柱で実行されます。

-テスト環境として、 PHPUnitが使用されます。

-受け入れテスト用- ミンク 。 彼にとって、Konstantin Kudryashov everzetに感謝します。

-そしてもちろん、 Symfonyコンポーネント 。 ほとんどすべてに使用されます。 特に注目すべきは、機能テストに使用されるBrowserKitです。



開始するには、PEARを介してCodeceptionを設定します。



 $ pear channel-discover codeception.com/pear $ pear install codeception/Codeception
      
      







次に、必要な依存関係をインストールします。

 $ codecept install
      
      







テストするプロジェクトを選択し、そのルートでコマンドを実行します



 $ codecept bootstrap $ codecept build
      
      







bootstrapコマンドは、3つのカテゴリのテスト用の構成ファイルとテストフォルダーを作成します。



-ユニット

-機能的

-受け入れ



ここで、機能テストと受け入れテストを区別することに注意することが重要です。 後者には、同じGoutteまたはSeleniumを介してテストされるWebサーバーが必要です。 機能は、たとえばSymfonyまたはZend Frameworkでテストするときのように、テスト自体の中でアプリケーションを実行します。



開始する最も簡単な方法は、受け入れテストを作成することです。 tests / acceptanceディレクトリで、新しいStartPageCept.phpファイルを作成します。



 <?php $I = new WebGuy($scenario); $I->wantToTest('front page of my site'); $I->amOnPage('/'); $I->see('A sample text on my site');
      
      







サイトのホームページに「私のサイトのサンプルテキスト」というテキストがあることを確認します。 実際にあるテキストを入力すると、テストを実行する準備が整います。

ただし、開始する前に、受け入れテストではWebサーバー内でサイトを実行する必要があることに注意してください。 したがって、あなたは私たちのサイトにアクセスできるURLを伝える必要があります。 ファイルを開きます:tests /acceptance.suite.yml



  config: PhpBrowser: url: '   url  '
      
      







今やる



 $ codecept run acceptance
      
      







そして、次のようなものが表示されます:



 Suite acceptance started Trying to see front page of my site (StartPageCept) - Ok Time: 1 second, Memory: 21.00Mb OK (1 test, 1 assertions)
      
      







これで、アプリケーションのより複雑なテストの作成を開始できます。 たとえば、これはサイトでの承認のテストのように見える場合があります。



 <?php $I = new WebGuy($scenario); $I->wantTo('log in as regular user'); $I->amOnPage('/login'); $I->fillField('Username','davert'); $I->fillField('Password','qwerty'); $I->click('Login'); $I->see('Hello, davert'); ?>
      
      







ドキュメントでテストを書くことについてもっと読んでください。



フレームワーク内でこれらのテストのいずれかを実行するには、テストを「tests / functional」にコピーし、ファイルtest / functional.suite.ymlを編集します。

Symfony2の例を示しますが、まったく同じ方法で、Zend Frameworkまたはsymfony、Doctrine1またはDoctrine2を接続できます。



 class_name: TestGuy modules: enabled: [Symfony2, TestHelper]
      
      







そこで、機能テストで使用するSymfony2モジュールを指摘しました。 AppKernelがデフォルトで「app」フォルダーにある場合、追加の構成なしでテストが実行されます。



機能テストを実行するには、次を使用する必要があります。

 $ codecept run functional
      
      







モジュールについて説明します。 モジュールは、テストの作成時に使用可能なアクションを定義します。 複数のモジュールから取得したメソッドは、TestGuyまたはWebGuyスクリプト記述クラスで使用できます。

モジュールは、実質的に設定なしで異なるライブラリとの統合も実装し、アプリケーションに追加のプラグインまたはバンドルをインストールする必要がありません。



Codeceptionはテストを実行するだけでなく、テストに必要な環境をゼロから作成しようとします。 テストの重要な部分は、データベースの準備とクリーンアップです。

モジュールDbを介して実装されます。 テストデータベースを作成し、テストに必要なデータを入力します。 これは手動で、または器具を使用して行うことができます。 データベースダンプを作成し、tests / _dataフォルダーに配置します。 次に、プロジェクトのルートでcodeception.yml構成ファイルを開き、データベースアクセスパラメーターとDbモジュールのダンプパスを入力します。 ここで、tests / acceptance.suite.ymlまたはfunctional.suite.ymlファイルのモジュールのリストにDbモジュールを追加すると、データベースは各テスト後に自動的に更新されます。



ただし、これがクリーニングの唯一の方法ではありません。 DoctrineまたはDoctrine2を使用する場合、適切なモジュールはすべてのリクエストをトランザクションに入れ、最後にロールバックを実行します。

したがって、データベースが詰まることはありません。つまり、データベースを定期的にクリーニングする必要はありません。 このようなテストは非常に迅速に機能しますが、トランザクションは機能テストと単体テストでのみ使用できます。



より完全なドキュメントは、 公式Webサイトにあります。 概要資料と特定のモジュールの説明の両方が利用できます。



Codeceptionは現在ベータ版であり、フィードバックは大歓迎です。

GitHubでプロジェクトをフォローしてください。



All Articles