【问题标题】:How to set $_SERVER[' '] variables when running phpunit tests through Jenkins通过 Jenkins 运行 phpunit 测试时如何设置 $_SERVER[''] 变量
【发布时间】:2011-08-04 00:39:04
【问题描述】:

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

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

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

$_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 构建文件或在通过 Jenkins 执行 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>

但它不起作用。我可以为此做任何设置吗? 谢谢!

【问题讨论】:

    标签: php ant phpunit jenkins


    【解决方案1】:

    我不确定#1,但 PHPUnit 本身必须支持它。我看不出有任何方法可以通过命令行做到这一点。但是,如果您将当前的解决方法放入 bootstrap.php,则不必在每次测试中都这样做。

    对于#2,&lt;exec&gt; 允许您使用嵌套的&lt;env&gt; 元素设置环境变量。我在 Jenkins 中使用它。

    <exec executable="phpunit" ...>
        <env key="DOCUMENT_ROOT" value="/var/www/php"/>
    </exec>
    

    更新:您通常创建bootstrap.php 来设置将源目录添加到包含路径并根据需要初始化测试环境。该文件不是由 PHPUnit 提供的——与 phpunit.xml 不同。

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

    这是我构建一个典型项目的方式:

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

    【讨论】:

    • 可以直接通过build文件设置$_SERVER['DOCUMENT_ROOT']吗?您的方法&lt;env key="DOCUMENT_ROOT" value="/path" /&gt; 工作得非常好,但是我的代码中有很多 SERVER 变量,我必须将所有$_SERVER[] = getenv() 写入一个 php 文件,并且必须在所有测试类中导入该文件。有什么办法可以减少吗?
    • @Sumitk - 您可以在bootstrap.php 中进行分配,PHPUnit 在运行任何测试之前会自动加载。要么将文件放在测试根目录下,要么使用--bootstrap 命令行参数将 PHPUnit 指向它。
    • bootstrap.php 是我们与测试文件一起创建的文件还是 PHPUnit 附带的文件?因为我在我的系统上看不到它。另外,如果我们创建它,我应该把它放在哪里?使用所有测试文件还是使用 `phpunit.xml.dist'?
    • 您创建它,通常是为了设置您的包含路径并初始化测试环境。查看我的更新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    • 2011-04-28
    • 2022-11-20
    • 2010-12-03
    • 2012-05-06
    • 2011-10-07
    • 2019-04-16
    相关资源
    最近更新 更多