Skip to content

Automated tests for the Wikipedia Android app, covering the first launch flow

Notifications You must be signed in to change notification settings

sergivonavi/wikipedia-android-at

Repository files navigation

Автоматизация тестирования Android-приложения Wikipedia

Wikipedia Banner

Содержание

Описание

Википедия — многоязычная общедоступная интернет-энциклопедия со свободным контентом. Является самым крупным и наиболее читаемым справочником, а также самой полной энциклопедией из когда-либо создававшихся за всю историю человечества.

Особенности проекта

  • Современная архитектура тестов

    • Использован шаблон проектирования Page Object для поддержки чистоты и переиспользуемости кода;
    • Конфигурации написаны с использованием библиотеки Owner, что обеспечивает гибкость и удобство настройки окружений.
  • Кастомные расширения для тестов

    • @Layer, @Manual — интеграция с Allure TestOps для категоризации тестов.
  • Мобильная специфика

    • Тестирование Android-приложения с использованием Appium;
    • Запуск на реальных устройствах и эмуляторах.
  • Удобные сценарии запуска

    • Локальный и удалённый запуск;
    • Фильтрация тестов по тегам;
    • Возможность запуска напрямую из Allure TestOps.
  • CI/CD-процессы

    • При каждом пуше в основные ветки и перед мержем пулл-реквестов запускается сборка проекта в GitHub Actions.
  • Интеграция с Allure

    • После прохождения автотестов формируется наглядный Allure-отчет:
      • Шаги выполнения;
      • Скриншот страницы перед завершением теста;
      • Видео прохождения сценария;
      • HTML-код страницы и логи браузера.
    • Результаты автоматически синхронизируются с Allure TestOps.
  • Уведомления о результатах

    • Итоги тестового прогона отправляются в Telegram-чат с помощью библиотеки Allure notifications.

Технологии и инструменты

IntelliJ IDEA Android Studio Java JUnit5 Selenide Appium Gradle Git GitHub Jenkins Browserstack Allure Report Allure TestOps Telegram

  • Среда разработки

  • Язык программирования

  • Фреймворки для тестирования

    • JUnit 5 — современный тестовый фреймворк с поддержкой аннотаций, параметризации и расширений
    • Selenide — лаконичная обёртка над Selenium WebDriver для UI-тестов
    • Appium — инструмент для автоматизации тестирования мобильных приложений
  • Сборка и управление зависимостями

    • Gradle — сборка, управление зависимостями и настройка запуска тестов
  • Контроль версий и репозиторий

    • Git — система контроля версий
    • GitHub — хостинг и управление проектом
  • Инфраструктура и CI/CD

    • GitHub Actions — автоматизация рабочих процессов и CI/CD в GitHub
    • Jenkins — автоматизация прогонов тестов, формирование отчётов и интеграция с внешними сервисами
    • Browserstack — облачная платформа для запуска тестов на реальных устройствах
  • Отчётность и интеграции

    • Allure Report — детализированные отчёты о тестовых прогонах
    • Allure TestOps — управление тестами и аналитика результатов
    • Telegram — интеграция через бота для оперативных уведомлений о статусе прогонов

Реализованные проверки

UI

Онбординг:

  • Проверка содержимого всех фрагментов онбординга
  • Переход между фрагментами онбординга свайпами
  • Нажатие кнопки "Back" закрывает онбординг
  • Нажатие кнопки "Skip" закрывает онбординг
  • Нажатие кнопки "Get started" закрывает онбординг
  • Онбординг не открывается после пропуска при повторном запуске приложения
  • Онбординг не открывается после завершения при повторном запуске приложения

Поиск:

  • Ввод поискового запроса с проверкой наличия результатов
  • Открытие статьи из результатов поиска
Ручные проверки

Авторизация:

  • Авторизация с валидными данными
  • Авторизация с несуществующим логином

Запуск тестов

---
config:
  theme: base
  themeVariables:
    primaryColor: '#F9F9F9'
    primaryBorderColor: '#404040'
    primaryTextColor: '#7F7F7F'
    lineColor: '#404040'
    nodeBorder: '#404040'
---
flowchart LR
  subgraph C["Локальный запуск"]
        C1["Запуск через локальный Appium Server"]
  end
  subgraph D["Удалённый запуск"]
        D2[/"Учетные данные Browserstack"/]
        D1["Запуск через Browserstack"]
  end
  subgraph S["Настройки запуска"]
        S1[/"Параметры устройства"/]
        S2[/"Параметры приложения"/]
  end
    A(["Запуск тестов"]) --> B{"Выбор окружения<br>remote=?"}
    B -- false --> C1
    B -- true --> D1
    D1 --> D2
    C1 --> S1
    D2 --> S1
    S1 --> S2
    S2 --> U{"Выбор типов тестов<br>includeTags=?"}
    U -- regress --> X["Регрессионные тесты"]
    U -- smoke --> Y["Smoke-тесты"]
    X --> Z(["Результаты тестов"])
    Y --> Z
    D2 -. Необходимо задать id приложения .-> S2
    N1["Возможно хранение в конфигурационных файлах"] -.-> D2 & S1 & S2
    N1@{ shape: braces}
     A:::terminator
     B:::decision
     C:::block
     D:::block
     S:::block
     U:::decision
     Z:::terminator
    classDef terminator fill:#808080,stroke:#404040,stroke-width:2px,color:#000
    classDef decision fill:#404040,stroke:#000000,stroke-width:2px,color:#FFF
    classDef block fill:#7F7F7F,stroke:#404040,stroke-width:2px,color:#000
Loading
gradle clean test -Premote={true|false} -PincludeTags={tags} -Ddevice={device} \
  -Dremote.domain={domain} -Dremote.username={username} -Dremote.access_key={access_key} -Dproject.name={project_name} \
  -Dapp.id={id} -Dapp.package={package} -Dapp.activity={activity}
  • remote — выбор окружения (опционально):
    • true — запуск тестов через Browserstack
    • false — запуск тестов через локальный Appium Server (по умолчанию)
  • device — предопределенная конфигурация устройства (опционально):
    • device1, device2
    • по умолчанию default
  • remote.* (только для remote=true) — данные для авторизации в Browserstack:
    • domain — домен (по умолчанию hub.browserstack.com)
    • username — логин пользователя Browserstack
    • access_key — ключ доступа пользователя Browserstack
    • project.name (только для remote=true) — название проекта в Browserstack
  • app.* — данные тестируемого приложения:
    • id (только для remote=true) — id приложения в Browserstack, которое будет устанавливаться на устройство
    • package — имя пакета приложения (по умолчанию org.wikipedia.alpha)
    • activity — название стартовой Activity приложения (по умолчанию org.wikipedia.main.MainActivity)
  • includeTags — теги тестов для запуска (можно комбинировать, см. документацию JUnit):
    • regress — регрессионные тесты
    • smoke — smoke-тесты

Минимальный набор параметров для запуска через Browserstack:

gradle clean test -Premote=true -Dremote.username={username} -Dremote.access_key={access_key} -Dapp.id={id}
Дополнительные команды
  1. Формирование Allure-отчёта:

    gradle allureReport

    По умолчанию отчёт генерируется в папку build/allure-results.

  2. Формирование Allure-отчёта, запуск локального HTTP-сервера и открытие в браузере:

    gradle allureServe

Локальный запуск

  1. Установить Android Studio и настроить переменные среды
  2. Открыть Virtual Device Manager и создать эмулятор с требуемыми свойствами
  3. Установить Node.js
  4. Установить Appium через npm
    npm i -g appium
  5. Установить UiAutomator2 Driver
    appium driver install uiautomator2
  6. Запустить Appium Server
    appium server --base-path /wd/hub
  7. Запустить эмулятор
  8. Запустить тесты

Локальная конфигурация

Для упрощения локального запуска можно создать файлы remote/browserstack.properties, remote/local.properties, app/app.properties, devices/local.{device_name}.properties и devices/browserstack.{device_name}.properties в корневой папке config.

В папке есть шаблоны: browserstack.example.properties, local.example.properties, browserstack.device.example.properties, local.device.example.properties, app.example.properties. Необходимо скопировать их, убрав из имени .example, и заполнить своими данными.

Минимальный набор параметров для локального запуска, если настроена локальная конфигурация:

gradle clean test

Сборка в Jenkins

Jenkins — инструмент для автоматизации сборки, тестирования и деплоя проектов.

В проекте используется для:

  • удалённого запуска автотестов,
  • формирования Allure-отчётов по результатам прогонов,
  • интеграции с уведомлениями в Telegram.

На странице проекта доступна информация о последних сборках и график успешности прохождения тестов из Allure-отчёта:

Jenkins - Project Overview

Раздел Build with Parameters позволяет задать необходимые параметры перед запуском сборки:

Jenkins - Build with Parameters

После завершения сборки автоматически формируется Allure-отчёт, и обновляются результаты прохождения тестов в Allure TestOps.

Интеграция с Allure Report

Allure Report — инструмент для визуализации результатов тестов, который формирует наглядные и подробные отчёты.

В проекте используется для:

  • отображения шагов выполнения теста,
  • демонстрации скриншотов и видео,
  • анализа логов и исходного кода страницы,
  • отслеживания успешных и упавших тестов.

Во вкладке Overview отображается общий результат прогона тестов: диаграммы успешных и упавших тестов, распределение по сьютам и функциональным фичам:

Allure Overview

При переходе в конкретный тест доступны подробности — шаги теста, скриншоты, видео и логи браузера:

Allure Test Details

Интеграция с Allure TestOps

Allure TestOps — облачная платформа для управления тестами и анализа результатов.

В проекте используется для:

  • хранения тест-кейсов,
  • группировки тестов по функциональностям и пользовательским историям,
  • отслеживания выполнения тестов в динамике,
  • интеграции с Jenkins и отчетами Allure.

Интеграция с Jenkins позволяет запускать выбранные тесты и отслеживать их выполнение в реальном времени:

Allure TestOps - Jenkins Integration

Прогоны тестов отображаются на графиках и диаграммах, что позволяет быстро оценивать динамику и стабильность тестов:

Allure TestOps - Test Runs

Тестовые сценарии автоматически синхронизируются с кодом проекта после завершения прогонов, обеспечивая актуальность кейсов:

Allure TestOps - Test Cases

Уведомления в Telegram

Результаты тестового прогона автоматически отправляются в Telegram-чат, что позволяет оперативно отслеживать статус прогонов и быстро реагировать на падения тестов:

Allure Notifications - Telegram

Видео выполнения теста

Для каждого теста в отчёте прилагается видео прохождения, позволяя визуально проверить выполнение шагов и воспроизвести возможные ошибки:

Video

Правовая информация

Все названия продуктов, логотипы и изображения (включая материалы сайта wikipedia.org и приложения Wikipedia, которые используются в тестах) использованы исключительно в образовательных и демонстрационных целях. Все права принадлежат их законным владельцам.

About

Automated tests for the Wikipedia Android app, covering the first launch flow

Topics

Resources

Stars

Watchers

Forks

Languages