Как установить переменные $ _SERVER при запуске тестов 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 как $ phpunit test.php .

Ques1: Можно ли задавать переменные $ _SERVER при запуске тестов phpunit через командную строку?

Я также должен запускать эти модульные тесты через Jenkins, и я не могу установить эту переменную сервера через ANT / файл сборки.

Ques2: Можно ли установить эту переменную через файл сборки ant в Jenkins или запустить любой скрипт оболочки перед выполнением тестов phpunit через Jenkins?

Я попытался экспортировать переменную сервера через сценарий оболочки

  export DOCUMENT_ROOT=/server/path-to-root-dir 

и вызов этого скрипта в файле build.xml в Jenkins

 <export name="setEnv" description="set server var"> <exec executable="sh"> <arg value = "sumit.sh" /> </exec> </target> 

но он не работает. Есть ли какие-то настройки, которые я могу сделать для этого? Благодаря!

Related of "Как установить переменные $ _SERVER при запуске тестов phpunit через Jenkins"

Я не уверен в # 1, но сам PHPUnit должен будет его поддерживать. Я не вижу никакого способа сделать это через командную строку. Однако, если вы установите текущее обходное решение в bootstrap.php вам не нужно делать это в каждом тесте.

Для # 2 <exec> позволяет устанавливать переменные среды с помощью вложенных элементов <env> . Я использую это в Дженкинсе.

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

Обновление. Обычно вы создаете bootstrap.php для установки исходного каталога на путь include и инициализации тестовой среды, но вам нужно. Этот файл не предоставляется PHPUnit – в отличие от phpunit.xml .

Я phpunit.xml его в тот же каталог, что и phpunit.xml , но это потому, что у меня есть отдельный файл для каждого проекта. Он находится в каталоге, в котором содержатся ваши тесты. Это позволяет запускать phpunit из командной строки, не сообщая ему, как найти эти файлы конфигурации. В противном случае вы должны использовать --bootstrap и / или --configuration чтобы указать на них.

Вот как я структурирую типичный проект:

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