ความหมายของ Cucumber ไฟล์คุณสมบัติและคำจำกัดความขั้นตอน? (ตัวอย่าง)

⚡ สรุปอย่างชาญฉลาด

Cucumber ไฟล์ฟีเจอร์จะอธิบายพฤติกรรมด้วยภาษา Gherkin ที่เข้าใจง่าย ในขณะที่ไฟล์นิยามขั้นตอนจะเก็บโค้ดที่รันแต่ละบรรทัด ทุกๆ Cucumber โปรเจกต์นี้ต้องการทั้งสองอย่าง โดยจัดเก็บไว้ในโครงสร้างโฟลเดอร์คงที่ภายใต้ไดเร็กทอรี features

  • 🔘 ไฟล์สองไฟล์: ไฟล์ฟีเจอร์ระบุว่าควรเกิดอะไรขึ้น ส่วนไฟล์นิยามขั้นตอนระบุว่าระบบอัตโนมัติจะทำให้สิ่งนั้นเกิดขึ้นได้อย่างไร
  • ☑️ คำสำคัญ: แตงกวาดอง องค์ประกอบหลักอย่าง "คุณลักษณะ" "สถานการณ์" "กำหนดให้" "เมื่อไร" และ "จากนั้น" ช่วยให้สถานการณ์มีโครงสร้างและรูปแบบที่อ่านง่าย
  • ไม่ต้องใส่เครื่องหมายโคลอนในขั้นตอนต่างๆ: Feature และ Scenario ต้องใช้เครื่องหมายโคลอน แต่ Given, When และ Then ต้องใช้เครื่องหมายโคลอน มิเช่นนั้นขั้นตอนนั้นจะถูกละเลย
  • 🧪 ชุดข้อมูล: โครงร่างสถานการณ์พร้อมตารางตัวอย่างจะจำลองสถานการณ์หนึ่งกับข้อมูลป้อนเข้าหลายแถว
  • 🛠️ การตั้งค่าแบบใช้ร่วมกัน: พื้นหลังยกซ้ำขั้นตอนที่กำหนดไว้ในทุกสถานการณ์ในฟีเจอร์
  • 📊 จับคู่: Cucumber ระบบจะไม่สนใจคำหลักเมื่อทำการจับคู่ ดังนั้นข้อความในสองขั้นตอนอาจไม่มีทางเหมือนกันเลย

Cucumber ไฟล์คุณลักษณะและคำจำกัดความขั้นตอน อธิบายพร้อมตัวอย่าง

สำหรับทุกโปรเจ็กต์ Cucumber จะมีไดเร็กทอรีเดียวอยู่ที่รากของโปรเจ็กต์ชื่อว่า “features” นี่คือที่เก็บฟีเจอร์ทั้งหมดของ Cucumber นอกจากนี้ ในไดเร็กทอรีนี้ คุณจะพบไดเร็กทอรีเพิ่มเติมอีกสองไดเร็กทอรี ได้แก่ step_definition และ support

รูปแบบนั้นมีความสำคัญ เพราะว่า Cucumber ระบบจะค้นหาไฟล์ของคุณโดยใช้หลักการตามธรรมเนียมปฏิบัติ แทนที่จะใช้การตั้งค่า ไฟล์ฟีเจอร์ที่อยู่นอกไดเร็กทอรีฟีเจอร์จะไม่ถูกอ่านเลย

“ไฟล์ฟีเจอร์” คืออะไร?

ไฟล์คุณสมบัติประกอบด้วยคำอธิบายระดับสูงของ สถานการณ์ทดสอบ พูดง่ายๆ ก็คือ มันเป็นที่รู้จักกันในชื่อว่า แตงเล็ก ๆ หนึ่งมีสีเหลืองGherkin เป็นภาษาข้อความภาษาอังกฤษแบบง่ายๆ

Cucumber ไฟล์ฟีเจอร์ประกอบด้วยส่วนประกอบต่อไปนี้ —

  • คุณสมบัติ (Feature): คุณลักษณะจะอธิบายสคริปต์ทดสอบปัจจุบันที่ต้องดำเนินการ
  • สถานการณ์: สถานการณ์จำลองจะอธิบายขั้นตอนและผลลัพธ์ที่คาดหวังสำหรับกรณีการทดสอบเฉพาะ
  • โครงร่างสถานการณ์: สถานการณ์เดียวกันสามารถดำเนินการได้สำหรับชุดข้อมูลหลายชุดโดยใช้โครงร่างสถานการณ์ ข้อมูลจัดทำโดยโครงสร้างตารางคั่นด้วย (II)
  • ให้: ระบุบริบทของข้อความที่จะดำเนินการ โดยใช้ตารางข้อมูล "Given" ขั้นตอนก็สามารถกำหนดพารามิเตอร์ได้
  • เมื่อ“เมื่อใด” ระบุการกระทำในการทดสอบที่ต้องดำเนินการ
  • แล้วก็ผลลัพธ์ที่คาดหวังจากการทดสอบสามารถแสดงได้ด้วยคำว่า “จากนั้น”

ไฟล์หนึ่งไฟล์จะบรรจุคุณลักษณะหนึ่งอย่าง สถานการณ์จำลองด้านล่างเป็นตัวอย่างที่เป็นรูปธรรมที่แสดงให้เห็นถึงคุณลักษณะนั้น และแต่ละสถานการณ์จำลองจะดำเนินไปตามรูปแบบเดียวกัน คือ อธิบายบริบทเริ่มต้น อธิบายเหตุการณ์ และอธิบายผลลัพธ์ที่คาดหวัง

ต่อไปเราจะมาเรียนรู้วิธีการเขียน Feature File กัน Cucumber พร้อมตัวอย่าง

ตัวอย่างไฟล์คุณสมบัติตัวอย่าง:

ตัวอย่างต้นฉบับที่เผยแพร่พร้อมกับบทช่วยสอนนี้ ได้ถูกนำมาแสดงไว้ด้านล่างโดยไม่มีการแก้ไขใดๆ

Feature: Visit career guide page in career.guru99.com
Scenario: Visit career.guru99.com
Given: I am on career.guru99.com
When: I click on career guide menu
Then: I should see career guide page

⚠️ แก้ไข: ตัวอย่างข้างต้นจะวางเครื่องหมายโคลอนไว้หลัง ให้, เมื่อ และ แล้วก็. Gherkin ใส่เครื่องหมายโคลอนต่อท้าย คุณสมบัติ (Feature) และ สถานการณ์ เฉพาะคำหลักที่เป็นขั้นตอนที่ตามด้วยเครื่องหมายโคลอนเท่านั้นที่ไม่ถือเป็นขั้นตอน ดังนั้น Cucumber ระบบจะละเว้นบรรทัดนั้นโดยไม่แจ้งให้ทราบ ไฟล์ที่แก้ไขแล้วจะมีเนื้อหาดังนี้

Feature: Visit career guide page in career.guru99.com

  Scenario: Visit career.guru99.com
    Given I am on career.guru99.com
    When I click on career guide menu
    Then I should see career guide page

โปรแกรมแยกวิเคราะห์ไม่จำเป็นต้องเว้นวรรค แต่การเว้นวรรคสองช่องต่อระดับเป็นรูปแบบที่นิยมใช้ และทำให้การวิเคราะห์คุณลักษณะที่ยาวทำได้ง่ายขึ้นมาก ภาพเคลื่อนไหวด้านล่างแสดงการทำงานของไฟล์คุณลักษณะ และแต่ละขั้นตอนจะเปลี่ยนเป็นสีเขียวเมื่อผ่านไปแล้ว

ภาพเคลื่อนไหวของ Cucumber ไฟล์ฟีเจอร์ที่ทำงานโดยรายงานแต่ละขั้นตอนของ Gherkin ตามลำดับ

“คำจำกัดความขั้นตอน” คืออะไร?

ข้อกำหนดขั้นตอนจะแมปขั้นตอนกรณีทดสอบในไฟล์คุณลักษณะ (แนะนำโดย Give/When/Then) กับโค้ด ซึ่งดำเนินการตามขั้นตอนใน Application Under Test และตรวจสอบผลลัพธ์เทียบกับผลลัพธ์ที่คาดหวัง สำหรับคำจำกัดความขั้นตอนที่จะดำเนินการ จะต้องตรงกับองค์ประกอบที่กำหนดในคุณลักษณะ คำจำกัดความของขั้นตอนถูกกำหนดไว้ในไฟล์ Ruby ภายใต้ “features/step_definitions/*_steps.rb”

การจับคู่จะพิจารณาจากเนื้อหาของขั้นตอนเพียงอย่างเดียว Cucumber ระบบจะไม่นำคำหลักมาพิจารณาเมื่อค้นหาคำจำกัดความ ซึ่งเป็นเหตุผลว่าทำไมขั้นตอนสองขั้นตอนในชุดเดียวกันจึงอาจไม่มีข้อความที่เหมือนกันทุกประการ แม้ว่าขั้นตอนหนึ่งจะเป็น Given และอีกขั้นตอนหนึ่งเป็น Then ก็ตาม

ตัวอย่างการกำหนดขั้นตอน: ในที่นี้เราจะใช้ด้านบน Cucumber ตัวอย่างไฟล์ฟีเจอร์สำหรับการเรียกดูเว็บไซต์ career.guru99.com เราจะใช้ฟีเจอร์ต่างๆ เช่น “When, Then, Given” ดังแสดงในภาพด้านล่าง Cucumber ตัวอย่างไฟล์คุณสมบัติ

Step 1:

Given (/^ I am on career.guru99.com$/) do

Browser.goto "http://career.guru99.com" -This will visit career.guru99 on browser

end

Step 2:
When (/^ click on career guide menu$/) do

Browser.text (:name, " career guide" ).click – This will click "career guide menu"

end

Step 3:

Then (/^ I should see career guide page$/) do

Browser.goto "http://career.guru99.com/category/career-guide/" - It will visit "career guide page"

end

⚠️ หมายเหตุเกี่ยวกับภาษา: คำจำกัดความข้างต้นเป็นภาษา Ruby ซึ่งเป็นที่มาของคำนี้ Cucumber เริ่มต้นแล้ว และนั่นคือเหตุผลที่ตั้งชื่อโฟลเดอร์ว่าอย่างนั้น step_definitions และไฟล์จะลงท้ายด้วย _steps.rbไฟล์คุณลักษณะเดียวกันนี้ยังใช้กำหนดขั้นตอนต่างๆ ที่เขียนไว้ในไฟล์อื่นด้วย Java, Javaสคริปต์ Python หรือ C# โดยไม่ต้องเปลี่ยนแปลง Gherkin แม้แต่นิดเดียว Cucumber-ใน JVM นิพจน์ปกติจะถูกย้ายเข้าไปอยู่ในคำอธิบายประกอบของเมธอด:

@Given("I am on career.guru99.com")
public void i_am_on_the_career_page() {
    driver.get("http://career.guru99.com");
}

ไม่ว่าคุณจะเลือกใช้ภาษาใดก็ตาม รายละเอียดการใช้งานควรอยู่ในคำจำกัดความของขั้นตอนเท่านั้น (คี)ping ตัวเลือก (selectors) และการเรียกใช้ HTTP จากไฟล์ฟีเจอร์ (feature file) คือสิ่งที่ช่วยให้ผู้ที่ไม่ใช่โปรแกรมเมอร์สามารถอ่านสถานการณ์จำลองได้ เป็นครั้งแรก Cucumber ต้นฉบับ คำแนะนำนี้จะสร้างการจับคู่ดังกล่าวตั้งแต่ต้นจนจบ

โครงร่างสถานการณ์และตัวอย่างในไฟล์ฟีเจอร์

การคัดลอกสถานการณ์สามครั้งเพื่อเปลี่ยนค่าเพียงค่าเดียว เป็นสาเหตุที่พบบ่อยที่สุดที่ทำให้ไฟล์ฟีเจอร์อ่านไม่ออก โครงร่างสถานการณ์ แทนที่สำเนาด้วยเทมเพลต และ ตัวอย่าง ตารางแสดงค่าต่างๆ

พารามิเตอร์จะเขียนอยู่ภายในวงเล็บเหลี่ยม และต้องตรงกับหัวข้อคอลัมน์ในตารางด้านล่าง Cucumber ระบบจะแทนที่ค่าก่อนที่จะค้นหาคำจำกัดความขั้นตอนที่ตรงกัน ดังนั้นคำจำกัดความเหล่านั้นจึงไม่จำเป็นต้องมีการจัดการพิเศษใดๆ

Scenario Outline: Search the career guide
  Given I am on career.guru99.com
  When I search for "<keyword>"
  Then I should see the <section> section

  Examples:
    | keyword   | section       |
    | interview | Interview Tips|
    | resume    | Resume Guide  |

มีประเด็นสำคัญบางประการที่ควรจดจำเมื่อใช้โครงร่าง:

  • โครงร่างจะทำงานหนึ่งครั้งต่อแถวข้อมูล แถวแรกเป็นส่วนหัวและจะไม่ถูกประมวลผล
  • โครงร่างสถานการณ์จะต้องมีส่วนตัวอย่างอย่างน้อยหนึ่งส่วน มิฉะนั้นจะไม่มีอะไรทำงานเลย
  • ท่อของตารางไม่จำเป็นต้องเรียงตรงกัน แต่การจัดเรียงให้ตรงกันจะช่วยให้ไฟล์อ่านง่ายขึ้น
  • ควรทำให้ตารางมีขนาดเล็ก ตารางที่มีสามสิบแถวมักเป็นสัญญาณว่าข้อมูลนั้นควรอยู่ในรูปแบบที่เล็กกว่า การทดสอบที่ขับเคลื่อนด้วยข้อมูล แทน.

ภูมิหลัง, และ, แต่ และคำหลักอื่นๆ ของแตงกวาดอง

นอกเหนือจากส่วนประกอบทั้งหกที่กล่าวถึงไปก่อนหน้านี้แล้ว Gherkin ยังมีคำสำคัญอีกจำนวนหนึ่งที่ช่วยให้ไฟล์ฟีเจอร์ที่มีความยาวอ่านง่ายขึ้น

  • พื้นหลัง — กลุ่มขั้นตอนที่กำหนดไว้ล่วงหน้าซึ่งจะทำงานก่อนสถานการณ์จำลองทุกสถานการณ์ในฟีเจอร์นี้ ช่วยลดการเขียนเงื่อนไขเบื้องต้นซ้ำๆ ไว้ตอนต้นของแต่ละสถานการณ์จำลอง
  • และ และ แต่ — คำที่ใช้แทน Given, When หรือ Then ที่ซ้ำกัน อ่านง่ายกว่าและใช้งานได้เหมือนกัน Cucumber ตรงกับข้อความในขั้นตอนทั้งสองแบบ
  • กฎ — กลุ่มเสริมpingซึ่งเพิ่มเข้ามาใน Gherkin 6 โดยรวบรวมสถานการณ์ต่างๆ ที่แสดงให้เห็นถึงกฎทางธุรกิจข้อหนึ่ง
  • สตริงเอกสาร — ข้อความที่ล้อมรอบด้วยเครื่องหมายอัญประกาศคู่สามตัว ซึ่งส่งเป็นอาร์กิวเมนต์เดียวให้กับคำจำกัดความของขั้นตอนเมื่อบรรทัดเดียวไม่เพียงพอ
  • ตารางข้อมูล — แถวที่คั่นด้วยเครื่องหมายไปป์ (|) ที่เชื่อมต่อกับขั้นตอนเดียว ใช้สำหรับส่งรายการค่าไปยังขั้นตอนนั้น
  • แท็ก — ป้ายกำกับที่ขึ้นต้นด้วยเครื่องหมาย @ ซึ่งวางอยู่เหนือ Feature หรือ Scenario เพื่อให้สามารถเลือกชุดย่อยได้ในระหว่างการทำงาน
  • ความคิดเห็น — บรรทัดที่ขึ้นต้นด้วยเครื่องหมาย # อนุญาตให้ใส่ความคิดเห็นได้เฉพาะที่ต้นบรรทัดเท่านั้น และ Gherkin ไม่มีฟังก์ชันแสดงความคิดเห็นแบบบล็อก

เมื่อนำส่วนประกอบต่างๆ มาประกอบกัน ไฟล์ฟีเจอร์ที่มีการตั้งค่าร่วมกันจะมีลักษณะดังนี้:

Feature: Career guide navigation

  Background:
    Given I am on career.guru99.com

  Scenario: Open the career guide menu
    Given I am signed in
    And my profile is complete
    When I click on career guide menu
    Then I should see career guide page
    But I should not see the admin panel

ข้อผิดพลาดทั่วไปในไฟล์ฟีเจอร์และวิธีแก้ไข

ส่วนมาก Cucumber ปัญหาที่ผู้เริ่มต้นรายงานไม่ใช่ความผิดพลาดของเฟรมเวิร์ก แต่เป็นการละเมิดกฎของ Gherkin เล็กน้อยซึ่งทำให้เกิดปัญหาเงียบๆ

ผิดพลาด จะเกิดอะไรขึ้น แก้ไขปัญหา
เครื่องหมายโคลอนหลัง Given, When หรือ Then บรรทัดนี้ไม่ได้ถูกนับว่าเป็นขั้นตอนและจะถูกข้ามไป ใช้เครื่องหมายโคลอนหลัง Feature และ Scenario เท่านั้น
สองขั้นตอนที่มีข้อความเหมือนกันทุกประการ Cucumber ถือว่าเป็นรายการซ้ำเนื่องจากไม่สนใจคำหลัก แก้ไขขั้นตอนหนึ่งเพื่อให้ทั้งสองประโยคอ่านแตกต่างกัน
ไฟล์ฟีเจอร์ที่อยู่นอกไดเร็กทอรีฟีเจอร์ ไม่พบไฟล์และไม่มีการทดสอบใดๆ เกิดขึ้น เก็บทุกอย่างไว้ .feature ไฟล์อยู่ในโฟลเดอร์ features
สิบห้าขั้นตอนในสถานการณ์เดียว สถานการณ์ดังกล่าวหยุดทำงานเนื่องจากเอกสารประกอบ ตั้งเป้าหมายไว้ที่ 3-5 ขั้นตอน และใส่รายละเอียดลงไปในคำจำกัดความของแต่ละขั้นตอน
จากนั้นจึงตรวจสอบความถูกต้องของแถวในฐานข้อมูล การทดสอบผ่าน แต่พฤติกรรมที่ผู้ใช้มองเห็นนั้นผิดปกติ ตรวจสอบผลลัพธ์ที่สังเกตได้ เช่น หน้าเว็บหรือการตอบสนอง
โครงร่างสถานการณ์โดยไม่มีตารางตัวอย่าง เทมเพลตไม่เคยทำงาน เพิ่มส่วนตัวอย่างโดยตรงไว้ด้านล่างโครงร่าง

การแก้ไขปัญหาเหล่านี้ก่อนที่ชุดโปรแกรมจะขยายใหญ่ขึ้นนั้นประหยัดกว่าการแก้ไขในภายหลังมาก เพราะทุกสถานการณ์ที่เขียนขึ้นในระหว่างนั้นจะคัดลอกรูปแบบเดียวกัน เมื่อไฟล์ฟีเจอร์ทำงานได้อย่างถูกต้อง ขั้นตอนต่อไปคือการเชื่อมต่อโปรเจ็กต์เข้าด้วยกัน — ดูที่นี่ Cucumber การติดตั้ง คำแนะนำและรายละเอียดเพิ่มเติม การทดสอบอัตโนมัติ ชุด.

คำถามที่พบบ่อย

ไม่ ไฟล์ .feature สามารถประกาศ Feature ได้เพียงหนึ่งเดียวเท่านั้น แม้ว่าจะสามารถบรรจุ Scenario ได้มากเท่าที่คุณต้องการ หากคุณต้องการ Feature ที่สอง ให้สร้างไฟล์ใหม่ — ข้อจำกัดนี้เองที่ทำให้โฟลเดอร์ยังคงใช้งานง่ายเมื่อชุดโปรแกรมมีขนาดใหญ่ขึ้น

ไม่ใช่อย่างนั้น Gherkin มีการแปลเป็นภาษาต่างๆ มากกว่าเจ็ดสิบภาษา การเพิ่มส่วนหัวภาษาในบรรทัดแรกของไฟล์จะสลับคำหลัก ดังนั้นทีมจึงสามารถเขียนสถานการณ์จำลองในภาษาเดียวกับที่ผู้เชี่ยวชาญในสาขาของตนใช้พูดได้

ไฟล์นี้รวบรวมทุกอย่างที่ไม่ใช่คำจำกัดความของขั้นตอน: การตั้งค่าสภาพแวดล้อม การกำหนดค่าเบราว์เซอร์ ฮุกที่ทำงานก่อนหรือหลังสถานการณ์จำลอง และโค้ดตัวช่วยที่ใช้ร่วมกัน (คี)ping มันแยกไฟล์คำจำกัดความขั้นตอนหยุดออกจากการกลายเป็นไฟล์ดัมมี่ping พื้น.

Cucumber ระบบจะรายงานขั้นตอนดังกล่าวว่าไม่สามารถระบุได้ แทนที่จะเป็นล้มเหลว และพิมพ์โค้ดตัวอย่างที่แนะนำซึ่งคุณสามารถคัดลอกไปวางในไฟล์คำจำกัดความขั้นตอนได้ สถานการณ์จำลองจะถูกทำเครื่องหมายว่าไม่ผ่าน ดังนั้นขั้นตอนที่ไม่สามารถระบุได้จึงไม่ถูกนับว่าสำเร็จโดยอัตโนมัติ

การติดแท็กไว้เหนือ Feature หรือ Scenario จะช่วยให้ Runer สามารถเลือกชุดย่อยได้ในระหว่างการทำงาน โดยไม่ขึ้นอยู่กับโครงสร้างโฟลเดอร์ โดยทั่วไปแล้ว ทีมงานจะติดแท็กชุด Smoke Set, ชุด Slow Set และชุด Work-in-Progress Set จากนั้นจึงรันเฉพาะสิ่งที่จำเป็นสำหรับขั้นตอน Pipeline นั้นๆ

โมเดลภาษาขนาดใหญ่สามารถร่าง Gherkin จากเกณฑ์การยอมรับได้เป็นอย่างดี และสร้างโครงร่างคำจำกัดความที่ตรงกันได้เร็วยิ่งขึ้น Revตรวจสอบผลลัพธ์สำหรับข้อความขั้นตอนที่ซ้ำกันและสำหรับสถานการณ์ที่รายละเอียดการใช้งานรั่วไหล ซึ่งเป็นจุดที่ Gherkin ที่สร้างขึ้นมักจะผิดพลาด

ใช่เลย เมื่อได้รับไฟล์ฟีเจอร์แบบเปิด Copilot จะอนุมานรูปแบบนิพจน์ปกติและลายเซ็นเมธอดสำหรับขั้นตอนที่ยังไม่ได้กำหนด และเติมเนื้อหาจากโค้ดโดยรอบ ให้ถือว่านี่เป็นร่างแรก การยืนยันที่มันเสนอมายังคงต้องการการตรวจสอบจากมนุษย์อยู่

ใช่ และนั่นคือจุดประสงค์ของการออกแบบ คำจำกัดความต่างๆ จะถูกเก็บไว้ในโฟลเดอร์ที่ใช้ร่วมกัน และจะถูกจับคู่ด้วยข้อความ ไม่ใช่ไฟล์ ดังนั้นขั้นตอนการเข้าสู่ระบบที่เขียนเพียงครั้งเดียวจะถูกนำกลับมาใช้ซ้ำโดยทุกฟีเจอร์ที่ต้องการใช้งาน การนำกลับมาใช้ซ้ำนี้เป็นเหตุผลที่ห้ามใช้ข้อความขั้นตอนที่ซ้ำกัน

สรุปโพสต์นี้ด้วย: