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

发布于 2021-01-31 22:32: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

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

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

Ques2:
是否可以通过Jenkins中的ant构建文件或通过运行任何Shell脚本来设置这些变量,然后再通过Jenkins执行phpunit测试?

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

    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>

但它不起作用。有什么我可以做的设置吗?谢谢!

关注者
0
被浏览
64
1 个回答
  • 面试哥
    面试哥 2021-01-31
    为面试而生,有面试问题,就找面试哥。

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

    对于#2,<exec>允许您使用嵌套<env>元素设置环境变量。我在詹金斯使用这个。

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

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

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

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

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


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看