Stellt einen HTTP-Server-Testfall für PHPUnit bereit. Der Server wird vom integrierten PHP-Server zum Testen netzwerkbezogener Aufrufe betrieben.
Diese Bibliothek erfordert PHP 7.3 oder neuer, einschließlich PHP 8.0, 8.1 und 8.2. Es läuft mit den PHPUnit-Versionen 8 und 9.
composer require giberti/phpunit-local-server
GibertiPHPUnitLocalServerLocalServerTestCase
als würden Sie PHPUnitFrameworkTestCase
erweiternphp
Binärdatei bereitstellen, indem Sie die statische Eigenschaft $phpBinary
in der Klasse überschreiben. Rufen Sie entweder die Hilfsmethode createServerWithDocroot()
oder createServerWithRouter()
auf und führen Sie dann Ihren Test aus.
use Giberti PHPUnitLocalServer LocalServerTestCase ;
class Test extends LocalServerTestCase
{
public function testFoo () {
static :: createServerWithDocroot ( ' ./tests/localhost ' );
$ url = $ this -> getLocalServerUrl () . ' /foo ' ;
$ content = file_get_contents ( $ url );
$ this -> assertEquals ( ' ... ' , $ content , ' Content mismatch ' );
}
}
Um die Leistung Ihrer Tests zu optimieren, ist es am besten, den Server wann immer möglich wiederzuverwenden. Um dies zu vereinfachen, starten Sie den Server einfach am Anfang der Klasse, indem Sie eine setupBeforeClass()
Methode mit der gewünschten Konfiguration definieren.
use Giberti PHPUnitLocalServer LocalServerTestCase ;
class Test extends LocalServerTestCase
{
public static function setupBeforeClass () {
static :: createServerWithDocroot ( ' ./tests/localhost ' );
}
public function testFoo () {
$ url = $ this -> getLocalServer () . ' /foo ' ;
$ content = file_get_contents ( $ url );
$ this -> assertEquals ( ' ... ' , $ content , ' Content mismatch ' );
}
public function testBar () {
$ url = $ this -> getLocalServer () . ' /bar ' ;
$ content = file_get_contents ( $ url );
$ this -> assertEquals ( ' ... ' , $ content , ' Content mismatch ' );
}
}
Es ist möglich, den Server unter einer anderen PHP-Laufzeit als der Version zu betreiben, auf der Ihre Testsuite ausgeführt wird. Dies kann beim Testen Ihres Codes unter mehreren PHP-Versionen hilfreich sein. Im folgenden Beispiel startet der Server mit der ausführbaren PHP 7.3- und 8.1-Datei in /usr/local/bin/
auf dem Host-Testsystem. Ihr Weg kann ein anderer sein.
use Giberti PHPUnitLocalServer LocalServerTestCase ;
class Test73 extends LocalServerTestCase
{
static $ phpBinary = ' /usr/local/bin/php73 ' ;
public function testFoo () {
static :: createServerWithDocroot ( ' ./tests/localhost ' );
$ url = $ this -> getLocalServer () . ' /foo ' ;
$ content = file_get_contents ( $ url );
$ this -> assertEquals ( ' ... ' , $ content , ' Content mismatch ' );
}
}
class Test81 extends LocalServerTestCase
{
static $ phpBinary = ' /usr/local/bin/php81 ' ;
public function testFoo () {
static :: createServerWithDocroot ( ' ./tests/localhost ' );
$ url = $ this -> getLocalServer () . ' /foo ' ;
$ content = file_get_contents ( $ url );
$ this -> assertEquals ( ' ... ' , $ content , ' Content mismatch ' );
}
}
Für die Interaktion mit dem lokalen Server stehen die folgenden Methoden zur Verfügung.
Erstellt einen lokalen Server mithilfe eines Dokumentstamms.
static :: createServerWithDocroot ( ' ./path/to/site/files ' );
Erstellt einen lokalen Server mithilfe einer Router-Datei. Wenn Sie ein Framework verwenden, ist dies höchstwahrscheinlich die Datei index.php
in Ihrer Dokumentroute.
static :: createServerWithRouter ( ' ./path/to/router.php ' );
Entfernt den lokalen Server. Nützlich, um den Sitzungsstatus zurückzusetzen. Dies wird automatisch in der Lebenszyklusmethode tearDownAfterClass()
aufgerufen.
static :: destroyServer ();
Der Port für den Server ist normalerweise 8000
, er wird jedoch im Konfliktfall dynamisch zugewiesen. Der sicherste Weg, auf den Host zuzugreifen, besteht darin, die Methode getServerUrl()
aufzurufen und diese als Root für jede URL-Konstruktion zu verwenden.
$ schemeHost = $ this -> getServerUrl ();
$ fullUrl = $ schemeHost . " /path/to/file/to/access " ;
echo $ fullUrl ; // http://localhost:8000/path/to/file/to/access