Как установить переменные $ _SERVER [''] при запуске тестов phpunit через Jenkins - PullRequest
13 голосов
/ 04 августа 2011

Я пытаюсь написать модульные тесты для приложения, в котором много изменений кода невозможно.Почти все .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 через командную строку?

Мне также нужно запустить эти модульные тесты через Дженкинса, и яне удалось установить эти переменные сервера через 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>

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

1 Ответ

6 голосов
/ 04 августа 2011

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

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

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

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

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

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

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