Мобильные приложения

Appium — один драйвер, два прогона, честный отчёт

Appium — самый частый выбор для мобильных автотестов вне кода приложения; отчёт даёт тот раннер, из которого вы его запускаете, а QA Деск принимает JUnit или Allure и кладёт результат в прогон нужной платформы.

Где Appium в схеме

Appium не пишет отчётов — их пишет раннер: pytest, TestNG, JUnit, WebdriverIO, Mocha. Для QA Деск это удобно: формат отчёта уже знаком, и приём тот же, что для любых автотестов. Особенность Appium — один и тот же тест запускается под Android и iOS с разными capabilities, поэтому важно не смешать результаты двух платформ в одном прогоне.

Отчёт из раннера

pytest:

pytest tests/mobile --junitxml=reports/junit.xml --alluredir=reports/allure

TestNG и JUnit пишут XML в target/surefire-reports/ без настройки. WebdriverIO — через @wdio/junit-reporter. Если в команде принят Allure, приём поддерживает и его — выбирайте по удобству.

Ключ кейса — в имени теста или в property:

def test_QAD_C42_login_with_valid_password(driver):
    driver.find_element(AppiumBy.ACCESSIBILITY_ID, "login").send_keys("user")
    # …

Для Allure — label qadesk_case, для JUnit — property qadesk.case, затем имя, затем classname. Тесты без ключа возвращаются поимённо и не записываются.

Платформа — в момент выгрузки

Запуск под каждую платформу — отдельное задание CI с отдельной выгрузкой:

./qadesk-cli upload --run "App appium" --env stage --platform android --build "$BUILD" reports
./qadesk-cli upload --run "App appium" --env stage --platform ios     --build "$BUILD" reports

Если план стартован по конфигурациям {platform: Android, …} и {platform: iOS, …}, каждый отчёт ложится в свой прогон, а строка «вход с верным паролем» показывает два результата — по платформам, а не «в среднем».

Параллельные запуски на нескольких устройствах — это разное содержимое под одним ключом прогона CI: задайте каждому свой --attempt или --ci-run-id, иначе второй отчёт получит отказ, а не тихо перезапишет первый. Если один кейс встретился в отчёте дважды, в прогон попадает худший исход — ретраи не красят прогон зелёным.

Фермы устройств

QA Деск не запускает тесты и не держит ферму — и не собирается: у фермы другая экономика и другая команда, а у деска задача одна — показать, что проверено, что упало и кто это чинит. Любая ферма, которая возвращает JUnit — облачная или собственная стойка с эмуляторами и adb, — подключается тем же CLI. Имя фермы и устройство удобно писать в конфигурацию прогона, чтобы история сравнивалась «яблоко с яблоком».

Ручные кейсы рядом с автотестами

Appium закрывает сценарии, а не ощущения: плавность анимаций, читаемость при увеличенном шрифте, поведение при звонке или обрыве сети во время оплаты остаются за ручным регрессом. В QA Деск ручные и автоматические строки лежат в одном прогоне: по плану видно, что проверено машиной, что руками и что не проверено вовсе. Когда автотест на сценарий появляется, ручная строка не удаляется — она получает результат из отчёта, и история кейса не рвётся.

Дефект

Из упавшей строки дефект наследует среду, платформу, сборку и конфигурацию, ссылка на прогон прикладывается. Скриншот, который Appium снимает при падении, прикладывается вложением. Задача разработчику — в Битрикс24 или SourceCraft из карточки дефекта.

Чего в продукте нет

  • нет запуска Appium-сессий и фермы устройств;
  • нет хранения видео сессий — они остаются в CI или на ферме;
  • нет генерации Appium-тестов из шагов кейса.

С чего начать

  1. Добавьте --junitxml или JUnit-репортёр раннера в задание тестов.
  2. Проставьте ключи кейсов у пяти-десяти сценариев, которые чаще всего падают.
  3. Разведите выгрузку по платформам и заведите конфигурации в плане.
  4. Смотрите список несматченных в выводе первого запуска — он покажет, где разметки ещё нет.

Попробуйте на своём проекте

Заведите проект, загрузите первый отчёт или заведите первый дефект — бесплатный тариф без карты. Нужно демо на ваших сценариях — напишите на hello@qadesk.ru.

Создать проект