كيفية تسريع اختبار جافا سكريبت

تعرف على كيفية تسريع اختباراتك باستخدام السيلينيوم و WebdriverIO

إذا كنت مهتمًا بالاختبارات التلقائية ، فمن المحتمل أن يكون لديك تطبيق متزايد أو فريق هندسي متنام وتحتاج إلى طريقة موثوقة لاختبار طلبك.

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

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

لمحة سريعة

البرنامج الذي يستخدمه فريقنا هو Selenium Webdriver و NodeJS و WebdriverIO.

السيلينيوم هي تقنية تعمل على أتمتة المتصفحات وتسمح لنا بإنشاء اختبارات قائمة على المتصفح.

WebdriverIO هو إطار اختبار يستخدم NodeJS لتوفير واجهة برمجة تطبيقات شاملة لكتابة الاختبارات الآلية.

فيما يلي عدة مؤشرات مفيدة قام فريق الواجهة الأمامية الخاص بنا بتنفيذها لجعل اختبارات واجهة المستخدم الآلية الخاصة بنا أداة أكثر فعالية ضد الانحدار.

تعطيل لقطات الشاشة

أول شيء هو التحقق من ملف التكوين webdriverIO الخاص بك. في مشروعنا ، لاحظنا أنه بعد كل وظيفة "it" ، سوف يقوم webdriverIO بالتقاط لقطة شاشة. يحتوي مجلد مخرجات الاختبار لدينا على حوالي 10-30 لقطة شاشة اعتمادًا على عدد الإجراءات في كل اختبار.

يعد هذا أمرًا رائعًا عند تصحيح أخطاء الاختبار ، ولكن المشكلة هي أن التقاط لقطات الشاشة يمكن أن يؤدي إلى إبطاء اختباراتك. وجدنا أنه من خلال تعطيل لقطات الشاشة ، تم تقليل وقت تشغيل الاختبار بنسبة 40٪. إعداد إضافي يمكن أن يساعد في تقليل الوقت وحجم الملف هو أنه يمكنك تعيين حجم منفذ العرض لتشغيل الاختبار الخاص بك. يسمح لك هذا باختبار حجم الشاشة الذي تحتاجه فقط.

// browser.saveScreenshot

خطأ في التسجيل

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

مستوى لفظ التسجيل: صامت مطول | القيادة | البيانات | النتيجة | خطأ

تعيين مثيلات متعددة

سيسمح لك تعيين مثيلات متعددة بإجراء جلستين أو أكثر من جلسات المتصفح التي تجري اختباراتك. بدلاً من تشغيلها واحدًا تلو الآخر ، يمكنك تشغيل الاختبارات في نفس الوقت مما يؤدي إلى تقصير مدة الاختبار الإجمالية. من المهم ملاحظة أنه يجب تشغيل كل اختبار على حدة ، مما يعني أنه لا يعتمد على اختبار سابق لإعداد أو هدم البيانات.

ماكس المواد: 3 ،
قدرات: [{
    browserName: 'chrome' ،
}]

ملفات التكوين المختلفة

يمكنك تحقيق أقصى استفادة من النقاط أعلاه عن طريق إنشاء تكوينات مختلفة لبيئات مختلفة. على سبيل المثال: يحتوي فريقنا على تهيئة webdriverio محلية لا تأخذ أي لقطات شاشة أو تسجيل رسائل خطأ.

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

webdriverio.local.conf.js
webdriverio.ci.conf.js
webdriverio.test.conf.js

منظمة جناح الاختبار

في مجلد الاختبار الخاص بنا ، يوجد مجلدان فرعيان يحتويان على جميع اختباراتنا. يعمل فريقنا على تشغيل حالتين من المستعرضات بحيث يعرف Webdriver تشغيل كل مجلد من المجلدات الفرعية بشكل متوازٍ. من المهم مراقبة وقت اختبار كل مجلد حتى يكتمل في فترة مماثلة من الوقت وتعظيم المثيلات.

تجنب Browser.pause ()

يمكن أن يتسبب Browser.pause في نتائج الاختبار غير المستقرة ويجب عدم الاعتماد عليه في انتظار مكالمات واجهة برمجة التطبيقات والصفحات التي يتم تحميلها والإجراءات ، حيث يمكن إكمالها بمقادير مختلفة من الوقت في كل تشغيل تجريبي.

بدلاً من ذلك ، يوفر WebdriverIO انتظارًا كبيرًا لواجهة برمجة التطبيقات. أنت قادر على انتظار ظهور العناصر ، أو يمكنك كتابة وظيفتك المخصصة التي تنتظر أن يكون الشرط صحيحًا قبل الانتقال إلى الخطوة التالية في الاختبار.

browser.waitUntil (الشرط ، المهلة ، timeoutMsg ، الفاصل الزمني)

طرق مساعد قابلة لإعادة الاستخدام

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

كروم مقطوعة الرأس

تم دمج الوضع مقطوع الرأس من Google في Chrome في الإصدار 60. كما سيقلل Headless Chrome من وقت الاختبار إلى حد كبير لأنه يدير اختباراتك بدون واجهة مستخدم. لا تزال قادرًا على التقاط لقطات الشاشة ومعرفة كيف يبدو تطبيقك في وضع مقطوع الرأس ، فلا تقلق ، فلا يزال بإمكانك التصحيح بفعالية. إذا قمت بالتبديل إلى تشغيل اختبارات WebdriverIO في Chrome بدون رأس ، فتأكد من التحقق من جميع الاختبارات الحالية. واجه فريقنا بعض المشاكل مع تنزيل الملفات.

browserName: 'chrome' ،
    'goog: chromeOptions': {
        الحجج: ['- مقطوعة الرأس' ، '-disable-gpu']
    }

قام فريقنا بالانتقال من Casper.js إلى WebdriverIO قبل عدة سنوات واستمتعنا بالمرونة التي وفرها WebdriverIO. نحن باستمرار جعل التكوين لدينا أكثر كفاءة. تتم كتابة اختبارات واجهة المستخدم التلقائية لمنع الانحدار وهي خط الدفاع النهائي قبل قيام الكود الجديد بإجراءها على المستخدمين.

نأمل أن تكون قادراً على جلب بعض هذه الاستراتيجيات لمشروعك وتحقيق تجربة أسرع.

كلما أسرعنا في الفشل ، أسرعنا في الإصلاح!