2012-10-25 16:11
浏览 36


I am trying to use Behat for BDD testing. When running a build on Jenkins, I would like Behat to open PHP's build in web server and then close it after running the tests. How to do that?

Basically I need to run:

php -S localhost:8000

In my BDD tests I tried:

 * @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);

But then when running Behat it gets stuck without any message.

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • donglu2761 2012-10-30 11:21

    Solved this myself. I have create two methods. I call the first one before running my BDD tests and the second one after I ran the tests:

    private function _startDevelopmentServer($pidfile)
        $cmd = 'cd ../../public && php -S index.php';
        $outputfile = '/dev/null';
        shell_exec(sprintf("%s > %s 2>&1 & echo $! >> %s", $cmd, $outputfile, $pidfile));
    private function _killDevelopmentServer($pidfile)
        if (file_exists($pidfile)) {
            $pids = file($pidfile);
            foreach ($pids as $pid) {
                shell_exec('kill -9 ' . $pid);
    解决 无用
    打赏 举报
  • 查看更多回答(1条)

相关推荐 更多相似问题