Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Codeception—在多个环境中运行验收测试_Php_Codeception - Fatal编程技术网

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

Php Codeception—在多个环境中运行验收测试,php,codeception,Php,Codeception,我正在尝试使用不同的环境为多个站点运行测试。这些网站都遵循相同的模板,所以一个通用测试就足以涵盖所有这些网站 在acceptance.suite.yml文件中,我使用不同的URL设置了所有环境 在我的Cest文件中,我有一堆在特定环境中调用的函数,并设置了一些变量,这些变量可能在站点、登录信息等之间有所不同 然后,我为每个环境调用相同的函数 在运行验收测试时,我使用多个'--env foo'告诉它要运行哪些环境 这一切都是可行的,但我有20多个站点要测试,这意味着每次我想要运行测试时都要编写20

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

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

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

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

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

这一切都是可行的,但我有20多个站点要测试,这意味着每次我想要运行测试时都要编写20'-env-foo'。似乎有点过分


有更好的办法吗

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

供应商/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;
      }
进入:

现在,它应该通过运行“codecept run”来运行所有环境。您可以根据需要修改功能,例如,如果指定,则仅使用特定环境,否则运行所有环境

实际上,如果将最后一位更改为以下内容,则它将使用指定的环境(如果使用--env进行设置),否则将全部执行:

 foreach ($environments as $env => $config) {
        if ($selectedEnvironments) {
            if (!in_array($env, $selectedEnvironments)) {
                continue;
            }
        }
如果有人知道如何在不直接编辑文件的情况下干净地重写Codecept.php中的核心函数,我很想听听,因为这当然是一个更干净的解决方案:)

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