จัดเตรียมกรณีทดสอบเซิร์ฟเวอร์ HTTP สำหรับ PHPUnit เซิร์ฟเวอร์นี้ขับเคลื่อนโดยเซิร์ฟเวอร์ในตัวของ PHP สำหรับการทดสอบการโทรที่เกี่ยวข้องกับเครือข่าย
ไลบรารีนี้ต้องการ PHP 7.3 หรือใหม่กว่า รวมถึง PHP 8.0, 8,1 และ 8.2 มันจะทำงานด้วย PHPUnit เวอร์ชัน 8 และ 9
composer require giberti/phpunit-local-server
GibertiPHPUnitLocalServerLocalServerTestCase
ราวกับว่าคุณกำลังขยาย PHPUnitFrameworkTestCase
php
อื่นได้โดยการแทนที่คุณสมบัติ $phpBinary
แบบคงที่ในคลาส เรียกเมธอดตัวช่วย 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 หลายเวอร์ชัน ในตัวอย่างด้านล่าง เซิร์ฟเวอร์จะเริ่มต้นด้วยไฟล์ปฏิบัติการ PHP 7.3 และ 8.1 ใน /usr/local/bin/
บนระบบทดสอบโฮสต์ เส้นทางของคุณอาจแตกต่างกัน
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