مع هذه المقالة ، نواصل سلسلة من المنشورات حول كيفية أتمتة عملية الاختبار اليدوي (المشار إليها فيما يلي باسم الاختبارات الذاتية) لنظام معلومات كبير (يشار إليه فيما يلي باسم الأنظمة) في أحد مشاريع LANIT الرئيسية وما جاء منها.
كيفية تنظيم هرمي الطبقة بكفاءة؟ كيفية توزيع الحزم على شجرة المشروع؟ كيف تتأكد من نسيان دمج النزاعات مع فريق من 10 أشخاص؟ هذه القضايا هي دائما في بداية تطور جديد وليس لديهم الوقت الكافي.
مصدرفي هذه المقالة ، وصفنا هيكل الطبقات وتنظيم الكود ، مما سمح لنا بالتطور مع القليل من الجهد أكثر من واحد ونصف ألف من اختبارات واجهة المستخدم نهاية - نهاية 2 بناء على Junit و Selenium لنظام كبير من الأهمية الفيدرالية. علاوة على ذلك ، نحن ندعمها ونحسن باستمرار السيناريوهات الحالية.
هنا يمكنك العثور على وصف عملي لبنية التسلسل الهرمي للفئات الأساسية للاختبارات التلقائية ، وتفاصيل المشروع وفقًا لحزم جافا النموذجية الوظيفية ، وقوالب نماذج للفئات الحقيقية.
ستكون المقالة مفيدة لجميع المطورين الذين يطورون اختبارات ذاتية تعتمد على السيلينيوم.
هذا المقال جزء من منشور عام وصفنا فيه كيف بنى فريق صغير عملية أتمتة اختبار واجهة المستخدم وطور إطار عمل يعتمد على Junit و Selenium لهذا الغرض.
الأجزاء السابقة:
تطبيق الطبقة الأساسية لجميع الاختبارات و JUnit RuleChain
يعتمد مفهوم تطوير الاختبارات الذاتية ، كما هو موضح في مقالة سابقة (
الجزء 2. التقنية. العمارة والمكدس الفني. تفاصيل التنفيذ والمفاجآت التقنية ) ، على فكرة إطار عمل يتم فيه توفير مجموعة من وظائف النظام لجميع الاختبارات الذاتية - فهي متكاملة وممكّنة للمطورين التركيز autotests على قضايا محددة من تنفيذ الأعمال من فصول الاختبار.
يتضمن الإطار الكتل الوظيفية التالية:
- القواعد - تهيئة مكونات البنية التحتية للاختبار والانتهاء منها كتهيئة WebDriver وتلقي اختبار فيديو. موصوفة بمزيد من التفاصيل أدناه ؛
- WebDriverHandlers - وظائف المساعد للعمل مع برنامج تشغيل ويب مثل تنفيذ Java Script أو الوصول إلى سجلات المتصفح. نفذت كمجموعة من أساليب الحالة الثابتة الساكنة ؛
- WebElements هي مكتبة تحتوي على عناصر ويب نموذجية أو مجموعاتها ، والتي تحتوي على وظائف الوظيفة المشتركة المطلوبة والسلوك المعتاد. في حالتنا ، تشتمل هذه الوظيفة على فحص محتمل لإكمال العمليات غير المتزامنة على جانب متصفح الويب. تم تطبيقه كملحقات لعناصر الويب من مكتبات Selenium و Selenide.
تهيئة بيئة الاختبار. قواعد
الفئة الأساسية لجميع فئات الاختبار هي BaseTest ، حيث يتم توريث جميع فئات الاختبار. تعرف فئة BaseTest "عداء" Junit للاختبارات و RuleChain المستخدمة ، كما هو موضح أدناه. يتم توفير الوصول من فئات الاختبار المطبقة إلى الوظائف التي توفرها فئات القاعدة من خلال الطرق الثابتة لفئات القواعد.
يتم تقديم نموذج التعليمات البرمجية BaseTest في المربع التالي.
@RunWith(FilterTestRunner.class) public class BaseTest { private TemporaryFolder downloadDirRule = new TemporaryFolder(getSomething().getWorkingDir()); @Rule public RuleChain rules = RuleChain .outerRule(new Timeout(TimeoutEnum.GLOBAL_TEST_TIMEOUT.value(), TimeUnit.SECONDS)) .around(new TestLogger()) .around(new StandStateChecker()) .around(new WaitForAngularCreator()) .around(downloadDirRule) .around(new DownloaderCreator(downloadDirRule)) .around(new EnvironmentSaver()) .around(new SessionVideoHandler()) .around(new DriverCreator(downloadDirRule)) .around(new BrowserLogCatcher(downloadDirRule)) .around(new ScreenShooter()) .around(new AttachmentFileSaver()) .around(new FailClassifier()) .around(new PendingRequestsCatcher());
يوفر FilterTestRunner.class - امتداد لـ BlockJUnit4ClassRunner ، تصفية لتكوين الاختبارات القابلة للتنفيذ بناءً على التعبيرات العادية حسب قيمة تعليق
التصفية الخاص (القيمة = "some_string_and_tag"). ويرد التنفيذ أدناه.
org.junit.rules.Timeout - يستخدم للحد من استمرار الحد الأقصى للاختبارات. يجب تثبيته أولاً ، لأنه يبدأ الاختبار في فرع جديد.
TestLogger عبارة عن فصل يسمح للاختبار بتسجيل الأحداث بتنسيق json للاستخدام في تحليلات ELK. إثراء الأحداث مع بيانات الاختبار من org.junit.runner.Description. بالإضافة إلى ذلك ، يقوم أيضًا تلقائيًا بإنشاء أحداث لـ ELK بتنسيق json لبدء الاختبار مع مدته ونتائجه
StandStateChecker هو فصل يتحقق من توفر واجهة الويب
للحامل المستهدف قبل تهيئة برنامج تشغيل الويب. يوفر التحقق السريع من أن الحامل متاح من حيث المبدأ.
WaitForAngularCreator - فئة تقوم بتهيئة معالج برنامج تشغيل الويب للتحكم في إكمال العمليات الزاوية غير المتزامنة. يتم استخدامه لتخصيص اختبارات "خاصة" مع مكالمات متزامنة طويلة.
org.junit.rules.TporaryFolder - يُستخدم لتعيين مجلد مؤقت فريد لتخزين الملفات لعمليات تحميل الملفات وتنزيلها عبر مستعرض ويب.
إن DownloaderCreator عبارة عن فئة توفر الدعم لعمليات التحميل إلى دليل مؤقت للملفات التي تم تنزيلها بواسطة المتصفح وتسجيلها من خلال وظيفة الفيديو Selenoid.
EnvironmentSaver - فئة تضيف معلومات عامة حول
بيئة الاختبار إلى تقرير Allure.
SessionVideoHandler - فئة تحمل ملف اختبار فيديو ، إن وجد ، وتطبق Allure على التقرير.
DriverCreator عبارة عن فئة تقوم بتهيئة WebDriver (الفئة الأكثر أهمية للاختبارات) اعتمادًا على المعلمات المحددة - المحلية أو اللولبية أو ggr-selenoid. بالإضافة إلى ذلك ، ينفذ الفصل مجموعة من برامج Java البرمجية المطلوبة للاختبار. يجب تهيئة
جميع القواعد التي تصل إلى برنامج تشغيل الويب بعد هذه الفئة.
BrowserLogCatcher - فئة تقوم بقراءة الرسائل الحادة من سجل المتصفح ، وتسجيلها على ELK (TestLogger) وتطبيقها على تقرير Allure.
ScreenShooter هي فئة تأخذ الاختبارات غير الناجحة لقطة شاشة من شاشة المتصفح وتطبقها على التقرير كـ WebDriverRunner.getWebDriver (). GetScreenshotAs (OutputType.BYTES)
AttachmentFileSaver - فئة تتيح لك إرفاق تقرير Allure بمجموعة من الملفات التعسفية التي يتطلبها منطق الأعمال للاختبارات. يستخدم لإرفاق الملفات التي تم تحميلها أو تنزيلها على النظام.
FailClassifier هي فئة خاصة ، في حالة تعطل الاختبار ، تحاول تحديد ما إذا كان هذا التعطل ناجمًا عن مشكلات في البنية الأساسية. يتم التحقق من وجود نوافذ مشروطة خاصة على الشاشة (بعد حدوث عطل) من النوع "حدث خطأ في النظام رقم XXXXXXXXXX" ، وكذلك رسائل النظام من النوع 404 وما شابه ذلك. يسمح لك بتقسيم الاختبارات الساقطة إلى أعطال تجارية (حسب السيناريو) أو مشاكل في النظام. يعمل من خلال الامتداد org.junit.rules.TestWatcher. # طريقة فاشلة.
PendingRequestsCatcher هي فئة خاصة أخرى تحاول زيادة تصنيف ما إذا كان التعطل ناتجًا عن خدمات راحة غير مكتملة أو معلقة أو طويلة جدًا بين الزاوي وواجهة الويب الأمامية. بالإضافة إلى الاختبار الوظيفي ، فإنه يجعل من الممكن تحديد خدمات الراحة التي تنطوي على مشاكل وتجميد تحت الأحمال الثقيلة ، وكذلك الاستقرار الشامل للإصدار. للقيام بذلك ، يسجل الفصل في ELK جميع الأحداث مع طلبات الراحة المجمدة التي يتلقاها من خلال إطلاق js خاص في المستعرض من خلال برنامج تشغيل ويب مفتوح.
اختبار تنفيذ فئة القالب
package autotest.test.<sub-system>; @Feature(" TMS") @Story(" TMS") @Owner(" ") @TmsLink(" . ") public class < >_Test extends BaseTest { Login orgTest; Login loginStep1; ... Login loginStepN; @Step(" ") private void init(Login login) { some_business_object =
اختبار قالب تنفيذ فئة البرنامج النصي
package autotest.business.actions.some_subsystem; public class SomeAction {
تطبيق FilterTestRunner اختبار تصفية الفئة
إليك تطبيق ملحق BlockJUnit4ClassRunner لتصفية الاختبارات بناءً على مجموعات علامات تعسفية.
public class FilterTestRunner extends BlockJUnit4ClassRunner { private static final Logger LOGGER = Logger.getLogger(FilterTestRunner.class.getName()); public FilterTestRunner(Class<?> klass) throws InitializationError { super(klass); } @Override protected List<FrameworkMethod> getChildren() {
في الجزء التالي ، سأتحدث عن كيفية قيامنا بتنفيذ عملية تحميل ملف من الحاوية مع المستعرض إلى إطار الاختبار ، وحل مشكلة العثور على اسم الملف الذي تم تنزيله بواسطة المتصفح.
بالمناسبة ، سنكون سعداء لتجديد فريقنا. الشواغر الحالية
هنا .