Подтвердить что ты не робот

Как установить переменные $_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>

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

4b9b3361

Ответ 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