(PHP) Behat と Mink を使用して Web アプリケーションの BDD (動作テスト駆動開発) を行う_PHP チュートリアル
まず第一に、私自身の理解によると、TDD と BDD の違いは何ですか?
1 つ目は考え方の違いです。従来の TDD はインターフェイスが正しく実装されているかどうかに重点を置いているため、通常、各インターフェイスには対応する単体テスト クラスがあります。 BDD はストーリー テンプレートとシナリオを使用して、ユーザーが製品を操作するときの製品の特定の機能パフォーマンスを記述します。これは従来のユース ケースに似ています。 BDD テストの作成は、テスターが通常作成するテスト ケースに似ています。 BDD は一般的に自然言語で表現されているため、開発者でなくても理解できます。以下は BDD の例です:
Behat は PHP の BDD フレームワークであり、PHPUnit で使用できます。
より詳しい紹介については、behat の公式 Web サイト http://behat.org/
をご覧ください。
Web アプリケーションの自動テストを行う場合、TDD を使用するか BDD を使用するかにかかわらず、インターフェイス テストに遭遇するといくつかの問題が発生します。
通常、解決策は 2 つあります:
1. GUI テストをバイパスします。ほとんどの Web 開発では MVC フレームワークが使用されているため、MVC の原則に従って、コントローラーはタスクを完了するために正しいデータをビューに渡すだけで済みます。したがって、テストを行う場合は、Controller が指定された View に正しいデータを渡すかどうかを確認するだけで済みます。View がデータを正しく表示できるかどうかは、検証する結合テストに依存します。
2. GUI テスト フレームワークまたはブラウザ エミュレータを使用します。今回はブラウザエミュレータの使い方についてお話します。
ブラウザシミュレータは大きく2種類に分けられます:
• ヘッドレス ブラウザ エミュレータ - コンソールを介して GUI を使用せずに完全に実行できるブラウザ エミュレータ。このようなエミュレータは、高レベル (HTTP スタック) では HTTP リクエストを実行し、ブラウザ アプリケーションをエミュレートできますが、低レベル (JS、CSS) では完全に制限されています。ただし、ページを開いたりリンクをクリックしたりするために CSS を解析したり JS を実行したりする必要がないため、実際のブラウザよりもはるかに高速です。
• 簡単に言えば、このエミュレータは実際のブラウザよりも高速ですが、CSS や JS を処理できません。
• ブラウザ内エミュレータ - このエミュレータは実際のブラウザで動作し、ブラウザを完全に制御し、テストのニーズに合わせてゾンビとして使用します。これにより、標準の完全に構成された実際のブラウザが得られ、これを制御できるようになります。 CSS スタイル、JS および AJAX の実行 - すべてがすぐにサポートされます。
• このシミュレータは実際のブラウザに近く、CSS と JS を扱うことができますが、速度は最初のものよりも比較的遅くなります。
しかし実際には、実際にテストを行う場合、通常は両方のシミュレータが必要になります。すべてのテストにブラウザ内シミュレータを使用することはできません。テストが多数ある場合、速度が耐えられないほどになるからです。ただし、同様の Ajax リクエストをテストする必要がある場合は、ヘッドレス シミュレーターを使用できず、ブラウザ内シミュレーターを使用する必要があります。
2 つのシミュレーターは大きく異なり、それぞれに異なる API があるため、テストに 2 つの API セットを同時に使用するのは非常に面倒です。
このとき、MINK は同じ API セットでブラウザ内シミュレータとヘッドレス シミュレータの両方をサポートするブラウザ シミュレータ抽象化レイヤーであるという利点が現れます。
以下では、Behat と MINK を使用して WEB アプリケーションの BDD を行う方法を紹介します。
1.Behatをインストールします
$ pear チャンネル-discover pear.symfony.com
$ pear チャンネル-discover pear.behat.org
$ pear インストール behat/behat
2.MINK
をインストールします
$ pear チャンネル-discover pear.behat.org
$ pear インストール behat/mink-beta
3. 新しい sosabaike ディレクトリを作成し、sosozhidao ディレクトリに入り、behat --init コマンドを実行します
$ mkdir そそばいけ
$cdそそばいけ
$ behat --init
現時点では、behat は features ディレクトリと features/bootstrap/FeatureContext.php ファイルの作成に役立ちます
FeatureContext.php は、単体テストの実際のメソッドが保存される場所です
4. features/search.feature ファイルを作成します
ただし、MINK を使用せずに behat コマンドを直接実行する場合、behat はいくつかのテスト メソッドを features/boostrap/FeatureContext.php に追加することを提案します。これらのテスト メソッドでアサーションを作成するには、Selenium などのスクリプトを使用する必要があります。
5. ただし、MINK を使用する場合は、はるかに簡単です。features/bootstrap/FeatureContext.php ファイルを変更するだけです。
コードを 2 行追加します。a) require_once 'mink/autoload.php';
b) FeatureContext の親クラスを BehatContext から BehatMinkBehatContextMinkContext に変更します
6. behat -dl コマンドを実行します。すべてが正常であれば、次のような結果が表示されます。
上記は実際にMINKでサポートされているAPIの一部です。
7. behat features/search.feature コマンドを実行すると、次の結果が表示されます
現時点では、BDDテストが完了していても、全体のプロセスは非常にシンプルで、テストケースを書くよりも時間はかからず、テストケースにはない機能、つまり検証機能を自動的に実行できます。 。
したがって、テストを行う学生は、テストケースの代わりにこの方法を試してみると、時間を大幅に節約できると個人的に思います。
開発を学ぶ学生の場合、Web アプリケーションの BDD または TDD を行う場合は、GUI テストをバイパスするソリューション、つまりコントローラーのみをテストするソリューションを使用する必要があると個人的に思います。
理由は以下の通りです。
1. 開発者とテスターは、テストの実行速度に対する要件が異なります。テスターは、テストを開始してから他の作業を行い、後で結果を確認するだけで十分です。しかし、開発者は異なります。コードを変更するたびに、完全なテストを実行して、変更によって他の機能が破壊されないことを確認する必要があります。完全なテストの実行に時間がかかる場合、単体テストを実行したい開発者もいます。 MINK を使用すると実際のブラウザでアクセスするよりも高速ですが、常に実際の製品コードにアクセスするため、多くのテストがデータベースにアクセスすることになり、すべてのテストを実行するには非常に時間がかかります。
2. MINK を使用すると実際の製品コードにアクセスするため、関連する環境 (依存ライブラリ、データベースなど) を設定する必要があり、データベースを初期状態に戻す必要もあります。構成リンクにエラーがある限り、最初は合格した単体テストが失敗する可能性があります。これは、優れた単体テストの基準を満たしていません。優れた単体テストは、実行するたびに一貫した結果を保証する必要があります。この効果を実現するには、外部条件 (データベース、ネットワークなど) に依存することはできません。これらの外部条件は、コードを使用して可能な限りシミュレートする必要があります。
NEEさんのブログより抜粋

PHPとPythonにはそれぞれ独自の利点があり、さまざまなシナリオに適しています。 1.PHPはWeb開発に適しており、組み込みのWebサーバーとRich Functionライブラリを提供します。 2。Pythonは、簡潔な構文と強力な標準ライブラリを備えたデータサイエンスと機械学習に適しています。選択するときは、プロジェクトの要件に基づいて決定する必要があります。

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

PHPが多くのWebサイトよりも優先テクノロジースタックである理由には、その使いやすさ、強力なコミュニティサポート、広範な使用が含まれます。 1)初心者に適した学習と使用が簡単です。 2)巨大な開発者コミュニティと豊富なリソースを持っています。 3)WordPress、Drupal、その他のプラットフォームで広く使用されています。 4)Webサーバーとしっかりと統合して、開発の展開を簡素化します。

PHPは、特にWeb開発の分野で、最新のプログラミングで強力で広く使用されているツールのままです。 1)PHPは使いやすく、データベースとシームレスに統合されており、多くの開発者にとって最初の選択肢です。 2)動的コンテンツ生成とオブジェクト指向プログラミングをサポートし、Webサイトを迅速に作成および保守するのに適しています。 3)PHPのパフォーマンスは、データベースクエリをキャッシュおよび最適化することで改善でき、その広範なコミュニティと豊富なエコシステムにより、今日のテクノロジースタックでは依然として重要になります。

PHPでは、弱い参照クラスを通じて弱い参照が実装され、ガベージコレクターがオブジェクトの回収を妨げません。弱い参照は、キャッシュシステムやイベントリスナーなどのシナリオに適しています。オブジェクトの生存を保証することはできず、ごみ収集が遅れる可能性があることに注意する必要があります。

\ _ \ _ Invokeメソッドを使用すると、オブジェクトを関数のように呼び出すことができます。 1。オブジェクトを呼び出すことができるように\ _ \ _呼び出しメソッドを定義します。 2。$ obj(...)構文を使用すると、PHPは\ _ \ _ Invokeメソッドを実行します。 3。ロギングや計算機、コードの柔軟性の向上、読みやすさなどのシナリオに適しています。

繊維はPhp8.1で導入され、同時処理機能が改善されました。 1)繊維は、コルーチンと同様の軽量の並行性モデルです。 2)開発者がタスクの実行フローを手動で制御できるようにし、I/O集約型タスクの処理に適しています。 3)繊維を使用すると、より効率的で応答性の高いコードを書き込むことができます。

PHPコミュニティは、開発者の成長を支援するための豊富なリソースとサポートを提供します。 1)リソースには、公式のドキュメント、チュートリアル、ブログ、LaravelやSymfonyなどのオープンソースプロジェクトが含まれます。 2)StackOverFlow、Reddit、およびSlackチャネルを通じてサポートを取得できます。 3)開発動向は、RFCに従うことで学ぶことができます。 4)コミュニティへの統合は、積極的な参加、コード共有への貢献、および学習共有への貢献を通じて達成できます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

WebStorm Mac版
便利なJavaScript開発ツール

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

メモ帳++7.3.1
使いやすく無料のコードエディター
