Как установить переменные $_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
.
Ques1: Можно ли установить переменные $_SERVER при запуске тестов phpunit через командную строку?
Мне также нужно запустить эти модульные тесты через Jenkins, и я не могу установить эту переменную сервера через файл ANT/build.
Ques2: Можно ли установить эту переменную через файл сборки ant в Jenkins или запустить любую оболочку script перед выполнением тестов phpunit через Jenkins?
Я попытался экспортировать переменную сервера через оболочку script
export DOCUMENT_ROOT=/server/path-to-root-dir
и называя это script в файле build.xml в Jenkins
<export name="setEnv" description="set server var">
<exec executable="sh">
<arg value = "sumit.sh" />
</exec>
</target>
но не работает. Есть ли какие-то настройки, которые я могу сделать для этого?
Спасибо!
Ответы
Ответ 1
Я не уверен в # 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
из командной строки, не сообщая ему, как найти эти файлы конфигурации. В противном случае вы должны использовать --bootstrap
и/или --configuration
, чтобы указать на них.
Вот как я структурирую типичный проект:
<project-root>/
build.xml
src/
MyClass.php
test/
MyClassTest.php
phpunit.xml
bootstrap.php