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

标签 php ant phpunit jenkins

我正在尝试为无法进行大量代码更改的应用程序编写单元测试。代码库中几乎所有 .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>

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

最佳答案

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

对于#2, <exec> 允许您使用嵌套 <env> 设置环境变量元素。我在 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

关于php - 通过 Jenkins 运行 phpunit 测试时如何设置 $_SERVER [' ' ] 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6934951/

相关文章:

php - 如何在不替换 PHP 中的任何内容的情况下插入文本

PHP SQL 选择哪里和

ant - AntCall 和 Ant 任务有什么区别?

php - Sonar 分析PHP项目的问题

php - 在 Laravel 中使用 PHPUnit 测试上传

php - echo 从不显示来自mysql的空白文本内容

PHP和MySQL两次查询输出数据

java - 从 Ant 迁移到Gradle-Macrodef替代品?

android - 更新 SDK 后,构建 Android 包失败并显示 'apply' 消息 - 如何修复?

PhpUnit 当我使用 Mock Builder for Interface 时,我得到了正确的类