我如何在超过 1 个网站上执行 phpunit 测试

Posted

技术标签:

【中文标题】我如何在超过 1 个网站上执行 phpunit 测试【英文标题】:How can i execute phpunit tests on more than 1 website 【发布时间】:2017-11-02 19:22:59 【问题描述】:

我创建了一组使用 phpunit 和 selenium 创建的测试用例,并在网站上执行。但是现在,我必须为第二个网站执行相同的测试。唯一的区别是访问网站的 url。

我尝试使用每次 phpunit 运行时设置为不同值的 SESSION 变量。在每个测试用例中,我都会引用这个 SESSION var,但它对我不起作用。我该如何处理?我不想有两个版本的相同测试用例。

我尝试了什么:

session_start();
    $environments = array('www.test1.com', 'www.test2.com');
    $arrlength = count($environments);

    for($x = 0; $x < $arrlength; $x++) 
        $_SESSION['TEST_ENVIRONMENT'] = $environments[$x]; // Set session variable = environment
        phpunit -c phpunit.xml // xml file containing the testcases
        unset($_SESSION['TEST_ENVIRONMENT']); //Unset only TEST_ENVIRONMENT index in session variable
    

【问题讨论】:

【参考方案1】:

我建议您使用environment variables,而不是会话变量。环境变量允许您定制程序或脚本运行的环境。

它们的副作用也比might not even work on the command-lone 的会话少。环境变量也可以在您的测试套件中更直接地访问。它们满足您将值传递给您的测试套件的需求。

让我们看一个例子:

$environments = array('www.test1.com', 'www.test2.com');
foreach ($environments as $environment) 
    putenv(sprintf("TEST_ENVIRONMENT=%s", $environment));
    passthru('phpunit -c phpunit.xml');

这里使用putenv php function 设置TEST_ENVIRONMENT 环境变量。那么当phpunit执行时,执行的子shell phpunit继承了PHP-scripts环境。

在您的测试中,当您需要访问 TEST_ENVIRONMENT 环境变量时,您可以使用

getenv("TEST_ENVIRONMENT");

$_ENV["TEST_ENVIRONMENT"];

如您所见,无需启动会话等,访问非常简单。

【讨论】:

以上是关于我如何在超过 1 个网站上执行 phpunit 测试的主要内容,如果未能解决你的问题,请参考以下文章

PHPUnit:模拟__get()导致“__ get()必须正好接受1个参数......”

Laravel 4在TestCase中找不到测试

使用 PHPUnit 对具有多种用户类型的网站进行单元测试的最佳方法

Jmeter基础 Linux上运行Jmeter

如何在 laravel 5.5 中运行 phpunit

在 Ubuntu 上使用 composer 安装 PHPUnit 的好处?