Где 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-тестов из шагов кейса.
С чего начать
- Добавьте
--junitxmlили JUnit-репортёр раннера в задание тестов. - Проставьте ключи кейсов у пяти-десяти сценариев, которые чаще всего падают.
- Разведите выгрузку по платформам и заведите конфигурации в плане.
- Смотрите список несматченных в выводе первого запуска — он покажет, где разметки ещё нет.
Попробуйте на своём проекте
Заведите проект, загрузите первый отчёт или заведите первый дефект — бесплатный тариф без карты. Нужно демо на ваших сценариях — напишите на hello@qadesk.ru.
Создать проектРядом по теме
Android
Gradle пишет JUnit XML для каждого инструментального теста — QA Деск принимает его как есть и кладёт в покрытие рядом с ручными кейсами; конфигурации прогона превращают план в матрицу «устройство × версия ОС».
Android — отчёт с эмулятора и устройства, прогон по матрицеiOS
Xcode складывает результаты в бандл xcresult, а QA Деск принимает JUnit XML — между ними один шаг конвертации в пайплайне; после него автотесты и ручные проверки на устройствах живут в одном покрытии.
iOS — результаты XCTest в покрытие, ручной регресс по версиямJUnit XML
Своего формата у QA Деск нет: подойдёт JUnit XML, который ваш раннер уже пишет. Один запрос из пайплайна — и отчёт становится прогоном с историей, покрытием и дефектами.
JUnit XML — формат, который умеет писать всё