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