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

时间:2014-12-24 09:45:39

标签: php codeception

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

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

在我的Cest文件中,我有一大堆在特定环境中调用的函数,并设置一些可能在站点之间不同的变量,登录信息等。

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

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

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

有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

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

供应商/ 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设置),否则执行all:

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

如果有人知道如何干净地重写Codecept.php中的核心功能而不直接编辑文件,我很乐意听到,因为那当然是一个更清洁的解决方案:)