ความหมายของ Cucumber ไฟล์คุณสมบัติและคำจำกัดความขั้นตอน? (ตัวอย่าง)
⚡ สรุปอย่างชาญฉลาด
Cucumber ไฟล์ฟีเจอร์จะอธิบายพฤติกรรมด้วยภาษา Gherkin ที่เข้าใจง่าย ในขณะที่ไฟล์นิยามขั้นตอนจะเก็บโค้ดที่รันแต่ละบรรทัด ทุกๆ Cucumber โปรเจกต์นี้ต้องการทั้งสองอย่าง โดยจัดเก็บไว้ในโครงสร้างโฟลเดอร์คงที่ภายใต้ไดเร็กทอรี features
สำหรับทุกโปรเจ็กต์ 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
โปรแกรมแยกวิเคราะห์ไม่จำเป็นต้องเว้นวรรค แต่การเว้นวรรคสองช่องต่อระดับเป็นรูปแบบที่นิยมใช้ และทำให้การวิเคราะห์คุณลักษณะที่ยาวทำได้ง่ายขึ้นมาก ภาพเคลื่อนไหวด้านล่างแสดงการทำงานของไฟล์คุณลักษณะ และแต่ละขั้นตอนจะเปลี่ยนเป็นสีเขียวเมื่อผ่านไปแล้ว
“คำจำกัดความขั้นตอน” คืออะไร?
ข้อกำหนดขั้นตอนจะแมปขั้นตอนกรณีทดสอบในไฟล์คุณลักษณะ (แนะนำโดย 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 การติดตั้ง คำแนะนำและรายละเอียดเพิ่มเติม การทดสอบอัตโนมัติ ชุด.

