Пытаюсь настроить связку Allure + Codeception + DataProvider. Но в отчет Allure попадают только последние сценарии из DataProvider.
Покажите цикл.
А тесты реально проходят все? Или тоже только последний?
В репорте Codeception попадают все результаты - значит выполняются. А в xml файлах (которые генерятся для дальнейшего отчёта Allure) только последние сценарии. Тесты выполняются параллельно, хотя это вряд-ли как-то влияет. Скорее всего проблема в том, что имя у этих тестов одинаковое, и каждый следующий тест перезаписывает предыдущий.
Я тоже сталкивался с такой проблемой, сделал хак в vendor/allure-framework/allure-codeception/src/Yandex/Allure/Adapter/AllureAdapter.php добавляя к названию теста номер итерации датапровайдера.
public function testStart(TestEvent $testEvent)
{
$test = $testEvent->getTest();
$testName = $this->testIteration > 1 ? $test->getName() . $this->testIteration : $test->getName();
$test->getMetadata()->setName($testName);
....
public function suiteBefore(SuiteEvent $suiteEvent)
{
$this->testIteration = 1;
...
public function testStart(TestEvent $testEvent)
{
....
if (!is_null($test->getMetadata()->getParam('example'))) {
$this->testIteration++;
}
}
Как сделать нормальный фикс не разобрался
Спасибо за ответ! Работает. Но я немного изменил код, взяв за основу вашу логику. И перенёс код из папки vendor в helper. Может кому-то пригодится.
public static $testIteration;
public function _beforeSuite($settings = array())
{
self::$testIteration = 1;
}
public function _before(\Codeception\TestInterface $test)
{
$testExample = $test->getMetadata()->getCurrent('example');
if ($testExample && isset($testExample['scenarioName'])) {
$testName = $test->getMetadata()->getName() . $testExample['scenarioName'];
}else{
$testName = $test->getMetadata()->getName() . '. Scenario '. self::$testIteration;
self::$testIteration++;
}
$test->getMetadata()->setName($testName);
}