Skip to content

19. Мобильная автоматизация #1. Разрабатываем автотесты с Browserstack

BohdanObruch edited this page May 29, 2024 · 2 revisions

Browserstack

Browserstack — это облачный сервис, который предоставляет доступ к реальным устройствам для тестирования веб- и мобильных приложений. Сервис позволяет запускать тесты на устройствах с различными версиями операционных систем и браузеров. Browserstack платный, но есть возможность использовать бесплатный тарифный план с ограниченным функционалом.

На главной странице нас интересуют два последних раздела. App Live который предназначен для запуска устройства и ручного взаимодействия, а App Automate для запуска авто тестов.

App Live

Ссылка на страницу раздела App Live. Нажмем App Live и попробуем запустить удаленное Android-устройство в браузере. На странице регистрации нажимаем Get started free и проходим пошаговую процедуру регистрации. Если вы работаете с macOS, то важно учесть, что сервис не работает с браузером Safari. Поэтому следует перейти в Chrome или Firefox.(именно не работает App Live с Safari, а не весь сервис Browserstack)

Таким образом выглядит страница выбора устройства. Для запуска доступна коллекция гаджетов на базе Android и iOS. Выбираем смартфон на Android и в окне запустится сам гаджет. С ним можно будет взаимодействовать как с физическим устройством, нажимать на кнопки, вводить текст и т.д. Ограничение в бесплатной версии — 2 минуты работы на каждое доступное устройство.

Инспектор элементов

Если перейти на таб Inspect и нажать кнопку Play, то запустится режим инспектора элементов и можно будет изучить окно приложения более детально, получив подробную информацию о каждом элементе. Также можно получить локаторы элементов, которые можно использовать в авто тестах.

Загрузка приложения

Если нужно загрузить и потом запустить свое приложение, то для этого нужно нажать на кнопку Upload your App и загрузить файл с расширением .apk или .ipa или .aab.

Все загруженные ранее приложения будут доступны в разделе Uploaded Apps.

App Automate

Для автоматизации тестов переходим в раздел App Automate. Здесь можно выбрать язык программирования, который используется в проекте. Для примера выберем Python. Ссылка на страницу раздела App Automate.

При первом входе в данный раздел будет отображена страница Get Started with App Automate. На которой нужно выбрать язык программирования. Для примера выберем Python.

После выбора языка программирования откроется страница с инструкциями по развертыванию проекта на платформе.

Запускаем пример теста на Browserstack

Для мобильной автоматизации Browserstack предлагает пример теста, который можно запустить на платформе. Этот код также можно получить в GitHub-репозитории. Для автоматизации используется Appium и Python. Appium — кроссплатформенный фреймворк для автоматизации мобильных приложений как под управлением Android, так и под iOS. Appium бесплатный и распространяется с открытым исходным кодом. Работа фреймворка схожа с принципами работы Selenium WebDriver. Appium также получает HTTP-запросы в виде JSON и преобразует их в зависимости конкретной платформы.

Для работы с проектом на Appium необходимо создать проект и установить зависимости.

В файл requirements.txt или pyproject.toml(будет немного другое отображение зависимостей, вместо '==' будет одно '=') добавлены зависимости для работы с проектом:

Appium-Python-Client==4.0.0
pytest==8.2.1
allure-pytest==2.13.5
selene==2.0.0rc9

ACCESS KEY для Browserstack

В вашем аккаунте Browserstack отображена панель с данными, где нужно нажать на иконку с ключом и названием ACCESS KEY , чтобы отобразились данные для авторизации. А именно User Name и Access Key.

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

import pytest
from appium.options.android import UiAutomator2Options
from selene import browser
import os
from appium import webdriver


@pytest.fixture(scope='function', autouse=True)
def mobile_management():
    options = UiAutomator2Options().load_capabilities({  # опции для запуска теста на android, именно локальные опции
        # Specify device and os_version for testing
        "platformName": "android", # Название платформы, это не обязательно указывать, так как по умолчанию стоит android
        "platformVersion": "9.0", # Версия Android
        "deviceName": "Google Pixel 3", # Имя устройства в Browserstack

        # Set URL of the application under test
        "app": "bs://sample.app", # Ссылка на загруженное приложение в Browserstack. Если стандартное приложение, то оставить как есть

        # Set other BrowserStack capabilities (опции именно для Browserstack)
        'bstack:options': {
            "projectName": "First Python project", # Название проекта которое будет отображаться в Browserstack
            "buildName": "browserstack-build-1", # Название сборки которое будет отображаться в Browserstack
            "sessionName": "BStack first_test", # Название сессии которое будет отображаться в Browserstack

            # Set your access credentials
            "userName": "YOUR_USERNAME", # Ваш логин в Browserstack
            "accessKey": "YOUR_ACCESS_KEY" # Ваш ключ доступа в Browserstack
        }
    })

    browser.config.driver = webdriver.Remote("http://hub.browserstack.com/wd/hub", options=options) # Адрес для подключения к Browserstack

    browser.config.timeout = float(os.getenv('timeout', '10.0'))  # Таймаут для ожидания элементов
    
    # тут можно добавить низкоуровневое логирование шагов
    
    session_id = browser.driver.session_id  # Получаем ID сессии
    
    
    yield

    # аттачи
    browser.quit()

Селекторы в Appium

В Appium селекторы элементов в приложении могут быть разными. Например, это могут быть:

  • ACCESSIBILITY ID — уникальный идентификатор элемента;
  • CLASS NAME — имя класса элемента;
  • XPATH — путь к элементу;
  • ID — уникальный идентификатор элемента;
  • NAME — имя элемента(Желательно не использовать, так как он ищет все элементы с таким именем);

Обращение к селекторам в коде выглядит следующим образом:

from appium.webdriver.common.appiumby import AppiumBy
from selene import browser


browser.element((AppiumBy.ACCESSIBILITY_ID, "Search Wikipedia")).click()

Добавляем аттачи к проекту

Для добавления аттачей в проект необходимо установить библиотеку allure-pytest и добавить в проект следующий код:

# attach.py
import allure
import requests


def add_screenshot(browser):
    png = browser.driver.get_screenshot_as_png()
    allure.attach(body=png, 
                  name='Screenshot', 
                  attachment_type=allure.attachment_type.PNG)


def add_xml(browser):
    xml_dump = browser.driver.page_source
    allure.attach(body=xml_dump, 
                  name='XML screen', 
                  attachment_type=allure.attachment_type.XML)


def add_video(session_id, login, access_key):
    browserstack_session = requests.get(
        url=f'https://api.browserstack.com/app-automate/sessions/{session_id}.json',
        auth=(login, access_key)
    ).json()
    video_url = browserstack_session['automation_session']['video_url']

    allure.attach(
        '<html><body>'
        '<video width="100%" height="100%" controls autoplay>'
        f'<source src="{video_url}" type="video/mp4">'
        '</video>'
        '</body></html>',
        name='video recording',
        attachment_type=allure.attachment_type.HTML,
    )

Низкоуровневое логирование шагов

Для логирования шагов в тесте можно использовать следующий код:

import allure_commons
from selene import browser, support

browser.config._wait_decorator = support._logging.wait_with(
        context=allure_commons._allure.StepContext
    )

Пример отображения без низкоуровневого логирования шагов:

Пример отображения шагов с низкоуровневым логированием:

Загрузка приложения в App Automate

Для того чтобы загрузить апк-файл в App Automate, необходимо нажать на кнопку UPLOAD APP. Загрузить файл с расширением .apk или .ipa или .aab.

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

Содержание
Командная строка
Кодировка UTF-8 в Java
Список полезных книг для автоматизаторов тестирования на языке Java
Github README.md

Java:
1. Вводное занятие. Сразу к практике.
2. Git. GitHub. Погружаемся.
3. Погружаемся в инструментарий и библиотеки
4. Основы Java
5. Продолжаем разрабатывать автотесты. PageObjects
6. JUnit 5
7. Allure Reports
8. Работа с файлами
9. Selenide #1
10. Jenkins. Создаем первую задачу
11. Управляем параметрами в коде и в Jenkins
12. Отправляем уведомления о результатах прохождения автотестов
13. Учимся быстро разрабатывать проекты для тестовых заданий
14. Selenoid
15. Библиотека Owner
16. REST API. Пишем автотесты с Rest assured
17. REST API. Декомпозируем UI тесты. Подключаем отчетность
18. REST API. Продолжаем изучать
19. Мобильная автоматизация #1. Разрабатываем автотесты с Browserstack
20. Allure TestOps
21. Переезд на собственную инфраструктуру Java

Python:
1. Вводное занятие. Сразу к практике!
2. Погружаемся в инструментарий и библиотеки
3. Git. GitHub. Погружаемся.
4. Основы Python
5. Selene #1
6. Основы Python. Часть II
7. Основы Python. Часть III
8. Page Object
9. Allure Reports
10. Работаем с файлами Python
11. Jenkins. Создаем первую задачу и управляем параметрами Python
12. Телеграм бот. Отправляем уведомления о результатах прохождения тестов
13. Pytest
14. Selenoid
15. Pytest. Часть II
16. Venv, Poetry и управление зависимостями проекта
17. REST API. Часть I. Пишем автотесты с Requests
18. REST API. Часть II. Продолжаем изучать
19. Мобильная автоматизация #1. Разрабатываем автотесты с Browserstack
20. Мобильная автоматизация #2. Разрабатываем автотесты с эмулятором Android устройства
21. Allure TestOps
22. Переезд на собственную инфраструктуру Python

Clone this wiki locally