การทดสอบเว็บไซต์ Drupal ของคุณง่ายขึ้นด้วย Behat (บทช่วยสอนที่ครอบคลุม)
เผยแพร่แล้ว: 2020-09-08Tyrion Lannister ราชาแห่งความเฉลียวฉลาดและปัญญากล่าวว่า “ไม่มีสิ่งใดในโลกที่ทรงพลังไปกว่าเรื่องราวดีๆ
พลังของเรื่องราวและการสื่อสารที่ดีช่วยเพิ่มขีดความสามารถในการส่งมอบซอฟต์แวร์ในการทำงานร่วมกันและมีประสิทธิภาพ เทคโนโลยี Behavior Driven Development (BDD) พัฒนาขึ้นจากวิธีการที่คล่องตัว โดยใช้ประโยชน์จากพลังนี้อย่างเต็มที่เพื่อทำให้กระบวนการทดสอบเป็นไปโดยอัตโนมัติ Behat เป็นหนึ่งในเทคโนโลยี BDD ที่ช่วยให้การทดสอบอัตโนมัติโดยใช้ "ภาษาที่แพร่หลาย" มาเรียนรู้เพิ่มเติมเกี่ยวกับ Behat, Mink, Gherkin และวิธีใช้งานใน Drupal

Behat คืออะไร?
Behat เป็นเฟรมเวิร์ก PHP แบบโอเพ่นซอร์สที่ใช้ในการทดสอบอัตโนมัติโดยใช้ประโยชน์จาก Behavior Driven Development (BDD) แนวทาง BDD ช่วยให้มั่นใจถึงการส่งมอบซอฟต์แวร์ที่มีคุณภาพโดยเน้นที่การสื่อสารอย่างต่อเนื่องและเรื่องราวข้อความง่ายๆ ด้วย BDD ผู้ทดสอบจะสร้างกรณีทดสอบในภาษาที่มนุษย์อ่านได้ ด้วยเหตุนี้ จึงเป็นเรื่องง่ายที่จะทำให้ทั้งทีมมีความเข้าใจตรงกัน เนื่องจากทุกคนตั้งแต่เจ้าของผลิตภัณฑ์ไปจนถึงนักพัฒนา สามารถเข้าใจและรับคำติชมอย่างต่อเนื่องเกี่ยวกับสถานการณ์ปัจจุบัน
แตงคืออะไร?
ภาษาที่ใช้โดยเครื่องมือ Behat คือ Gherkin ซึ่งเป็นภาษาธุรกิจที่อ่านได้และเฉพาะโดเมน Gherkin ยังทำหน้าที่เป็นเอกสารที่มีชีวิตและสามารถสร้างรายงานเพื่อจัดทำเอกสารการทดสอบแต่ละครั้ง ภาษาที่ใช้ช่องว่างอย่างง่ายนี้ใช้คำภาษาง่ายๆ เป็นคำหลัก การเยื้อง (โดยใช้ช่องว่าง/แท็บ) และส่วนท้ายบรรทัดกำหนดโครงสร้างสำหรับกรณีทดสอบ แม้ว่าการเขียนและการทำความเข้าใจภาษาจะเป็นเรื่องง่าย แต่ผลลัพธ์ที่ได้ควรเน้นที่การทำงานร่วมกันที่ดีขึ้น ประสิทธิภาพ ระบบอัตโนมัติ และการตรวจสอบย้อนกลับ กรณีทดสอบควรเขียนอย่างสังหรณ์ใจ เน้นองค์ประกอบที่สำคัญ หลีกเลี่ยงการตรวจสอบบันทึกที่ซ้ำกัน และใช้ไวยากรณ์ที่ดี
มิงค์คืออะไร?
Mink เป็นตัวควบคุมเบราว์เซอร์โอเพ่นซอร์สที่จำลองสถานการณ์การทดสอบด้วยเว็บแอปพลิเคชัน เมื่อเขียนกรณีทดสอบแล้ว จะต้องดำเนินการและจำลองการดำเนินการของผู้ใช้ ด้วย Mink คุณสามารถใช้สถานการณ์ทดสอบเดียวกันและรันบนอีมูเลเตอร์เบราว์เซอร์ต่างๆ เช่น Goutte, Selenium, Chrome, Zombie และอื่นๆ ขณะติดตั้งส่วนขยาย Behat Drupal คุณจะเห็นการพึ่งพา Mink ดังนั้นตรวจสอบให้แน่ใจว่าคุณได้ติดตั้งไว้ด้วย
การติดตั้งและใช้งาน Behat ใน Drupal
วิธีอย่างเป็นทางการในการติดตั้ง Behat ในโครงการ Drupal ของคุณคือผ่าน Composer ไม่เพียงแต่จะสามารถติดตั้ง Behat ให้คุณได้ แต่ยังอัปเดตคุณเป็นเวอร์ชันล่าสุดได้ง่ายๆ ในภายหลังเมื่อมีเวอร์ชันใหม่ออกมา
• ภายในโฟลเดอร์โครงการ ให้รันคำสั่ง:
นักแต่งเพลง $ ต้องการ behat/behat
• หรือภายในไฟล์ composer.json ของคุณ ให้เพิ่มคำสั่ง require
"จำเป็นต้อง": {
"behat/behat": "^3.0.0",
“phpunit/phpunit”: “^5.0.0”
}
• ถัดไป ให้รันคำสั่ง composer install ในเทอร์มินัล
• เมื่อเสร็จแล้ว คุณจะสังเกตเห็นไดเร็กทอรี bin ใหม่ / โดยมีไฟล์ Behat อยู่ในนั้น นี่คือไฟล์สั่งการของ Behat และคุณจะใช้เพื่อเรียกใช้การทดสอบและรับข้อมูลการดีบัก
• ถัดไป สร้างไฟล์ชื่อ behat.yml ภายในโฟลเดอร์รูทของโปรเจ็กต์ เมื่อ Behat ทำงาน มันจะค้นหาไฟล์ behat.yml ซึ่งใช้สำหรับการกำหนดค่า
ค่าเริ่มต้น:
ห้องสวีท:
ค่าเริ่มต้น:
บริบท:
- Drupal\DrupalExtension\Context\DrupalContext
นามสกุล:
Behat\Minkส่วนขยาย:
เกาต์: ~
base_url: http://example.org/ # แทนที่ด้วย URL ของเว็บไซต์ของคุณ
ส่วนขยาย Drupal\Drupal:
แบล็คบ็อกซ์: ~ในการเริ่มต้นโครงการ ให้รันคำสั่ง:
ผู้ขาย/bin/behat –init
สิ่งนี้จะสร้าง คุณสมบัติ / โฟลเดอร์และไฟล์บริบทเริ่มต้น bootstrap/FeatureContext.php ภายในโฟลเดอร์ คุณสมบัติ /
การเขียนเรื่องและการทดสอบการทำงานกับ Behat
เป้าหมายของเราคือการอธิบายเรื่องราวอย่างมีประสิทธิภาพสูงสุด เรื่องราวต่างๆ เขียนด้วยภาษาที่มนุษย์อ่านได้คือ Gherkin โดยมีนามสกุล . คุณสมบัติ ภายใต้ คุณสมบัติ / ไดเรกทอรี
ลองนึกภาพว่าคุณต้องทดสอบว่าคุณสามารถเพิ่มเนื้อหาลงในประเภทเนื้อหาหน้าพื้นฐานในไซต์ของคุณได้สำเร็จหรือไม่ คุณต้องมีสิทธิ์เข้าถึงหน้าเพื่อกรอกข้อมูลในฟิลด์และบันทึกเป็นผู้ดูแลระบบ
เรามาเขียนเรื่องแรกของเรากัน:
คุณสมบัติ: ตรวจสอบหน้าพื้นฐาน CT เพื่อสร้างเพจ ในฐานะผู้ดูแลระบบ ฉันต้องการเข้าถึง /node/add/page เพื่อจะได้สร้างเพจ สถานการณ์จำลอง: หน้าพื้นฐาน CT เนื่องจากฉันเข้าสู่ระบบในฐานะผู้ใช้ที่มีบทบาท "ผู้ดูแลระบบ" เมื่อฉันไปที่ "/node/add/page" และฉันป้อน "ชื่อหน้าพื้นฐาน" สำหรับ "edit-title-0-value" เมื่อกด "แก้ไข-ส่ง" จากนั้นฉันควรเห็น "สร้างชื่อหน้าพื้นฐานแล้ว"
ไฟล์นี้สามารถตั้งชื่อ basic_page.feature คุณลักษณะแต่ละอย่างสามารถมีได้หลายสถานการณ์ ซึ่งอธิบายลักษณะการทำงานเฉพาะของสถานที่นั้น แต่ละสถานการณ์จะมีส่วน:
• ให้ - รายละเอียดสถานะเริ่มต้นของระบบ
• เมื่อ - รวมการดำเนินการที่ผู้ใช้ทำ
• จากนั้น - อธิบายสิ่งที่ผู้ใช้เห็นหลังจากดำเนินการ
• และ - เพื่อรักษาการเชื่อมต่อในสถานการณ์
มีความแตกต่างไม่มากระหว่าง Then And And But . คำเหล่านี้จัดทำขึ้นเพื่อให้สถานการณ์ของคุณเป็นธรรมชาติและอ่านง่าย

ไฟล์คุณลักษณะทั้งหมดสามารถเรียกใช้โดย vendor/bin/behat หากคุณต้องการเรียกใช้ไฟล์คุณลักษณะเฉพาะ ให้เรียกใช้ vendor/bin/behat features/basic_page.feature นอกจากนี้ยังมีวิธีเรียกใช้สถานการณ์จำลองเดียวโดยเพิ่มหมายเลขบรรทัดที่กำหนดสถานการณ์สมมติ: vendor/bin/behat features/basic_page.feature:11
มีคำสั่งต่างๆ เช่น vendor/bin/behat -dl ซึ่งให้ไวยากรณ์คำสั่งทั้งหมดที่ใช้ในสถานการณ์ และ vendor/bin/behat -di จัดเตรียมไวยากรณ์พร้อมกับตัวอย่าง
วิธีเขียนไฟล์คุณสมบัติ
Behat เรียกใช้คำขอ curl กับ URL บนเว็บไซต์ของคุณ ซึ่งทำให้กระบวนการทดสอบค่อนข้างเร็ว แต่ยังทำให้ Behat สูญเสียความสามารถในการทดสอบคุณลักษณะที่ต้องใช้ Javascript ดังนั้น เพื่อทดสอบคุณสมบัติ เราเพียงแค่เพิ่มแท็ก @javascript ก่อนทุกสถานการณ์ที่ต้องใช้ Javascript ดังนี้: คุณสมบัติ: ตรวจสอบหน้าพื้นฐาน CT เพื่อสร้างเพจ ในฐานะผู้ดูแลระบบ ฉันต้องการเข้าถึง /node/add/page เพื่อจะได้สร้างเพจ @api @javascript สถานการณ์จำลอง: หน้าพื้นฐาน CT เนื่องจาก ฉันเข้าสู่ระบบในฐานะผู้ใช้ที่มีบทบาท "ผู้ดูแลระบบ" เมื่อ ฉันไปที่ "/node/add/page" และ ฉันป้อน "ชื่อหน้าพื้นฐาน" สำหรับ "edit-title-0-value" และ ฉันกรอก wysiwyg ในฟิลด์ "edit-body-0-value" ด้วย "เนื้อหาหน้าพื้นฐาน" เมื่อ กด "แก้ไข-ส่ง" จากนั้น ฉันควรเห็น "สร้างชื่อหน้าพื้นฐานแล้ว"
เพื่อทดสอบสิ่งนี้ เรียกใช้ vendor/bin/behat นี่จะแสดงให้คุณเห็นขั้นตอนที่ไม่ได้กำหนดในสถานการณ์สมมติเนื่องจากสถานการณ์ต้องแมปกับฟังก์ชัน

คุณสามารถคัดลอกและวางข้อมูลโค้ดไปยังไฟล์บริบท FeatureContext.php หรือเรียกใช้ vendor/bin/behat --dry-run --append-snippets
จากนั้นคุณสามารถเขียนคำจำกัดความของฟังก์ชันใน FeatureContext.php ดังที่แสดง:
<?php
ใช้ Behat\Mink\Exception\ExpectationException;
ใช้ Drupal\DrupalExtension\Context\RawDrupalContext;
/**
* กำหนดคุณสมบัติของแอปพลิเคชันจากบริบทเฉพาะ
*/
คลาส FeatureContext ขยาย RawDrupalContext {
/**
* บริบทของมิงค์
*
* @var Drupal\DrupalExtension\Context\MinkContext
*/
ป้องกัน $minkContext;
/**
* เริ่มต้นบริบท
*
* ทุกสถานการณ์ได้รับอินสแตนซ์บริบทของตัวเอง
* คุณยังสามารถส่งผ่านอาร์กิวเมนต์ตามอำเภอใจไปยัง
* ตัวสร้างบริบทผ่าน behat.yml
*/
ฟังก์ชั่นสาธารณะ __construct () {
}
/**
* กรอก wysiwyg บนสนาม
*
* @ จากนั้นฉันกรอก wysiwyg ในฟิลด์ :locator ด้วย :value
*/
ฟังก์ชั่นสาธารณะ iFillInWysiwygOnFieldWith ($locator, $value) {
$el = $this->getSession()->getPage()->findField($locator); $el = $สิ่งนี้->getSession()->getPage()->findField($locator);
ถ้า (ว่าง($el)) {
โยนใหม่ ExpectationException('ไม่พบ WYSIWYG พร้อมตัวระบุตำแหน่ง: ' . $locator, $this->getSession());
}
$fieldId = $el->getAttribute('id'); $fieldId = $el->getAttribute('id');
ถ้า (ว่างเปล่า ($fieldId)) {
โยนข้อยกเว้นใหม่ ('ไม่พบรหัสสำหรับฟิลด์ที่มีตัวระบุตำแหน่ง: ' . $locator);
}
$this->getSession()
->executeScript("CKEDITOR.instances[\"$fieldId\"].setData(\"$value\");");
}
}ตอนนี้ รันคำสั่ง vendor/bin/behat และสถานการณ์ที่เขียนทั้งหมดจะต้องผ่าน ฟังก์ชัน JS ที่กำหนดไว้จะจับคู่คำสั่งสถานการณ์สมมติ “ และฉันกรอก wysiwyg on-field "edit-body-0-value" ด้วย "Basic page content "
