تم نشر المقال نيابة عن Andrey Ivanov و Ekaterina Bateeva ، neifmetus
تعد أتمتة التطبيقات المحمولة مجالًا شابًا إلى حد ما: فهناك العديد من الأطر وتواجه العديد من المشاريع مشكلة اختيار "الأكثر سرعة واستقرار وسهولة الاستخدام". منذ حوالي عامين ، واجهنا أيضًا اختيار أداة أتمتة جديدة لاختبار تطبيقات Android.
كانت جميع الأدوات الشائعة تعتمد بطريقة ما على UIAutomator و Espresso ، لذلك قررنا اختبارها في شكلها النقي ومقارنتها بنفس Appium (الأكثر شعبية) و
seeTest (المستخدم من قبل ، والأفضل بين
الأدوات المدفوعة في ذلك الوقت).
من مزايا Appium ، يمكن التمييز بين API WebDriver المعتاد ، والقدرة على استخدام اللغات والمكتبات الأكثر شعبية. بالإضافة إلى ذلك ، يستخدم على نطاق واسع في العديد من الشركات ويسمح لك بكتابة اختبارات مباشرة لمنصات iOS و Android. وأخيراً ، هذا حل محاصر مجاني - ماذا يمكن أن يكون أفضل؟
لذلك اعتقدنا ، حتى وجدنا أوجه القصور التالية:
- انخفاض الاستقرار من خادم Appium
- لا يمكنك التفاعل مع الأساليب العامة للنشاط (في 2018 ، تحدث نيكولاي أبالوف من Badoo عن إنشاء باب خلفي في Appium في مقالته ، يمكنك أن تقرأ هنا )
- أدنى بكثير في سرعة اختبارات اسبريسو
بالنسبة لنا ، كانت هذه اللحظات حاسمة ، لذلك تقرر تجميع مجموعة الأدوات الخاصة بنا حول Espresso لبناء نظام بيئي لاختبار تطبيقات الهاتف المحمول.
لذلك ، تم اختيار الإطار ، وظل للعثور على المكونات المتبقية:
- Runner - يجب السماح بإجراء الاختبارات بشكل متوازٍ وتكوين تجمعات الأجهزة
- المراسل - يجب تقديم تقرير مقروء يمكن استخدامه من قبل أي عضو في الفريق
الأدوات
مع العداء ، كان كل شيء على ما يرام ، والحفر قليلاً على جيثب ، تم اختيار
شزام / شوكة .
انها تسمح لك لتكوين مريح تجمع الأجهزة ، وسهلة التعديل ، وإنشاء تقرير أتش تي أم أل بسيط. يتم تطبيق Logcat على كل تقرير ، في حالة اختبار stacktrace وتعطل الفيديو. لا يعمل تسجيل الفيديو بشكل صحيح ، فكل مقاطع الفيديو تستغرق دقيقة واحدة ، وأحيانًا يتم تسجيل العديد من الاختبارات على الفيديو.

كانت تقارير الشوكة بعيدة عن المثالية ، ولم يفهم المستخدم النهائي ما كان يحدث في الاختبار فقط باسمه ، دون وجود حالة اختبار في متناول اليد. أردت أن يكون لديّ خطوات مع مرفقات الملفات التي تسمح لي بتنظيم التقرير. أسفر البحث عن مراسل لاختبارات الأجهزة عن 2 أنواع من الملاعق والخيار. تم تجاهل كلا الخيارين لأن مجموعة من لقطات الشاشة في حالة الملعقة و bdd من الخيار لم تحل المشكلة تمامًا ...
بدا جاذبية الحل الأمثل لهذه المشكلة:
- تداخل الخطوات التي تتيح لك هيكلة التقرير
- القدرة على تسجيل بيانات الاختبار المخصصة (لقطات ، فيديو ، رقم المهمة ، معلمات الاختبار)
- عرض موجز للتقرير
ولكن كان هناك تحذير واحد ، ألور ببساطة لا يبدأ على أندرويد.
جاذبية الروبوت
فيما يتعلق بما سبق ، فقد تقرر كتابة مكتبة تجمع بين بساطة وأناقة Kotlin ، ومزايا إطار Allure ويمكن أن تعمل على هواتف Android. لتوصيل المكتبة ، أضف تبعيات إلى الوحدة التي توجد بها اختبارات الأجهزة:
dependencies { androidTestImplementation "ru.tinkoff.allure:allure-android:$allureVersion@aar" androidTestImplementation "ru.tinkoff.allure:allure-common:$allureVersion" androidTestImplementation "ru.tinkoff.allure:allure-model:$allureVersion" }
بعد إعداد التبعيات ، نحتاج إلى تسجيل
AllureRunListener في الفصل المسؤول عن إجراء اختبارات android.
هناك ثلاث طرق للقيام بذلك:
- أضف إلى build.gradle
testInstrumentationRunner "ru.tinkoff.allure.android.AllureAndroidRunner"
- إضافة مستمع إلى الوسائط في Runner onCreate (الوسائط: Bundle)
arguments.putCharSequence("listener", AllureAndroidListener::class.java.name)
- ورثت مباشرة من AllureAndroidRunner
تعتمد تقارير Allure على الخطوة - خطوة ، إجراء ذري يتم إجراؤه أثناء الاختبار. تم استبدال التعليقات التوضيحية لإطار
Step و
Parameter باستدعاء مباشر للدالة step ().
inline fun <T : Any?> step(description: String, vararg params: Parameter, block: () -> T): T
لا تحل هذه الوظيفة محل التعليقات التوضيحية في آن واحد فقط ، ولكنها تقبل أيضًا لامدا يجب أن تقوم بلف منطق الاختبار به. على سبيل المثال:

بعد بدء الاختبار ، ستظهر التقارير بتنسيق json المعد لـ Allure2 على الهاتف في مجلد / sdcard / allure-results. بعد أن انسحبت النتيجة ، الفريق
adb pull /sdcard/allure-results
يمكننا توليد تقرير
allure generate
من الميزات الإضافية ، يمكننا التمييز بين:
- القدرة على الاستثمار خطوات في بعضها البعض
- في أي مكان ، يمكنك الاتصال بـ deviceScreenshot (علامة: سلسلة) لالتقاط لقطة شاشة سيتم إرفاقها تلقائيًا بالتقرير في الخطوة الحالية
- سوف FailshotRule () - junit4 القاعدة ، تأخذ لقطة للشاشة قبل السقوط
هذه نظرة عامة على استخدام Allure على نظام Android. يتوفر حل جاذبية Android على
GitHub ، يمكنك أن ترى بالتفصيل والمشاركة في التطوير.