การทดสอบเว็บไซต์ Drupal ของคุณง่ายขึ้นด้วย Behat (บทช่วยสอนที่ครอบคลุม)

เผยแพร่แล้ว: 2020-09-08

Tyrion Lannister ราชาแห่งความเฉลียวฉลาดและปัญญากล่าวว่า “ไม่มีสิ่งใดในโลกที่ทรงพลังไปกว่าเรื่องราวดีๆ

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

behat 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 นี่จะแสดงให้คุณเห็นขั้นตอนที่ไม่ได้กำหนดในสถานการณ์สมมติเนื่องจากสถานการณ์ต้องแมปกับฟังก์ชัน

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 "