PHPUnit에 대한 HTTP 서버 테스트 케이스를 제공합니다. 서버는 네트워크 관련 호출을 테스트하기 위해 PHP에 내장된 서버로 구동됩니다.
이 라이브러리에는 PHP 8.0, 8,1 및 8.2를 포함하여 PHP 7.3 이상이 필요합니다. PHPUnit 버전 8 및 9에서 실행됩니다.
composer require giberti/phpunit-local-server
PHPUnitFrameworkTestCase
확장하는 것처럼 GibertiPHPUnitLocalServerLocalServerTestCase
확장합니다.$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