خبرة في أتمتة اختبار الانحدار البصري في Java + Selenium Webdriver + aShot

مرحبا

في هذه المقالة ، أود أن أتحدث عن تجربتي في أتمتة اختبار الانحدار البصري.

مقدمة


قررت القيام بأتمتة الاختبار البصري بعد أن اكتشفت خطأً صغيراً في التصميم. غيّر المشروع تصميم صفحة واحدة ، والتغييرات لمست الصفحات غير المهمة.

بعد أن قررت أن التحقق يدويًا من ظهور صفحات الموقع لم يكن خيارًا ، بدأت التشغيل الآلي.

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

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

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

عن المشروع


VisualRegressionBoilerplate هو مشروع بسيط نسبيا مع بنية محددة.

شيء مثل قالب / مشروع متداول لعمليات الاختبار التلقائي المرئية.

المشروع مخصص للمواقع / المشاريع الصغيرة. بالنسبة لأولئك الذين يحتاجون إلى حل بسيط ، دون أطر معقدة.

الاحتمالات


  • مقارنة لقطات من صفحات الموقع. يمكنك تحديد عنصر واحد أو أكثر من العناصر التي تم تجاهلها.
  • مقارنة لقطات من عناصر الموقع.
  • يمكن تشغيل الاختبارات مع شاشات عرض مختلفة: المحمول - 360 بكسل ، الكمبيوتر اللوحي - 768 بكسل ، سطح المكتب - 1920 بكسل
  • بشكل افتراضي ، يتوفر مستعرضان - Chrome وفايرفوكس + نفس المتصفحات في الوضع مقطوعة الرأس .
  • منشئ التقرير - يتم إنشاء لقطات شاشة 4 لكل اختبار - الحالي ، المتوقع ، الفرق ، gif. إذا لم تكن هناك لقطات شاشة متوقعة ، سيتم حفظ لقطات الشاشة الفعلية كما هو متوقع.



التقنيات المستخدمة


  • جافا
  • TestNG
  • مخضرم
  • السيلينيوم webdriver
  • aShot - مكتبة لمقارنة الصور

كيف تبدأ العمل مع المشروع


  1. تثبيت جافا ، مخضرم ، المتصفحات.
  2. في مُنشئ فئة DriverWrapper ، يمكنك إضافة أو إزالة المتصفحات إذا لزم الأمر
  3. يخزن الفصل TestConfig جميع إعدادات المشروع - المستعرض ، حجم نافذة المتصفح الافتراضي ، إلخ. هنا يمكنك إضافة أو تغيير الإعدادات.
  4. في فئة BasePage ، قم بتعيين عنوان الموقع الذي تم اختباره. يمكنك تعيين عنوان مختلف لبيئات مختلفة (dev ، stage ، prod). BasePage وبقية الفئات في وحدة التطبيق هي مثال على نمط كائن الصفحة . استخدامه اختياري.
  5. فحص فئة اختبار TestExample وإنشاء فئات الاختبار الخاصة بك كمثال.
  6. أضف فئات اختبار جديدة إلى testng.xml
  7. تشغيل الاختبارات مع المعلمات اللازمة من خلال مخضرم
  8. تحقق التقرير في مجلد التقرير

في مشروع README ، يتم وصف كل شيء بمزيد من التفصيل.

كيف تكتب الاختبارات


بشكل عام ، كما تريد. لا توجد قيود. يمكنك استخدام نمط كائن الصفحة أو أي شيء آخر.

كل ما تحتاجه هو استخدام الوظائف التالية لمقارنة لقطات الشاشة:

للصفحات:

مقارنة لقطات شاشة الصفحة:

comparePageScreenshots("index_page"); 

مقارنة لقطات الشاشة مع تجاهل عنصر واحد:

 comparePageScreenshots("index_page_ignored_element", IndexPage.MACKBOOK_BLOCK); 

مقارنة لقطات الشاشة مع تجاهل العديد من العناصر:

  comparePageScreenshots("index_page_ignored_element", new String[]{"section.panel.features.dark", "div.macbook"}); 

مقارنة لقطات من عنصر الصفحة - يمكن البحث عن العنصر بواسطة css locator

 compareElementScreenshots("index_page_element", IndexPage.FORGE_BLOCK); 

أو يمكنك تمرير كائن من فئة WebElement

 compareElementScreenshots("index_page_element", driver.findElement(By.cssSelector("a.full.forge"))); 

المشاكل المحتملة


  • قد تفشل الاختبارات بسبب المحتوى الديناميكي على الصفحة. يتم حل المشكلة عن طريق تجاهل العناصر ذات المحتوى الديناميكي.
  • قد تفشل الاختبارات بسبب اختلاف البكسل. يمكنك إصلاح هذا عن طريق تحرير الإعداد - TestConfig.allowableDiffSize .
  • في بعض الأحيان ، لا تملك جميع الصور أو بعض العناصر الموجودة على الموقع وقتًا للتحميل. لإصلاح ذلك ، كتبت الدالة preparPageForScreenshot () والتي ، باستخدام جافا سكريبت ، يتم تمرير الصفحة لأعلى ولأسفل. ولكن هذا لا يساعد دائما.

ملخص


في الوقت الحالي ، يحتوي المشروع على حوالي 50 اختبارًا - صفحات وعناصر صفحة مختلفة.
من خلال عمليات الاختبار النصية لل bash يتم إطلاق الموقع ويتم اختباره على الفور في ثلاثة ملحقات (المحمول ، الكمبيوتر اللوحي ، سطح المكتب).

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

أي تغييرات على تخطيط مرئية على الفور.

رابط إلى مستودع المشروع - VisualRegressionBoilerplate

Source: https://habr.com/ru/post/ar461553/


All Articles