Codeception — запуск приемочных тестов в нескольких средах

Я пытаюсь запустить тесты для нескольких сайтов, используя разные среды. Все сайты следуют одному и тому же шаблону, поэтому общего теста достаточно, чтобы охватить их все.

В моем файле accept.suite.yml я настроил все среды с разными URL-адресами.

В моем файле Cest у меня есть множество функций, которые вызываются в определенной среде, и я устанавливаю некоторые переменные, которые могут различаться между сайтами, информацией для входа в систему и т. д.

Затем я вызываю одну и ту же функцию для каждой среды.

Когда я запускаю приемочные тесты, я говорю, какие среды запускать, используя несколько «--env foo».

Все это работает, но мне нужно протестировать более 20 сайтов, а это означает писать 20 --env foo каждый раз, когда я хочу запустить тест. Кажется немного.

Есть ли способ лучше?


person jastew    schedule 24.12.2014    source источник


Ответы (1)


Если вы установили кодецепцию с помощью композитора, вы можете отредактировать следующий файл:

поставщик/codeception/codeception/src/Codeception/Codecept.php

Перейдите к функции запуска (около строки 125) и измените следующее:

    if (!$selectedEnvironments or empty($environments)) {
        $this->runSuite($settings, $suite, $test);
        return;
    }

    foreach ($environments as $env => $config) {
        if (!in_array($env, $selectedEnvironments)) {
            continue;
      }

В:

    if (/*!$selectedEnvironments or*/empty($environments)) {
        $this->runSuite($settings, $suite, $test);
        return;
    }

    foreach ($environments as $env => $config) {
        /*if (!in_array($env, $selectedEnvironments)) {
            continue;
        }*/

Теперь он должен запускать все среды, запустив «codecept run». Вы можете изменить функцию в соответствии с вашими требованиями, например, чтобы использовать только определенную среду, если она указана, или запускать все среды.

На самом деле, если вы измените последний бит на следующий, он будет использовать указанные среды, если они установлены с помощью --env, а в противном случае выполнить все:

 foreach ($environments as $env => $config) {
        if ($selectedEnvironments) {
            if (!in_array($env, $selectedEnvironments)) {
                continue;
            }
        }

Если кто-нибудь знает, как правильно переписать основную функцию в Codecept.php без непосредственного редактирования файла, я был бы рад услышать, потому что это, конечно, было бы более чистым решением :)

person Milan Simek    schedule 28.12.2014