ソフトウェア開発の過程において、自動テストは徐々に開発チームの標準機能になってきました。これにより、開発チームがバグをより迅速に発見して修正し、ソフトウェアの品質と信頼性を確保できます。ただし、自動テストの作成と保守は、多くの場合、退屈で複雑な作業です。この記事では、PHP WebDriver を使用して、管理と保守が容易な自動テストを実装する方法を紹介します。
PHP WebDriver は PHP ライブラリであり、WebDriver プロトコルの実装であり、ブラウザの制御に使用できます。 WebDriver プロトコルはブラウザの制御に使用される標準であり、異なる言語やプラットフォーム間で対話できます。
PHP WebDriver は、複数の種類のブラウザを処理でき、テスト用の安定したプラットフォームを提供し、使いやすい API を提供します。 PHP WebDriver を使用して記述された例を次に示します。
use FacebookWebDriverRemoteRemoteWebDriver; use FacebookWebDriverWebDriverBy; $host = 'http://localhost:4444/wd/hub'; // Selenium server 的地址 $driver = RemoteWebDriver::create($host, DesiredCapabilities::chrome()); // 访问页面 $driver->get("https://www.baidu.com/"); // 输入搜索词 $input = $driver->findElement(WebDriverBy::id('kw')); $input->sendKeys('php webDriver'); // 点击搜索按钮 $button = $driver->findElement(WebDriverBy::id('su')); $button->click(); // 等待页面加载完毕 $driver->wait()->until( WebDriverExpectedCondition::titleContains('php webDriver') ); // 获取搜索结果 $results = $driver->findElements(WebDriverBy::cssSelector('.result h3')); // 打印搜索结果 foreach ($results as $result) { echo $result->getText() . " "; } // 关闭浏览器 $driver->quit();
上記のコードでは、最初に RemoteWebDriver オブジェクトを作成し、Selenium サービスの URL を指定します。次に、Baidu のホームページにアクセスし、検索ボックスに「php WebDriver」と入力して、検索ボタンをクリックしました。次に、ページが読み込まれるのを待ち、検索結果を取得し、検索結果を出力します。最後にブラウザを閉じました。
PHP WebDriver を使用すると、テスト スクリプトを簡単に作成できることがわかります。 PHP WebDriver を使用して、管理しやすく保守しやすい自動テストを作成する方法を見てみましょう。
ページ オブジェクト パターンは、ブラウザ ページをオブジェクトに抽象化するデザイン パターンです。ページの要素と動作をこのオブジェクトにカプセル化すると、テスト コードの作成と保守が容易になります。 BasePage クラスを作成して、すべてのページに対していくつかの基本的な操作を実装できます。
<?php namespace AppPage; use FacebookWebDriverRemoteRemoteWebDriver; class BasePage { protected $driver; public function __construct(RemoteWebDriver $driver) { $this->driver = $driver; } public function open($url) { $this->driver->get($url); } public function close() { $this->driver->quit(); } }
上の例は、BasePage クラスの基本構造を示しています。これには、Web サイトを開いたり、ブラウザを閉じたりするなど、いくつかの基本的な操作が含まれています。
次に、Baidu ページの検索に使用される SearchPage クラスを作成します。このクラスでは、指定したキーワードを検索して検索結果を返す検索メソッドを定義します。
<?php namespace AppPage; use FacebookWebDriverRemoteRemoteWebDriver; use FacebookWebDriverWebDriverBy; use FacebookWebDriverWebDriverExpectedCondition; class SearchPage extends BasePage { private $url = 'https://www.baidu.com/'; public function __construct(RemoteWebDriver $driver) { parent::__construct($driver); } public function search($keyword) { $this->open($this->url); $input = $this->driver->findElement(WebDriverBy::id('kw')); $input->clear(); $input->sendKeys($keyword); $input->submit(); $this->driver->wait()->until( WebDriverExpectedCondition::titleContains($keyword) ); return $this->getResults(); } private function getResults() { $elements = $this->driver->findElements(WebDriverBy::cssSelector('.result h3')); $results = []; foreach ($elements as $element) { $results[] = $element->getText(); } return $results; } }
前述したように、SearchPage クラスは検索操作をカプセル化し、キーワードを渡して検索を実行する検索メソッドを提供します。 WebDriver の API を使用してページ要素を見つけ、アクションを操作します。 getResults メソッドは、検索結果を取得するために使用されます。
データ駆動型テストは、異なる入力データを使用して同じ機能の複数の側面をチェックするテスト手法です。この例では、データ駆動型テストを使用して、さまざまな入力の検索結果を確認できます。
<?php namespace AppTest; use AppPageSearchPage; use FacebookWebDriverRemoteRemoteWebDriver; class SearchTest extends BaseTest { /** * @dataProvider keywordProvider */ public function testSearch($keyword) { $searchPage = new SearchPage($this->driver); $results = $searchPage->search($keyword); $this->assertGreaterThan(0, count($results), "Search for '$keyword' returned no results"); $this->assertContains($keyword, implode('', $results), "Search for '$keyword' did not return relevant results"); } public function keywordProvider() { return [ ['php WebDriver'], ['facebook WebDriver'], ['selenium WebDriver'], ]; } }
ご覧のとおり、PHPUnit の dataProvider アノテーションを使用して、テスト メソッドのデータ プロバイダーを生成します。この例では、「php WebDriver」、「facebook WebDriver」、「selenium WebDriver」の 3 つのテスト データを渡しました。 testSearch メソッドでは、SearchPage オブジェクトをインスタンス化し、各テスト データを使用して search メソッドを実行します。次に、検索結果の正確性を主張します。
PHPUnit を使用したテストの実行は非常に簡単です。次のコマンドを実行するだけです:
phpunit SearchTest.php
その後、PHPUnit は提供されたテスト クラスとメソッドを使用して、テストの結果を報告します。
概要
この記事では、PHP WebDriver を使用して、管理しやすく保守しやすい自動テストを実現する方法を学びました。ページ オブジェクト パターンとデータ駆動型テストの基本概念を紹介し、サンプル コードを通じて PHP WebDriver を使用してこれらのメソッドを実装する方法を示しました。この記事が自動テストの原則と実践方法をより深く理解するのに役立つことを願っています。
以上がPHP WebDriver を使用した、管理と保守が容易な自動テストの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。