ما هي تفاصيل Cucumber ملف الميزة وتعريف الخطوة؟ (مثال)
⚡ ملخص ذكي
Cucumber تصف ملفات الميزات السلوك بلغة غيركين البسيطة، بينما تحتوي تعريفات الخطوات على التعليمات البرمجية التي تُشغّل كل سطر. كل Cucumber يحتاج المشروع إلى كليهما، ويتم تخزينهما في تخطيط مجلد ثابت أسفل دليل الميزات.

لكل مشروع Cucumber، يوجد مجلد رئيسي واحد باسم "features". يحتوي هذا المجلد على جميع ميزات Cucumber. ستجد داخله مجلدات فرعية أخرى، مثل مجلد "step_definition" ومجلد "support".
هذا التصميم مهم، لأنه Cucumber يكتشف النظام ملفاتك وفقًا للاتفاقية وليس وفقًا للإعدادات. ببساطة، لا تتم قراءة أي ملف ميزة موجود خارج دليل الميزات.
ما هو "ملف الميزة"؟
يحتوي ملف الميزات على وصف عالي المستوى لـ سيناريو الاختبار ببساطة، يُعرف باسم الجيركين خيار صغير. جيركين هي لغة نصية إنجليزية بسيطة.
Cucumber يتكون ملف الميزات من المكونات التالية —
- الميزات: ستصف الميزة البرنامج النصي للاختبار الحالي الذي يجب تنفيذه.
- سيناريو: يصف السيناريو الخطوات والنتائج المتوقعة لحالة اختبار معينة.
- مخطط السيناريو: يمكن تنفيذ نفس السيناريو لمجموعات متعددة من البيانات باستخدام مخطط السيناريو. يتم توفير البيانات من خلال بنية جدولية مفصولة بـ (II).
- معطى: يحدد سياق النص المراد تنفيذه. باستخدام جداول البيانات "المعطى"، يمكن أيضًا تحديد معلمات الخطوة.
- متى: يحدد "متى" إجراء الاختبار الذي يجب تنفيذه.
- ثميمكن تمثيل النتيجة المتوقعة للاختبار بـ "ثم".
يحتوي كل ملف على ميزة واحدة. السيناريوهات أدناه هي أمثلة ملموسة توضح الميزة، ويتبع كل سيناريو نفس النمط: وصف سياق البداية، وصف حدث، وصف النتيجة المتوقعة.
بعد ذلك، سوف نتعلم كيفية كتابة ملف الميزة في 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 يتجاهل السطر بصمت. يُقرأ الملف المصحح كما يلي.
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) إلى التعليمات البرمجية. وهو الذي ينفذ الخطوات الخاصة بالتطبيق قيد الاختبار ويتحقق من النتائج مقابل النتائج المتوقعة. لكي يتم تنفيذ تعريف الخطوة، يجب أن يتطابق مع المكون المحدد في الميزة. يتم تعريف تعريف الخطوة في ملفات روبي ضمن "features/step_definitions/*_steps.rb".
يتم التطابق بناءً على نص الخطوة فقط. Cucumber لا يأخذ الكلمة الرئيسية في الاعتبار عند البحث عن تعريف، ولهذا السبب قد لا تحمل خطوتان في نفس المجموعة نصًا متطابقًا حتى لو كانت إحداهما عبارة عن معطى والأخرى عبارة عن ثم.
مثال لتعريف الخطوة: هنا سوف نستخدم أعلاه Cucumber مثال على ملف الميزات لتصفح موقع career.guru99.com. سنستخدم ميزات مثل "عندما، ثم، معطى" كما هو موضح أدناه. 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
⚠️ ملاحظة حول اللغات: التعريفات المذكورة أعلاه خاصة بلغة روبي، وهي اللغة التي 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 إنّ استخدام المحددات واستدعاءات HTTP من ملف الميزات هو ما يسمح لغير المبرمجين بقراءة السيناريو. أول 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، والتي تجمع السيناريوهات التي توضح قاعدة عمل واحدة.
- سلاسل المستندات — كتلة نصية محاطة بثلاث علامات اقتباس مزدوجة، يتم تمريرها إلى تعريف الخطوة كوسيط واحد عندما لا يكون سطر واحد كافيًا.
- جداول البيانات — صفوف مفصولة بعلامة الأنبوب (pipe) مرتبطة بخطوة واحدة، وتستخدم لتسليم قائمة من القيم إلى تلك الخطوة.
- مصطلحات البحث — تسميات تبدأ بعلامة @، توضع فوق ميزة أو سيناريو بحيث يمكن تحديد مجموعة فرعية في وقت التشغيل.
- التعليقات — سطر يبدأ بعلامة #. التعليقات مسموحة فقط في بداية السطر، ولا يدعم 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". | لم يتم التعرف على السطر كخطوة، وتم تخطيه. | استخدم النقطتين الرأسيتين بعد كلمتي "الميزة" و"السيناريو" فقط. |
| خطوتان بنص متطابق | Cucumber يعاملها على أنها نسخ مكررة لأن الكلمة المفتاحية يتم تجاهلها | أعد صياغة إحدى الخطوات بحيث تصبح النتيجتان مختلفتين. |
| ملف الميزات خارج دليل الميزات | لم يتم اكتشاف الملف مطلقًا ولم يتم إجراء أي اختبارات. | احتفظ بكل شيء .feature الملف موجود ضمن مجلد الميزات |
| خمس عشرة خطوة في سيناريو واحد | يتوقف السيناريو عن العمل كوثيقة | استهدف ثلاث إلى خمس خطوات، وأضف التفاصيل إلى تعريف كل خطوة. |
| ثم يؤكد على صف قاعدة البيانات | ينجح الاختبار رغم تعطل السلوك الظاهر للمستخدم | تحقق من المخرجات القابلة للملاحظة مثل الصفحة أو الاستجابة |
| مخطط سيناريو بدون جدول أمثلة | لا يتم تنفيذ القالب أبداً | أضف قسمًا للأمثلة أسفل المخطط مباشرةً |
يُعدّ إصلاح هذه المشكلات قبل توسع المجموعة أرخص بكثير من إصلاحها لاحقًا، لأن كل سيناريو يُكتب في هذه الأثناء ينسخ نفس الشكل. بمجرد أن تعمل ملفات الميزات بشكل صحيح، تكون الخطوة التالية هي ربط المشروع - انظر إلى Cucumber التركيب جولة تعريفية وأوسع نطاقاً اختبار الأتمتة سلسلة.

