我正在尝试使用不同的环境为多个站点运行测试。这些网站都遵循相同的模板,因此通用测试足以涵盖所有网站。
在我的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我很想听听,因为这当然是一个更干净的解决方案:)