我想我可能会错误地认识这个概念,或者没有正确地考虑某些事情。我正在寻找一种连接到db的方法,然后为表的每一行运行selenium测试(在phantomjs中)。测试是在定制的CMS上检查损坏的图像,并且可以应用于任何CMS。
我基本上希望通过从db加载ID然后为每个ID运行单独的测试来为每个页面(特定类型)运行验收测试。
这是我到目前为止所做的:
$I = new WebGuy($scenario);
$results = $I->getArrayFromDB('talkthrough', '`key`', array());
foreach ($results as $r) {
$I->wantTo('Check helpfile '.$r['key'].'for broken images');
$I->amOnPage('/talkThrough.php?id='.$r['key']);
$I->seeAllImages();
}
这在一定程度上起作用,它执行直到第一次失败(因为它运行为1次测试,有很多断言)。
如何将此运行作为单独的测试?
答案 0 :(得分:3)
我最终循环并以逗号分隔的字符串存储失败的密钥并设置bool来说明发现的失败。
$I = new WebGuy($scenario);
$results = $I->getArrayFromDB('talkthrough', '`key`', array());
$failures = "Broken help files are: ";
$failures_found = false;
foreach ($results as $key => $r) {
$I->wantTo('Check helpfile '.$r['key'].'for broken images');
$I->amOnPage('/talkThrough.php?id='.$r['key']);
$allImagesFine = $I->checkAllImages();
if($allImagesFine != '1')
{
$fail = $r['key'].",";
$failures.= $fail;
$failures_found = true;
}
}
$I->seeBrokenImages($failures_found,$failures);
以下作为我的webhelper
<?php
namespace Codeception\Module;
// here you can define custom functions for WebGuy
class WebHelper extends \Codeception\Module
{
function checkAllImages()
{
$result = $this->getModule('Selenium2')->session->evaluateScript("return (function(){ return Array.prototype.slice.call(document.images).every(function (img) {return img.complete && img.naturalWidth > 0;}); })()");
return $result;
}
function getArrayFromDB($table, $column, $criteria = array())
{
$dbh = $this->getModule('Db');
$query = $dbh->driver->select($column, $table, $criteria);
$dbh->debugSection('Query', $query, json_encode($criteria));
$sth = $dbh->driver->getDbh()->prepare($query);
if (!$sth) \PHPUnit_Framework_Assert::fail("Query '$query' can't be executed.");
$sth->execute(array_values($criteria));
return $sth->fetchAll();
}
function seeBrokenImages($bool,$failArray)
{
$this->assertFalse($bool,$failArray);
}
}
感谢您提交的答案
答案 1 :(得分:1)
那不行。请避免测试中的循环和条件。
您应该手动放置key
。而不是从数据库中获取它们。因为它引入了额外的复杂性
答案 2 :(得分:0)
它可能不是最好的设计选择,但是如果你真的想要遵循这种方法,你可以使用代码中的指定工具,以便即使一个断言失败也可以继续运行测试: https://github.com/Codeception/Specify