Arhn - архитектура программирования

Как запустить встроенный веб-сервер PHP перед запуском теста и закрыть его после запуска теста

Я пытаюсь использовать Behat для тестирования BDD. При запуске сборки на Jenkins я хотел бы, чтобы Бехат открывал сборку PHP на веб-сервере, а затем закрывал ее после запуска тестов. Как это сделать?

В основном мне нужно запустить:

php -S localhost:8000

В своих тестах BDD я пробовал:

/**
 * @Given /^I call "([^"]*)" with email and password$/
 */
public function iCallWithPostData($uri)
{
    echo exec('php -S localhost:8000');
    $client = new Guzzle\Service\Client();
    $request = $client->post('http://localhost:8000' . $uri, array(), '{"email":"a","password":"a"}')->send();
    $this->response = $request->getBody(true);
}

Но затем при запуске Behat он зависает без каких-либо сообщений.

25.10.2012

  • Вы можете запустить его вручную с машины, на которой работает Дженкинс? 25.10.2012
  • Контекст поведения не является подходящим местом для запуска сервера. Вы бы не пытались запустить apache таким образом, верно? 29.10.2012

Ответы:


1

Просто запустите сервер как часть процесса сборки. Создайте задачи муравья, которые запустят сервер до того, как поведение будет запущено, и уничтожит его, как только поведение будет завершено.

Я успешно использую этот подход для запуска и остановки сервера селена.

26.10.2012

2

Решил это сам. Я создал два метода. Я вызываю первый перед запуском тестов BDD, а второй — после запуска тестов:

private function _startDevelopmentServer($pidfile)
{
    $cmd = 'cd ../../public && php -S 127.0.0.1:8027 index.php';
    $outputfile = '/dev/null';
    shell_exec(sprintf("%s > %s 2>&1 & echo $! >> %s", $cmd, $outputfile, $pidfile));
    sleep(1);
}

private function _killDevelopmentServer($pidfile)
{
    if (file_exists($pidfile)) {
        $pids = file($pidfile);
        foreach ($pids as $pid) {
            shell_exec('kill -9 ' . $pid);
        }
        unlink($pidfile);
    }
}
30.10.2012
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..