2012-10-25 27 views
6

Tôi đang cố gắng sử dụng Behat cho thử nghiệm BDD. Khi chạy một build trên Jenkins, tôi muốn Behat mở PHP build trong web server và sau đó đóng nó lại sau khi chạy test. Làm thế nào để làm điều đó?Làm thế nào để bắt đầu một PHP được xây dựng trong máy chủ web trước khi chạy một thử nghiệm và đóng nó sau khi thử nghiệm đã chạy

Về cơ bản tôi cần phải chạy:

php -S localhost:8000 

Trong các thử nghiệm BDD của tôi, tôi đã cố gắng:

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

Nhưng sau đó khi chạy Behat nó bị mắc kẹt mà không cần bất kỳ tin nhắn.

+0

bạn có thể chạy thủ công từ máy mà Jenkins đang chạy không? – Amey

+0

try return false –

+0

Ngữ cảnh Behat không phải là nơi thích hợp để khởi động máy chủ. Bạn sẽ không cố gắng để bắt đầu apache theo cách này, phải không? –

Trả lời

3

Giải quyết vấn đề này. Tôi đã tạo ra hai phương pháp. Tôi gọi người đầu tiên trước khi chạy thử nghiệm BDD của tôi và cái thứ hai sau khi chạy thử nghiệm:

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); 
    } 
} 
4

Chỉ cần khởi động máy chủ như là một phần của quá trình xây dựng của bạn. Tạo một nhiệm vụ kiến ​​mà sẽ bắt đầu máy chủ trước khi behat được chạy và sẽ giết nó một khi behat được hoàn thành.

Tôi đã sử dụng thành công phương pháp này để bắt đầu và dừng máy chủ selenium.