douzhao7445
2012-10-25 16:11
浏览 36
已采纳

如何在运行测试之前启动PHP内置Web服务器,并在测试运行后关闭它

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 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);
        }
    }
    
    评论
    解决 无用
    打赏 举报
  • 查看更多回答(1条)

相关推荐 更多相似问题