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

Sum*_*itk 13 php ant phpunit jenkins

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

require_once $_SERVER['DOCUMENT_ROOT'] . '/mainApi.php';
Run Code Online (Sandbox Code Playgroud)

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

$_SERVER['DOCUMENT_ROOT'] = getenv('DOCUMENT_ROOT');
require_once $_SERVER['DOCUMENT_ROOT'] . '/mainApi.php';
Run Code Online (Sandbox Code Playgroud)

获取这样的服务器变量工作正常.我通过命令行运行我的测试$ phpunit test.php.

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

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

问题2:是否可以通过Jenkins中的ant构建文件设置这些变量,或者在通过Jenkins执行phpunit测试之前运行任何shell脚本?

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

    export DOCUMENT_ROOT=/server/path-to-root-dir
Run Code Online (Sandbox Code Playgroud)

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

<export name="setEnv" description="set server var">
    <exec executable="sh">
       <arg value = "sumit.sh" />
    </exec> 
</target>
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*ess 6

我不确定#1,但PHPUnit本身必须支持它.我没有看到通过命令行做任何方法.但是,如果您将当前的解决方法放入其中bootstrap.php,则不必在每个测试中执行此操作.

对于#2,<exec>允许您使用嵌套<env>元素设置环境变量.我在Jenkins中使用它.

<exec executable="phpunit" ...>
    <env key="DOCUMENT_ROOT" value="/var/www/php"/>
</exec>
Run Code Online (Sandbox Code Playgroud)

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

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

以下是我构建典型项目的方法:

<project-root>/
    build.xml
    src/
        MyClass.php
    test/
        MyClassTest.php
        phpunit.xml
        bootstrap.php
Run Code Online (Sandbox Code Playgroud)