如何在通过Jenkins运行phpunit测试时设置$_SERVER['']变量

13

我正在尝试为一个应用程序编写单元测试,但很多代码更改都不可行。代码库中几乎所有的 .php 文件都使用了一些 $_SERVER[''] 变量,例如:

require_once $_SERVER['DOCUMENT_ROOT'] . '/mainApi.php';

现在当我需要编写和运行PHPUnit测试用例时,我必须以某种方式设置这些变量。目前我是在用户环境中设置这些变量,然后执行。


所需翻译内容为: "So now when I have to write and run PHPUnit test cases I have to somehow set these variables. At present I am setting these variables in the user environment and then doing"
$_SERVER['DOCUMENT_ROOT'] = getenv('DOCUMENT_ROOT');
require_once $_SERVER['DOCUMENT_ROOT'] . '/mainApi.php';

获取服务器变量的方法很好用。我通过命令行运行我的测试,如:$ phpunit test.php

问题1:在通过命令行运行phpunit测试时,是否可以设置$_SERVER变量?

我还必须通过Jenkins运行这些单元测试,但我无法通过ANT/build文件设置这些服务器变量。

问题2:在Jenkins中的ANT构建文件或在执行phpunit测试之前运行任何shell脚本来设置这些变量是否有可能?

我尝试通过shell脚本导出服务器变量。

    export DOCUMENT_ROOT=/server/path-to-root-dir

并在Jenkins的build.xml中调用该脚本。

<export name="setEnv" description="set server var">
    <exec executable="sh">
       <arg value = "sumit.sh" />
    </exec> 
</target>

但它并没有起作用。我是否可以进行任何设置以解决这个问题? 谢谢!

1个回答

6
我不确定 #1,但 PHPUnit 本身需要支持它。我没有看到通过命令行进行的方法。然而,如果你把你当前的解决办法放在 bootstrap.php 中,你就不必在每个测试中都这样做。
对于 #2,<exec> 允许您使用嵌套的 <env> 元素设置环境变量。我在 Jenkins 中使用这个。
<exec executable="phpunit" ...>
    <env key="DOCUMENT_ROOT" value="/var/www/php"/>
</exec>

更新:通常你需要创建bootstrap.php文件,以便将源代码目录添加到包含路径并初始化测试环境。但这个文件不像phpunit.xml一样由PHPUnit提供。

我把它放在与phpunit.xml相同的目录下,但这是因为我每个项目都有一个单独的文件。它通常放在包含测试的目录下。这允许你在命令行中运行phpunit而无需告诉它如何找到这些配置文件。否则你必须使用--bootstrap和/或--configuration来指向它们。

这是我如何组织一个典型的项目结构:

<project-root>/
    build.xml
    src/
        MyClass.php
    test/
        MyClassTest.php
        phpunit.xml
        bootstrap.php

我们能否直接通过构建文件设置 $_SERVER['DOCUMENT_ROOT']?您的方法 <env key="DOCUMENT_ROOT" value="/path" /> 完全正常,但是我的代码中有很多 SERVER 变量,我将不得不在一个 PHP 文件中编写所有的 $_SERVER[] = getenv() 并且必须在所有测试类中导入该文件。有没有办法可以减少这个过程? - Sumitk
@Sumitk - 你可以在 bootstrap.php 中完成分配,PHPUnit 在运行任何测试之前自动加载它。将文件放置在测试根目录下的目录中,或使用 --bootstrap 命令行参数将其指向 PHPUnit。 - David Harkness
这个 bootstrap.php 文件是我们需要和测试文件一起创建的,还是PHPUnit自带的?因为我在我的系统上找不到它。如果我们需要创建它,应该放在哪里?与所有测试文件一起还是与 phpunit.xml.dist 放在一起? - Sumitk
你通常会创建它来设置包含路径并初始化测试环境。请查看我的更新。 - David Harkness

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接