Codeception - 在多个环境中运行验收测试


Codeception - Run acceptance tests in multiple environments

我正在尝试使用不同的环境为多个站点运行测试。这些网站都遵循相同的模板,因此通用测试足以涵盖所有网站。

在我的acceptance.suite.yml文件中,我使用不同的URL设置了所有环境。

在我的 Cest 文件中,我加载了在特定环境中调用的函数,并设置了一些可能因站点、登录信息等而异的变量。

然后,我为每个环境调用相同的函数。

当我运行验收测试时,我会告诉它使用多个"--env foo"运行哪些环境。

这一切都有效,但我有 20 多个站点要测试,这意味着每次我想运行测试时都要写 20 个 '--env foo'。好像有点多。

有没有更好的方法?

如果您已使用 composer 安装了 codeception,则可以编辑以下文件:

vendor/codeception/

codeception/src/Codeception/Codeception.php

导航到 run 函数(第 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我很想听听,因为这当然是一个更干净的解决方案:)