-
Notifications
You must be signed in to change notification settings - Fork 79
19. Мобильная автоматизация #1. Разрабатываем автотесты с Browserstack
Browserstack — это облачный сервис, который предоставляет доступ к реальным устройствам для тестирования веб- и мобильных приложений. Сервис позволяет запускать тесты на устройствах с различными версиями операционных систем и браузеров. Browserstack платный, но есть возможность использовать бесплатный тарифный план с ограниченным функционалом.
На главной странице нас интересуют два последних раздела. App Live
который предназначен для запуска устройства и ручного взаимодействия, а App Automate
для запуска авто тестов.
Ссылка на страницу раздела 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
. Здесь можно выбрать язык программирования, который используется в проекте. Для примера выберем Python.
Ссылка на страницу раздела App Automate.
При первом входе в данный раздел будет отображена страница Get Started with App Automate
.
На которой нужно выбрать язык программирования. Для примера выберем Python.
После выбора языка программирования откроется страница с инструкциями по развертыванию проекта на платформе.
Для мобильной автоматизации 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
В вашем аккаунте 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 селекторы элементов в приложении могут быть разными. Например, это могут быть:
-
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, необходимо нажать на кнопку UPLOAD APP
. Загрузить файл с расширением .apk
или .ipa
или .aab
.
После загрузки приложения вам будет отображена ссылка в виде bs://d242c20d2faee9631bb9eeb953d96e620b8df339
, которую необходимо вставить в фикстуру в строку app
если необходимо использовать свою апк.
✔️ Сайт
✔️ Чат в Telegram
✔️ Канал в Telegarm
Содержание
Командная строка
Кодировка UTF-8 в Java
Список полезных книг для автоматизаторов тестирования на языке Java
Список полезных книг для автоматизаторов тестирования на языке Python
Структура проекта
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