أصبح اختبار موقع Drupal الخاص بك أسهل مع Behat (برنامج تعليمي شامل)
نشرت: 2020-09-08قال ملك الذكاء والحكمة ، تيريون لانيستر: "لا يوجد شيء في العالم أقوى من القصة الجيدة".
تعمل قوة القصص والتواصل الجيد على تمكين تقديم البرامج بشكل تعاوني وفعال. تتطور تقنيات التطوير المدفوع بالسلوك (BDD) بعيدًا عن المنهجيات الرشيقة ، وتستفيد من هذه القوة على أكمل وجه لأتمتة عملية الاختبار. Behat هي إحدى تقنيات BDD التي تتيح الاختبار الآلي باستخدام "لغة في كل مكان". دعنا نتعلم المزيد عن Behat و Mink و Gherkin وكيفية تنفيذها في Drupal.

ما هو Behat؟
Behat هو إطار عمل PHP مفتوح المصدر يُستخدم لأتمتة الاختبار من خلال الاستفادة من التطوير المستند إلى السلوك (BDD). يضمن نهج BDD تقديم برامج عالية الجودة من خلال التركيز على التواصل المستمر والقصص النصية البسيطة. باستخدام BDD ، يبني المختبر حالات اختبار بلغة يمكن للبشر قراءتها. لهذا السبب ، من السهل جعل الفريق بأكمله على نفس الصفحة حيث يمكن للجميع ، من مالك المنتج إلى المطور ، فهم السيناريو الحالي والحصول عليه بشكل مستمر.
ما هو غيركين؟
اللغة المستخدمة بواسطة أداة Behat هي Gherkin ، وهي لغة أعمال قابلة للقراءة وذات مجال محدد. يعمل Gherkin أيضًا كوثائق حية ويمكن إنشاء تقارير لتوثيق كل اختبار تشغيل. تستخدم هذه اللغة البسيطة القائمة على المسافة البيضاء كلمات لغة بسيطة ككلمات رئيسية. تحدد المسافات البادئة (باستخدام مسافة / علامة تبويب) ونهايات الأسطر بنية حالة الاختبار. على الرغم من سهولة الكتابة وفهم اللغة ، يجب أن تركز النتيجة النهائية على تمكين تعاون وكفاءة وأتمتة وتتبع أفضل. يجب كتابة حالات الاختبار بشكل حدسي ، والتركيز على العناصر المهمة ، وتجنب التحقق من السجلات المكررة واستخدام القواعد النحوية الجيدة.
ما هو المنك؟
Mink هي أداة تحكم في المتصفح مفتوحة المصدر تحاكي سيناريو الاختبار مع تطبيق الويب. بمجرد كتابة حالات الاختبار ، يجب تنفيذها ومحاكاة إجراءات المستخدم. باستخدام Mink ، يمكنك استخدام نفس سيناريو الاختبار وتشغيله على مختلف برامج محاكاة المتصفح مثل Goutte و Selenium و Chrome و Zombie والمزيد. أثناء تثبيت امتداد Behat Drupal ، سترى اعتمادًا على Mink ، لذا تأكد من تثبيته أيضًا.
تركيب وتنفيذ Behat في دروبال
الطريقة الرسمية لتثبيت Behat في مشروع Drupal الخاص بك هي من خلال Composer. لا يمكنه تثبيت Behat من أجلك فحسب ، بل يمكنه أيضًا تحديثك بسهولة إلى أحدث إصدار لاحقًا عند ظهوره.
• داخل مجلد المشروع ، قم بتشغيل الأمر:
يتطلب الملحن $ behat / behat
• أو داخل ملف composer.json الخاص بك ، قم بإضافة العبارة المطلوبة
"يتطلب": {
"behat / behat": "^ 3.0.0"،
“phpunit / phpunit”: “^ 5.0.0”
}
• بعد ذلك ، قم بتشغيل أمر composer install في المحطة.
• عند الانتهاء من ذلك ، ستلاحظ أيضًا مجلدًا جديدًا bin / به ملف Behat. هذا هو ملف Behat القابل للتنفيذ وستستخدمه لإجراء اختباراتك والحصول على معلومات تصحيح الأخطاء.
• بعد ذلك ، قم بإنشاء ملف باسم behat.yml داخل المجلد الجذر للمشروع. عند تشغيل Behat ، فإنه يبحث عن ملف behat.yml ، والذي يستخدمه لتكوينه.
إفتراضي:
الأجنحة:
إفتراضي:
السياقات:
- Drupal \ DrupalExtension \ Context \ DrupalContext
ملحقات:
بهات \ مينك إمتداد:
goutte: ~
base_url: http://example.org/ # استبدل عنوان URL الخاص بموقعك
دروبال \ دروبال إكستيشن:
الصندوق الأسود: ~لتهيئة المشروع ، قم بتشغيل الأمر:
البائع / بن / behat –init
يؤدي هذا إلى إنشاء ميزات / مجلد وملف سياق افتراضي bootstrap / FeatureContext.php داخل الميزات / المجلد.
كتابة القصص وإجراء الاختبارات مع Behat
هدفنا هو وصف القصص بأكثر الطرق فعالية. تمت كتابة القصص بلغة غيركين مع الامتداد. ميزة تحت الميزات / الدليل.
دعنا نتخيل أنك بحاجة إلى اختبار ما إذا كان يمكنك إضافة محتوى إلى نوع محتوى الصفحة الأساسي في موقعك بنجاح أم لا. للقيام بذلك ، يجب أن يكون لديك حق الوصول إلى الصفحة لملء الحقول وحفظها كمسؤول.
لذلك ، دعونا نكتب قصتنا الأولى:
الميزة: تحقق من الصفحة الأساسية CT من أجل إنشاء صفحة كمسؤول أريد الوصول إلى / عقدة / إضافة / صفحة حتى أتمكن من إنشاء صفحة السيناريو: الصفحة الأساسية CT نظرًا لأنني قمت بتسجيل الدخول كمستخدم لديه دور "المسؤول" عندما أذهب إلى "/ node / add / page" وأدخل "عنوان الصفحة الأساسي" من أجل "تحرير العنوان 0 القيمة" عندما أضغط على "تحرير-إرسال" ثم يجب أن أرى "الصفحة الأساسية تم إنشاء عنوان الصفحة الأساسي"
يمكن تسمية هذا الملف basic_page.feature . يمكن أن تحتوي كل ميزة على العديد من السيناريوهات التي تصف السلوك المحدد للميزة. سيكون لكل سيناريو أقسام:
• معطى - تفاصيل حالة البداية للنظام
• متى - يتضمن الإجراء الذي يتخذه المستخدم
• ثم - يصف ما يراه المستخدم بعد اتخاذ الإجراء
• و - للمحافظة على الاتصال في السيناريو.
لا يوجد فرق كبير بين ثم ، و ، و لكن . يتم توفير هذه الكلمات لجعل السيناريوهات الخاصة بك طبيعية وسهلة القراءة.

يمكن تشغيل جميع ملفات الميزات بواسطة البائع / bin / behat . إذا كنت تريد تشغيل ملف ميزة معين ، فقم بتشغيل بائع / bin / behat features / basic_page.feature. هناك أيضًا طريقة لتشغيل سيناريو واحد عن طريق إضافة رقم سطر حيث يتم تحديد السيناريو: البائع / bin / behat features / basic_page.feature: 11 .
هناك أوامر مثل vendor / bin / behat -dl والتي توفر لك كل بناء جملة البيان المستخدم في السيناريوهات ويوفر البائع / bin / behat -di البنية جنبًا إلى جنب مع الأمثلة.
كيف تكتب الملفات المميزة
يقوم Behat بتشغيل طلبات curl مقابل عناوين URL على موقع الويب الخاص بك ، مما يجعل عملية الاختبار سريعة جدًا ، ولكنه يجعل Behat أيضًا يفقد القدرة على اختبار الميزات التي تتطلب جافا سكريبت. لذلك ، لاختبار الميزات ، نحتاج فقط إلى إضافة علامةjavascript قبل كل سيناريو يتطلب Javascript ، مثل هذا: الميزة: تحقق من الصفحة الأساسية CT من أجل إنشاء صفحة كمسؤول أريد الوصول إلى / عقدة / إضافة / صفحة حتى أتمكن من إنشاء صفحة تضمين التغريدة السيناريو: الصفحة الأساسية CT نظرًا لأنني قمت بتسجيل الدخول كمستخدم لديه دور "المسؤول" عندما أذهب إلى "/ node / add / page" وأنا أدخل "عنوان الصفحة الأساسي" ل "تحرير-لقب-0-قيمة" وأنا ملء سوغ على الميدان "تحرير الجسم-0-قيمة" مع "محتوى الصفحة الأساسي" عندما أضغط على "تحرير-إرسال" ثم ينبغي أن أرى "الصفحة الأساسية تم إنشاء عنوان الصفحة الأساسي"
لاختبار ذلك ، قم بتشغيل البائع / bin / 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)) {
طرح ExpectationException الجديد ('تعذر العثور على WYSIWYG باستخدام محدد المواقع:'. $ locator، $ this-> getSession ())؛
}
$ 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 " بـ" محتوى الصفحة الأساسي ".
