2012-10-25 8 views
6

Ich versuche Behath für BDD Tests zu benutzen. Wenn ich einen Build auf Jenkins ausführe, möchte ich, dass Behat den eingebauten Web-Server von PHP öffnet und ihn dann schließt, nachdem er die Tests ausgeführt hat. Wie geht das?Wie starte ich einen PHP eingebauten Webserver bevor ich einen Test starte und schließe ihn wenn der Test ausgeführt wurde

Grundsätzlich muss ich laufen:

php -S localhost:8000 

In meinem BDD Tests, die ich versucht:

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

Aber dann beim Laufen Behat es ohne Meldung stecken bleibt.

+0

können Sie es manuell von der Maschine ausführen, von denen Jenkins läuft? – Amey

+0

versuchen, false zurückzugeben –

+0

Behat Kontext ist nicht der richtige Ort, um den Server zu starten. Du würdest nicht versuchen, Apache auf diese Weise anzufangen, richtig? –

Antwort

3

Das habe ich selbst gelöst. Ich habe zwei Methoden erstellt. Ich rufe die erste vor dem Ausführen meiner BDD-Tests und die zweite nach dem Ausführen der 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); 
    } 
} 
4

Starten Sie einfach den Server als Teil Ihres Build-Prozesses. Erstellen Sie eine Ant-Aufgabe, die den Server vor der Ausführung startet und nach dem Beenden des Vorgangs wieder beendet.

Ich habe diesen Ansatz erfolgreich verwendet, um den Selenserver zu starten und zu stoppen.