Как да направя тестване от край до край (E2E) за реален собствен Android на реални устройства с помощта на Python, Appium и AWS Device Farm

Този урок е стъпка по стъпка ръководство за хора, които искат да провеждат тестове на E2E на голям набор от физически устройства за приложението си React Native Android.

За това ще използваме AWS Device Farm.

В предишното ми записване по темата на E2E тестване за React Native Android:

Споменах, че:

Ако искате да стартирате Appium в AWS Device Farm, за да тествате приложението си на реални устройства, ще трябва да използвате Appium Python. Те не поддържат Appium JS.

Ако не знаете Python, тук е бърз урок по него: https://learnxinyminutes.com/docs/python3/

Настройвам

Следвайте официалното ръководство на Facebook, за да стартирате проект React Native. Не забравяйте да изберете Проекти за изграждане с Native Code.

Инсталирайте appium, appium-лекар

прежда добавете --dev appium appium-лекар

Добавете скриптове, свързани с appium, към package.json

Изпълнете лекар-апиум

прежда управлява аппиум-лекар

Ще трябва да коригирате грешките, които хвърля лекар-апиум. За целите на тестване на Android обаче можете да игнорирате всичко, свързано с iOS (xCode, Carthage).

Стартирайте appium сървър

прежда тече прежда

Обърнете внимание на порта, ще ви е необходим по-късно (порт по подразбиране е 4723).

Инсталиране на python неща

Инсталирайте virtualenv

Има няколко начина за инсталиране на virtualenv.

  1. Не е инсталирана анаконда: инсталирате пип - използвайте virtualenv
  2. Ако сте инсталирали анаконда: conda инсталирайте virtualenv

Настройка virtualenv

virtualenv venv
source venv / bin / activate # Въведете виртуална среда

Инсталирайте зависимости

Тъй като сме влезли във виртуалната среда от предишните стъпки, всички пакети Python, които инсталираме, ще бъдат локализирани във виртуалността на този проект.

Пакети за инсталиране:

  • Appium-Python-Client: Нашият клиент на Appium
  • селен: Нашият уебдивер
  • pytest: Тестът ни бегач
  • toolz: Някои помощни функции
пип инсталирате Appium-Python-Client селен pytest

Нека съхраняваме тези зависимости във файл с име изисквания.txt, така че винаги да можем да се върнем и да ги инсталираме отново.

pip замразяване> изисквания.txt

Основен тест

Сега, когато сме готови, нека напишем първия си тест.

Първият файл трябва да бъде записан на: ./__tests__/conftest.py. Той задава някои основни инициализации на нашия уеб диспечер Appium. Забележете, че функцията е маркирана с декоратор pytest.fixture. Това позволява тя да бъде консумирана от тестови функции по-късно.

Този втори файл трябва да бъде записан на: ./__tests__/test_main.py. Този файл използва закрепването на драйвера, което направихме в conftest.py. Той използва обекта на драйвера, който е получен от приспособлението.

Използваме driver.implicitly_wait, защото не знаем колко време ще отнеме даден елемент на екрана. Ще изчакаме максимум 10 секунди, преди да сметнем, че тестът е неуспешен. Тестът ни ще се опита многократно през периода на изчакване, за да намери елемента.

Този основен тест просто проверява дали съществува изглед с accessibilityLabel = "testview".

Някои неща, на които трябва да внимавате:

  • Пътят на приложението в конфигурацията е относително към корена на вашия проект. Не по отношение на тест по делото.

Може би се питате: „Защо достъпностМагъл?“. Ето как търсим елементи, когато правим тестове с Appium и React Native. Това е съвместимо и с iOS тестване на Appium. Предполага се, че в бъдеще ще има поддръжка на testID, но засега това е препоръчителният начин.

Нека добавим accessibilityLabel = "testview" в основата на изгледа на нашето приложение в ./index.android.js.

Изпълнете теста

  1. Стартирайте емулатор
  2. Стартирайте React Native dev сървър: стартира реагиране с реагиране
  3. тест за прежда
  4. Вашият тест трябва да бъде преминаващ!

Тест на бутон

Добавете следния код към ./__tests__/test_main.py.

Нека добавим бутон, който увеличава брояча на екрана. Вашият ./index.android.js трябва да изглежда така:

Стартирайте теста. Трябва да видите приложението да натиска бутона сам по себе си и броячът да се увеличава. Вашите тестове всички трябва да преминат.

Сега, когато написахме няколко теста и успешно ги пуснахме на емулатор на нашите локални машини, нека опитаме да ги стартираме в AWS Device Farm.

AWS Устройство Farm

Актуализирайте тестов код за AWS

Когато провеждаме нашите тестове на AWS, желаните възможности трябва да бъдат празни. Нека актуализираме кода, за да можем да работим на нашите локални машини и AWS.

Build APK APK

Ще трябва да изградим продуктов apk, който ще бъде качен в AWS:

  1. CD android && ./gradlew assembleRelease
  2. Файлът може да се намери под: ./android/app/build/outputs/apk/app-release-unsigned.apk

Опаковайте вашите тестове

Следвайте официалното ръководство на Amazon за това как да пакетирате вашите тестове за AWS Device Farm.

Тестове за изпълнение на AWS

  1. Регистрирайте се за AWS Device Farm
  2. Създайте нов проект
  3. Създайте нов старт> Качване на продукция apk
  4. Конфигуриране на тест> Appium Python> Качване на пощенски файл за тестов пакет
  5. Изберете устройства
  6. Посочете състоянието на устройството
  7. Преглед и стартиране на стартиране> Задаване на максимално време за всяко устройство
  8. Изчакайте тестовете да стартират

Готово сте! Благодаря за четенето и се надявам този урок да е бил полезен за вас!

Придружителният код към тази статия може да бъде намерен в това репо:

Неща, които трябва да се отбележат на AWS

  • Може да се наложи да внимавате за структурата на папките на zip файла. Понякога в миналото имах проблеми с zip файл, който включваше папка от най-високо ниво. Въпреки това не се сблъсках с тези проблеми, когато пишех този урок.
  • Уверете се, че Appium-Python-Client е в правилната версия за AWS. Може да се наложи да преминете обратно към Appium-Python-Client == 0,20.
  • Може да получите тази грешка за командния драйвер.send_keys: https://github.com/appium/python-client/isissue/162. В този случай ще трябва да преминете към селен == 3.3.1.
  • AWS ще изключи Appium сървъра за всеки тест, така че приспособленията на pytest с обхват на модула няма да работят. Всички тела са ефективно обхванати, за да функционират сега.