ما هي تفاصيل Cucumber ملف الميزة وتعريف الخطوة؟ (مثال)

⚡ ملخص ذكي

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

  • 🔘 ملفان: يحدد ملف الميزات ما يجب أن يحدث؛ ويحدد ملف تعريف الخطوات كيف تقوم الأتمتة بتنفيذ ذلك.
  • ☑️ الكلمات المفتاحية في لغة غيركين: تُعطي العناصر التالية للسيناريو هيكله وشكله القابل للقراءة: الميزة، والسيناريو، والمعطيات، والمتى، ثم.
  • ممنوع استخدام النقطتين الرأسيتين على الدرجات: تأخذ كل من Feature و Scenario نقطتين رأسيتين، ولكن يجب ألا تأخذ Given و When و Then نقطتين رأسيتين، وإلا سيتم تجاهل الخطوة.
  • 🧪 مجموعات البيانات: مخطط السيناريو بالإضافة إلى جدول الأمثلة يعيد تشغيل سيناريو واحد مقابل العديد من صفوف الإدخال.
  • 🛠️ إعداد مشترك: تُكرر عمليات رفع الخلفية خطوات معينة خارج كل سيناريو في الميزة.
  • 📊 مطابقة: 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

لا يشترط المحلل استخدام المسافات البادئة، ولكن استخدام مسافتين لكل مستوى هو الأسلوب المتعارف عليه، مما يُسهّل قراءة النصوص الطويلة. يُظهر الرسم المتحرك أدناه تشغيل ملف بيانات، حيث يتحول لون كل خطوة إلى الأخضر أثناء تنفيذها.

رسوم متحركة لـ Cucumber يتم تشغيل ملف الميزات مع كل خطوة من خطوات Gherkin، ويتم الإبلاغ عنها بدورها.

ما هو "تعريف الخطوة"؟

يقوم تعريف الخطوة بتعيين خطوات حالة الاختبار في ملفات الميزات (المقدمة بواسطة 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 التركيب جولة تعريفية وأوسع نطاقاً اختبار الأتمتة سلسلة.

الأسئلة الشائعة

لا. يمكن لملف .feature أن يُعرّف ميزة واحدة فقط، مع أنه يُمكن أن يحتوي على عدد غير محدود من السيناريوهات. إذا احتجتَ إلى ميزة ثانية، فأنشئ ملفًا ثانيًا - هذا القيد هو ما يُحافظ على سهولة تصفح المجلد مع نمو مجموعة البرامج.

لا، ليس كذلك. لغة Gherkin مُترجمة إلى أكثر من سبعين لغة منطوقة. إضافة عنوان اللغة في السطر الأول من الملف يُبدّل الكلمات المفتاحية، بحيث يُمكن للفريق كتابة السيناريوهات بنفس اللغة التي يتحدث بها خبراء المجال.

يحتوي على كل ما ليس تعريفًا للخطوة: إعداد البيئة، وتكوين المتصفح، والخطافات التي تعمل قبل أو بعد السيناريو، وشفرة المساعدة المشتركة.ping يمنع هذا الفصل ملفات تعريف الخطوات من التحول إلى ملف تافهping أرض.

Cucumber يُبلغ النظام عن الخطوة على أنها غير مُعرّفة بدلاً من كونها فاشلة، ويعرض مقتطفًا برمجيًا مُقترحًا يمكنك لصقه في ملف تعريف الخطوة. يتم تمييز السيناريو على أنه غير ناجح، لذا فإن الخطوة غير المُعرّفة لا تُحتسب أبدًا كخطوة ناجحة.

تتيح علامة تُوضع أعلى ميزة أو سيناريو للمُشغِّل اختيار مجموعة فرعية أثناء التنفيذ، بغض النظر عن بنية المجلد. عادةً ما تقوم الفرق بوضع علامات على مجموعة اختبارية أولية، ومجموعة اختبارية بطيئة، ومجموعة اختبارية قيد التنفيذ، ثم تشغيل ما تحتاجه مرحلة معينة من مراحل خط الأنابيب فقط.

تقوم نماذج اللغة الكبيرة بصياغة Gherkin من معيار القبول بشكل جيد، وتولد الهياكل العظمية للتعريفات المطابقة بشكل أسرع. Revقم بمعاينة المخرجات لنص الخطوة المكرر وللسيناريوهات التي تكشف تفاصيل التنفيذ، حيث عادة ما يحدث خطأ في Gherkin المُنشأ.

جدًا. عند إدخال ملف ميزات مفتوح، يستنتج Copilot التعبير النمطي وتوقيع الدالة لخطوة غير محددة، ويكمل محتوى الخطوة من الكود المحيط. اعتبره مسودة أولية؛ فالتأكيدات التي يقترحها لا تزال بحاجة إلى مراجعة بشرية.

نعم، وهذا هو الهدف من التصميم. تُخزَّن التعريفات في مجلد مشترك، ويتم مطابقتها نصيًا لا ملفيًا، لذا فإن خطوة تسجيل الدخول المكتوبة مرة واحدة يُعاد استخدامها في كل ميزة تحتاجها. إعادة الاستخدام هي سبب منع تكرار نص الخطوة.

تلخيص هذه التدوينة بـ: