How to set $_SERVER variables when running phpunit tests through Jenkins
I am trying to write unit tests for an application where a lot of code changes is not possible. Almost all the .php files in the code base uses some $_SERVER[”] variables like
require_once $_SERVER['DOCUMENT_ROOT'] . '/mainApi.php';
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';
Getting the server variables like this is working fine. I run my tests through commandline as
$ phpunit test.php.
Ques1: Is it possible to set the $_SERVER variables while running the phpunit tests through commandline?
I also have to run these unit tests through Jenkins and I am not able to set these server variable through ANT/build file.
Ques2: Is it possible to set these variable through ant build file in Jenkins or by running any shell script before executing the phpunit tests through Jenkins?
I tried exporting the server variable through a shell script
and calling that script in the build.xml in Jenkins
<export name="setEnv" description="set server var"> <exec executable="sh"> <arg value = "sumit.sh" /> </exec> </target>
but its not working. Is there any setting that I can do for this?
One Solution collect form web for “How to set $_SERVER variables when running phpunit tests through Jenkins”
I’m not sure about #1, but PHPUnit itself would have to support it. I don’t see any way to do that via the command line. However, if you put your current workaround into
bootstrap.php you don’t have to do it in each test.
<exec> allows you to set environment variables using nested
<env> elements. I use this in Jenkins.
<exec executable="phpunit" ...> <env key="DOCUMENT_ROOT" value="/var/www/php"/> </exec>
Update: You typically create
bootstrap.php to setup add the source directory to the include path and initialize the test environment however you need. This file isn’t supplied by PHPUnit–unlike
I place it in the same directory as
phpunit.xml, but that’s because I have a separate file for each project. It goes in the directory that holds your tests typically. This allows you to run
phpunit from the command-line without telling it how to find those configuration files. Otherwise you have to use
--configuration to point to them.
Here is how I structure a typical project:
<project-root>/ build.xml src/ MyClass.php test/ MyClassTest.php phpunit.xml bootstrap.php