動的なメニュー構造を持つ Web サイトをテストしたいと考えています。すべてのメニュー項目をループして、すべてのページで同じ一連のテストを実行したいと考えています。定期的に変更される 100 以上のページについて話しています。
behatまたはcodeceptionのいずれかでこれを行いたいと思います。
これを行う方法について誰か考えがありますか?
動的なメニュー構造を持つ Web サイトをテストしたいと考えています。すべてのメニュー項目をループして、すべてのページで同じ一連のテストを実行したいと考えています。定期的に変更される 100 以上のページについて話しています。
behatまたはcodeceptionのいずれかでこれを行いたいと思います。
これを行う方法について誰か考えがありますか?
特定のサイトマップのすべてのページにアクセスして、デッドリンクがないことを確認したいという同様のユースケースがありました。Behat によって返されて処理されるステップの配列を動的に生成するアプローチがありました。現在テストされているページをコンソールで確認できるように、「ページを印刷する」という人為的なステップを追加する必要がありました。
/**
* @Then /^I should access all pages of site map "([^"]*)"$/
*/
public function iShouldAccessAllPagesOfSiteMap($selector) {
$page = $this->getSession()->getPage();
$locator = sprintf('#%s a', $selector);
$elements = $page->findAll('css', $locator);
$steps = array();
foreach ($elements as $element) {
/** @var \Behat\Mink\Element\NodeElement $element */
$steps[] = new Behat\Behat\Context\Step\When(sprintf('I print out page "%s"', $element->getAttribute('href')));
$steps[] = new Behat\Behat\Context\Step\When(sprintf('I go to "%s"', $element->getAttribute('href')));
$steps[] = new Behat\Behat\Context\Step\Then('the response status code should be 200');
}
return $steps;
}
/**
* @When /^I print out page "([^"]*)"$/
*/
public function iPrintOutThePage($page) {
$string = sprintf('Visiting page ' . $page);
echo "\033[36m -> " . strtr($string, array("\n" => "\n| ")) . "\033[0m\n";
}
次に、私のシナリオは次のようになります。
Scenario: my website has no "dead" pages
Given I am on "/examples/site-map/"
Then I should access all pages of site map "c118"
Gist 全体はこちらhttps://gist.github.com/fudriot/6028678