t.me/atinfo_chat Telegram группа по автоматизации тестирования

Allure + Codeception + Dataprovider. В отчёт попадают только последние сценарии из DataProvider.

Теги: #<Tag:0x00007f9afbb22990> #<Tag:0x00007f9afbb227d8> #<Tag:0x00007f9afbb226c0> #<Tag:0x00007f9afbb225d0>

Пытаюсь настроить связку 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);
}
1 Симпатия