phpunit local server
versions
為 PHPUnit 提供 HTTP 伺服器測試用例。該伺服器由 PHP 的內建伺服器提供支持,用於測試網路相關的呼叫。
該函式庫需要 PHP 7.3 或更高版本,包括 PHP 8.0、8,1 和 8.2。它將與 PHPUnit 版本 8 和 9 一起運行。
composer require giberti/phpunit-local-server
GibertiPHPUnitLocalServerLocalServerTestCase
就像擴充PHPUnitFrameworkTestCase
一樣$phpBinary
屬性來提供不同的php
二進位檔案。 呼叫createServerWithDocroot()
或createServerWithRouter()
幫助器方法,然後執行測試。
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 ' );
}
}
為了優化測試效能,最好盡可能重複使用伺服器。為了讓這件事更容易,只需在類別的開頭透過使用所需的配置定義setupBeforeClass()
方法來啟動伺服器即可。
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 ' );
}
}
可以在與執行測試套件的版本不同的 PHP 運行時下執行伺服器。這有助於在多個版本的 PHP 下測試您的程式碼。在下面的範例中,伺服器將使用主機測試系統上/usr/local/bin/
中的 PHP 7.3 和 8.1 可執行檔啟動。你的道路可能會有所不同。
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 ' );
}
}
提供以下方法與本機伺服器互動。
使用文檔根建立本機伺服器。
static :: createServerWithDocroot ( ' ./path/to/site/files ' );
使用路由器檔案建立本機伺服器。如果您使用框架,這很可能是文件路徑中的index.php
檔案。
static :: createServerWithRouter ( ' ./path/to/router.php ' );
刪除本機伺服器。對於重置會話狀態很有用。這會在tearDownAfterClass()
生命週期方法中自動呼叫。
static :: destroyServer ();
伺服器的連接埠通常是8000
,但是,如果發生衝突,它是動態分配的。存取主機最安全的方法是呼叫getServerUrl()
方法並將其用作任何 Url 建構的根。
$ schemeHost = $ this -> getServerUrl ();
$ fullUrl = $ schemeHost . " /path/to/file/to/access " ;
echo $ fullUrl ; // http://localhost:8000/path/to/file/to/access