SpeedTrap รายงานการทดสอบ PHPUnit ที่ทำงานช้าในคอนโซล
มีหลายปัจจัยที่ส่งผลต่อเวลาดำเนินการทดสอบ การทดสอบที่ไม่ได้รับการแยกอย่างเหมาะสมจากเวลาแฝงที่แปรผัน (ฐานข้อมูล เครือข่าย ฯลฯ) และแม้กระทั่งโหลดพื้นฐานบนเครื่องทดสอบ จะทำให้เวลาในการดำเนินการทดสอบมีความผันผวน
SpeedTrap ช่วย ระบุการทดสอบที่ช้า แต่ไม่สามารถอธิบายได้ ว่าทำไม การทดสอบเหล่านั้นจึงช้า พิจารณาใช้ Blackfire.io เพื่อสร้างโปรไฟล์ชุดทดสอบเพื่อระบุโค้ดที่ช้าโดยเฉพาะ
SpeedTrap ได้รับการติดตั้งโดยใช้ Composer เพิ่มเป็นการพึ่งพา require-dev
:
composer require --dev johnkary/phpunit-speedtrap
เปิดใช้งานด้วยค่าเริ่มต้นทั้งหมดโดยเพิ่มโค้ดต่อไปนี้ลงในไฟล์ phpunit.xml
ของโปรเจ็กต์ของคุณ:
<phpunit bootstrap="ผู้ขาย/autoload.php"> - <ส่วนขยาย> <คลาสส่วนขยาย = "JohnKaryPHPUnitExtensionSpeedTrap" /> </ส่วนขยาย> </phpunit>
ตอนนี้รันชุดทดสอบ หากการดำเนินการทดสอบอย่างน้อยหนึ่งรายการเกินเกณฑ์ความช้า (500ms โดยค่าเริ่มต้น) SpeedTrap จะรายงานการทดสอบเหล่านั้นในคอนโซลหลังจากการทดสอบทั้งหมดเสร็จสิ้น
SpeedTrap ยังรองรับพารามิเตอร์เหล่านี้:
slowThreshold - จำนวนมิลลิวินาทีเมื่อการทดสอบถือว่า "ช้า" (ค่าเริ่มต้น: 500ms)
reportLength - จำนวนการทดสอบที่ช้ารวมอยู่ในรายงาน (ค่าเริ่มต้น: การทดสอบ 10 รายการ)
แต่ละพารามิเตอร์ถูกตั้งค่าใน phpunit.xml
:
<phpunit bootstrap="vendor/autoload.php"><!-- ... การกำหนดค่าชุดอื่น ๆ ที่นี่ ... --><extensions> <คลาสส่วนขยาย = "JohnKaryPHPUnitExtensionSpeedTrap"> <ข้อโต้แย้ง> <อาร์เรย์> <องค์ประกอบคีย์ = "slowThreshold"> <จำนวนเต็ม>500</จำนวนเต็ม> </องค์ประกอบ> <องค์ประกอบคีย์="reportLength"> <จำนวนเต็ม>10</จำนวนเต็ม> </องค์ประกอบ> </อาร์เรย์> </ข้อโต้แย้ง> </ ส่วนขยาย> </ส่วนขยาย> </phpunit>
บางโปรเจ็กต์มีการทดสอบที่ซับซ้อนซึ่งใช้เวลานานในการรัน คุณสามารถกำหนดเกณฑ์ความช้าที่แตกต่างกันสำหรับกรณีทดสอบแต่ละรายการได้
คำอธิบายประกอบ @slowThreshold
สามารถกำหนดเกณฑ์ความช้าที่กำหนดเองสำหรับกรณีทดสอบแต่ละกรณีได้ จำนวนนี้อาจสูงหรือต่ำกว่าเกณฑ์เริ่มต้น และใช้แทนเกณฑ์เริ่มต้นสำหรับการทดสอบเฉพาะนั้น
คลาส SomeTestCase ขยาย PHPUnitFrameworkTestCase {/** * @slowThreshold 5000 */ฟังก์ชันสาธารณะ testLongRunningProcess() {// รหัสที่ใช้เวลานานในการดำเนินการ} -
การตั้งค่า @slowThreshold 0
จะไม่รายงานว่าการทดสอบนั้นช้า
โปรไฟล์ SpeedTrap สำหรับการทดสอบช้าเมื่อเปิดใช้งานใน phpunit.xml แต่การใช้ตัวแปรสภาพแวดล้อมชื่อ PHPUNIT_SPEEDTRAP
สามารถเปิดหรือปิดใช้งานส่วนขยายได้:
$ PHPUNIT_SPEEDTRAP="disabled" ./vendor/bin/phpunit
Travis CI ได้รับความนิยมในการรันการทดสอบบนคลาวด์หลังจากพุชโค้ดใหม่ไปยังที่เก็บ
ขั้นตอนที่ 1) เปิดใช้งาน SpeedTrap ใน phpunit.xml แต่ตั้งค่า PHPUNIT_SPEEDTRAP="disabled"
เพื่อปิดการใช้งานโปรไฟล์เมื่อรันการทดสอบ
<phpunit bootstrap="ผู้ขาย/autoload.php"> - <php> <env name="PHPUNIT_SPEEDTRAP" value="ปิดการใช้งาน" /> </php> <ส่วนขยาย> <คลาสส่วนขยาย = "JohnKaryPHPUnitExtensionSpeedTrap" /> </ส่วนขยาย> </phpunit>
ขั้นตอนที่ 2) กำหนดค่า .travis.yml
ด้วย PHPUNIT_SPEEDTRAP="enabled"
เพื่อสร้างโปรไฟล์สำหรับการทดสอบที่ช้าเมื่อทำงานบน Travis CI:
ภาษา: phpphp: - 7.3env: - PHPUNIT_SPEEDTRAP = "เปิดใช้งาน"
ขั้นตอนที่ 3) ดูเอาต์พุตบิวด์ Travis CI และอ่านรายงานความล่าช้าที่พิมพ์ในคอนโซล
เอกสาร Travis CI - ตัวแปรสภาพแวดล้อม
ขั้นตอนที่ 1) เปิดใช้งาน SpeedTrap ใน phpunit.xml รายงานความช้าจะแสดงผลระหว่างการดำเนินการชุดทดสอบทั้งหมด
<phpunit bootstrap="ผู้ขาย/autoload.php"> - <ส่วนขยาย> <คลาสส่วนขยาย = "JohnKaryPHPUnitExtensionSpeedTrap" /> </ส่วนขยาย> </phpunit>
ขั้นตอนที่ 2) กำหนดค่า .travis.yml
ด้วย PHPUNIT_SPEEDTRAP="disabled"
เพื่อปิดการสร้างโปรไฟล์เมื่อทำงานบน Travis CI:
ภาษา: phpphp: - 7.3env: - PHPUNIT_SPEEDTRAP = "ปิดการใช้งาน"
ขั้นตอนที่ 3) ดูเอาต์พุตบิวด์ Travis CI และยืนยันว่าไม่มีการพิมพ์รายงานความล่าช้าในคอนโซล
มีประโยชน์เมื่อคุณต้องการโปรไฟล์การทดสอบที่ช้าเป็นครั้งคราวเท่านั้น
ขั้นตอนที่ 1) ตั้งค่า phpunit.xml เพื่อเปิดใช้งาน SpeedTrap แต่ปิดการใช้งานโปรไฟล์ความช้าโดยการตั้งค่า PHPUNIT_SPEEDTRAP="disabled"
ดังนี้:
<phpunit bootstrap="ผู้ขาย/autoload.php"> - <php> <env name="PHPUNIT_SPEEDTRAP" value="ปิดการใช้งาน" /> </php> <ส่วนขยาย> <คลาสส่วนขยาย = "JohnKaryPHPUnitExtensionSpeedTrap" /> </ส่วนขยาย> </phpunit>
ขั้นตอนที่ 2) เมื่อดำเนินการ phpunit
จากบรรทัดคำสั่ง ให้เปิดใช้งานการสร้างโปรไฟล์ความช้าสำหรับการรันนี้เท่านั้น โดยส่งตัวแปรสภาพแวดล้อม PHPUNIT_SPEEDTRAP="enabled"
ดังนี้:
$ PHPUNIT_SPEEDTRAP=เปิดใช้งาน ./vendor/bin/phpunit
Symfony Framework มาพร้อมกับแพ็คเกจ symfony/phpunit-bridge ที่ติดตั้ง PHPUnit เวอร์ชันของตัวเอง และ ละเว้น สิ่งที่กำหนดไว้ในไฟล์ composer.json หรือ composer.lock ของโปรเจ็กต์ของคุณ ดูเวอร์ชัน PHPUnit ที่ติดตั้งด้วยคำสั่ง ls vendor/bin/.phpunit/
symfony/phpunit-bridge อนุญาตให้ตัวแปรสภาพแวดล้อม SYMFONY_PHPUNIT_REQUIRE
กำหนดการขึ้นต่อกันเพิ่มเติมขณะติดตั้ง phpunit
วิธีที่ง่ายที่สุดในการตั้งค่าตัวแปรสภาพแวดล้อมสำหรับสคริปต์ simple-phpunit
คือผ่าน phpunit.xml.dist:
<phpunit bootstrap="ผู้ขาย/autoload.php"> <php> <env name="SYMFONY_PHPUNIT_REQUIRE" value="johnkary/phpunit-speedtrap:^4"/> <ชื่อ env="SYMFONY_PHPUNIT_VERSION" value="9"/> </php> <ส่วนขยาย> <คลาสส่วนขยาย = "JohnKaryPHPUnitExtensionSpeedTrap" /> </ส่วนขยาย> </phpunit>
จากตัวอย่างข้างต้น ตอนนี้การรัน vendor/bin/simple-phpunit
จะติดตั้ง PHPUnit 9 ล่าสุด และต้องการ phpunit-speedtrap v4 ล่าสุด
ทำตามขั้นตอนเหล่านี้เพื่อเพิ่มคุณสมบัติใหม่หรือพัฒนาส้อมของคุณเอง:
# Get source code (or replace with your fork URL) $ git checkout https://github.com/johnkary/phpunit-speedtrap.git phpunit-speedtrap # Install dev dependencies $ cd phpunit-speedtrap $ composer install # Run test suite to verify code runs as expected $ vendor/bin/phpunit
SpeedTrap ได้รับแรงบันดาลใจจากตัวเลือก --profile
ของ RSpec ที่แสดงความคิดเห็นเกี่ยวกับการทดสอบที่ช้า
phpunit-speedtrap มีอยู่ภายใต้ใบอนุญาต MIT