Автотесты
Основная информация
Автотесты (или функциональный мониторинг) - это процесс контроля и проверки работы функциональности приложения или системы в режиме реального времени. Он направлен на обеспечение стабильной работы системы и раннее обнаружение возможных проблем или отклонений в работе функциональности.
Основные задачи функционального мониторинга включают:
- Контроль доступности и отклика системы или приложения
- Мониторинг производительности, включая метрики времени отклика и нагрузки на систему
- Отслеживание ключевых функций и бизнес-процессов
- Обнаружение и регистрация ошибок или сбоев в работе сервисов
При таком способе мониторинга приложений и сервисов используются различные инструменты и фреймворки, такие как Selenium, pytest, JUnit и другие, которые позволяют создавать тестовые сценарии и запускать их при помощи агентов Monq (управляемые проекты автотестирования).
Обратите внимание, что Monq не является инструментом тестирования функционала приложений. А является инструментом контроля, запуска и анализа результатов выполнения ваших тестов.
После выполнения автотестов, результаты сохраняются в определенном формате (например, Allure) и их можно отправлять и обрабатывать в Monq - формировать метрики, определять успешность прохождения теста и формировать сигналы о проблемах, если таковые присутствуют.
Прием результатов тестирования осуществляется через API (справка), а обработка и анализ при помощи сценариев автоматизации (справка).
В Monq существует два типа проектов функционального мониторинга: управляемый и автономный.
- Управляемый проект - Monq осуществляет запуск автотестов по заданному расписанию и настроенному сценарию на своих агентах. Результаты тестирования отправляются в этот же проект.
- Автономный проект - Monq ожидает поступления результатов автотестирования от внешних инструментов запуска тестов (Jenkins, GitlabCI и другие).
Чтобы начать работу с модулем Autotests перейдите в соответсвующий раздел в основном меню системы - будет открыт главный экран управления проектами автотестирования.
Настройка модуля автотестирования
Перед созданием проектов функциональных тестов необходимо импортировать базовые сценарии обработки отчетов функционального тестирования.
Autotest Builds Parser.txt
- сценарий парсинга отчетовAutotest Signal Processor.txt
- сценарий генерации сигналов
Скачать сценарии можно по ссылке из публичного репозитория GitHub.
Приведенные примеры сценариев разработаны для обработки результатов тестирования, сформированных фреймворком Allure. Если вы использ уете другой инструмент формирования результатов тестирования - вам необходимо разработать собственные сценарии автоматизации или обратиться в компанию "Monq Digital Lab" за помощью.
В отправленном, в коллектор автотестов, zip архиве должна находиться директория allure-results
, в которой хранятся результаты выполнения автотестов в формате Allure JSON. Файлы в директории allure-results
содержат информацию о выполненных тестах, статусе их выполнения, пройденных и не пройденных проверках, времени выполнения, скриншотах, логах и других метаданных.
Минимальный набор файлов в каталоге allure-results
для успешной обработки в Monq:
26a58974-3ada-4445-8375-8e7054aa8b2c-attachment.png
350f3653-71f4-40e7-a96e-ad430e6401be-container.json
5a745ea3-39bb-4a09-9ca9-b6d6366b457a-attachment.png
64ea00a1-d5d6-438d-90d9-349bdf9de33b-result.json
c1e06a96-5144-4f43-a7cf-c7f80479c315-container.json
cb7a38d9-5d36-4421-9579-54d136a32b74-attachment.png
environment.xml
-
environment.xml
- содержит информацию о среде, в которой выполнялись автотесты. Он содержит различные параметры и переменные окружения, которые могут быть полезны для анализа результатов тестирования.Пример содержимого:
- <environment>
- <parameter>
<key>project</key>
<name>project</name>
<value>None</value>
</parameter>
- <parameter>
<key>build</key>
<name>build</name>
<value>0</value>
</parameter>
- <parameter>
<key>browser</key>
<name>browser</name>
<value>chrome:101.0</value>
</parameter>
- <parameter>
<key>test_key</key>
<name>test_key</name>
<value>3</value>
</parameter>
</environment> -
<uuid>-result.json
- основной файл, который содержит информацию о результате выполнения тестов и шагов. Он используется для построения отчета и отображения результатов тестирования.Пример содержимого:
{
"uuid": "unique-id",
"name": "Test Suite",
"start": 1628671200000,
"stop": 1628671800000,
"status": "passed",
"steps": [
{
"name": "Step 1",
"status": "passed",
"start": 1628671201000,
"stop": 1628671202000,
"attachments": [
{
"name": "screenshot",
"source": "cb7a38d9-5d36-4421-9579-54d136a32b74-attachment.png",
"type": "image/png"
}
]
},
{
"name": "Step 2",
"status": "failed",
"start": 1628671203000,
"stop": 1628671204000,
"attachments": []
}
],
"attachments": []
} -
<uuid>-container.json
- представляет собой структурированный JSON-объект, который содержит поля, описывающие контейнеры, тест-кейсы и другие связанные данныеПример содержимого:
{"uuid": "deb440bb-e25a-4032-b509-1aad37c97bb8", "children": ["82c81816-40a8-417b-8f40-19aa4aefaf4a"], "befores": [{"name": "prepare_test_env", "status": "passed", "start": 1653559260012, "stop": 1653559260021}], "start": 1653559260012, "stop": 1653559287197}
-
<uuid>****-attachment.png
- файлы-вложения (attachments)Пример описания в файле
<uuid>-result.json
:{
"name": "screenshot",
"source": "cb7a38d9-5d36-4421-9579-54d136a32b74-attachment.png",
"type": "image/png"
}
Раздел документации Автоматизация
Импортированные сценарии необходимо скомпилировать и активировать.
Создание проекта функционального тестирования
Чтобы создать новый проект, выполните следующие действия:
-
На экране Autotests нажмите «Создать проект» в правом верхнем углу.
Если у вас еще нет доступных проектов Функционального тестирования - начальная страница экрана Autotests начнется с формы создания проекта.
-
В открывшемся окне укажите Тип проекта:
- Автономный - Конфигурация и выполнение тестов происходит во внешней системе, проект содержит лишь отчеты о тестировании.
- Управляемый - Конфигурация, запуск автотестов и хранение отчетов тестирования происходит в Monq. Непосредственное выполнение тестов происходит во внешней среде (Selenium, Vanessa и пр.) с установленным Monq Agent.
-
Выберите Рабочую Группу - владельца проекта
-
Введите Название проекта
-
Дополнительно укажите краткое Описание проекта.
-
Укажите, нужно ли собирать метрические данные по результатам отчета.
Потребуется указать имеющийся или создать новый поток данных в котором будут сохраняться метрики.
-
Нажмите «Добавить» – будет создан новый проект в состоянии Остановлен, а вы будете перенаправлены на страницу проекта.
Настройка проекта
Основная информация
Для изменения основных параметров проекта (Название, Владелец, Описание, Тип проекта), перейдите на вкладку «Общая информация», укажите в нужном поле новое значение и нажмите «Сохранить».
При изменении типа проекта все настройки проекта будут очищены.
Метки
Вы можете добавить на проект метки для более удобной навигации – для этого нажмите «Добавить метки» рядом с названием проекта и введите название метки. Если нужная метка уже существует, она прикрепится к проекту, если нет – выберите цвет будущей метки и она будет автоматически создана.
Доступ
Для настройки доступа Рабочих Групп к проекту, перейдите во вкладку «Доступ».
Для выдачи Рабочим Группам прав на просмотр или редактирование проекта, выберите одну или несколько групп в поле «Выберите рабочие группы», выберите просмотр или редактирование в поле рядом и нажмите «Выдать доступ».
Дл я изменения выданного доступа, измените тип доступа в селекторе напротив названия соответствующей группы.
Для отзыва доступа, нажмите на значок «🗑» напротив названия группы.
Автономный проект
Для начала приёма сборок функционального тестирования, сконфигурируйте проект:
- На вкладке «Общая информация» сгенерируйте и скопируйте API-ключ – нажмите «Обновить», затем «Копировать».
- Перейдите в систему автоматического выполнения сценариев тестирования и укажите скопированный ранее ключ API:
-
Например, для Jenkins перейдите в настройки проекта и вставьте в поле «Выполнить команду Shell» команду
export X_FMonq_PROJECT_KEY=<ключ API>
, где<ключ API>
– скопированный на 1-м шаге ключ (см. подробнее про API).
-
Управляемый проект
При использовании Управляемых проектов Autotests запуск функциональных тестов производится на внешних стендах функционального тестирования при помощи Агентов Monq.
Управляющим элементом на стенде функционального тестирования является Агент Monq.
Прежде чем переходить к конфигурации Управляемого проекта необходимо установить Агент на сервере функционального тестирования и подключить его к своему пространству Monq.
Задание
Для запуска функционального теста необходимо сконфигурировать Задание на языке Yaml, которое будет выполняться на внешнем Агенте.
Пример такого задания, может иметь следующий вид:
name: Monq AutoTest
env:
BUILD_NUMBER: $.vars.params.buildId
PROJECT: $.vars.params.projectId
X_FMONQ_PROJECT_KEY: $.vars.params.projectKey
X_SMON_STREAM_KEY: $.vars.params.streamKey
HUB_URL: $.vars.params.hubUrl
BROWSER_VERSION: 118
SEND_EVENT: False
SEND_VERIFY_SSL: False
AGGREGATOR_URL: $.vars.params.testforgeUri
jobs:
- steps:
- name: Run test
run: pytest /tests/test_demovks.py --alluredir ./allure-results --clean-alluredir
в указанном примере Задания в секции env
определяются необходимые переменные окружения для запуска тес та на Python и выполняется команда запуска функционального теста в секции steps
.
В приведенном примере запуск теста производится с использованием дополнительного плагина для
pytest
- PytestForge, который облегчает написание тестов с использованием webdriver, а также генерирует и отправляет тест-отчет в Monq.
Пример теста test_demovks.py на языке Python
from allure_commons.types import AttachmentType
from selenium.webdriver.common.by import By
import allure
import time
import os
BASE_URI = os.getenv("IVA_URL") or "https://ivcs-demo.iva-tech.ru/v2/login"
IVA_ID = os.getenv("IVA_ID") or "123-456-789"
@allure.feature('Демо. Функциональный тест DEMO ВКС')
@allure.story('Демо кейс №1 Проверка DEMO ВКС')
def test_vks(browser):
"""
Наименование сценария тестирования: Демо кейс №1 Проверка DEMO ВКС
"""
browser.timeout = 25
with allure.step(f'Шаг 1. Открыть ссылку {BASE_URI} и проверить наличие на странице контрольной фразы “DEMO”'):
try:
browser.get(BASE_URI)
time.sleep(0.1)
assert browser.find_element(By.XPATH, "//*[contains(text(),'DEMO')]")
allure.attach(browser.get_screenshot_as_png(), name='screenshot', attachment_type=AttachmentType.PNG)
except:
allure.attach(browser.get_screenshot_as_png(), name='error_screen', attachment_type=AttachmentType.PNG)
raise
with allure.step('Шаг 2. Переключение языка интерфейса с английского на русский через селектор в правом верхнем углу → Наличие на странице контрольный фразы "Подключиться к мероприятию по ID”'):
try:
browser.xpath("//*[contains(text(), 'English')]").click()
time.sleep(0.1)
browser.xpath("//*[contains(text(), 'Русский')]").click()
time.sleep(0.1)
assert browser.xpath("//*[contains(text(), 'Подключиться к мероприятию по ID')]")
allure.attach(browser.get_screenshot_as_png(), name='screenshot', attachment_type=AttachmentType.PNG)
except:
allure.attach(browser.get_screenshot_as_png(), name='error_screen', attachment_type=AttachmentType.PNG)
raise
with allure.step('Шаг 3. Клик на кнопку “Подключиться к мероприятию по ID” → Открытие страницы с возможностью ввода id конференции, наличие на странице контрольной фразы “Указав уникальный ID номер мероприятия вы можете подключиться к нему прямо сейчас”'):
try:
browser.xpath("//*[contains(text(), 'Подключиться к мероприятию по ID')]").click()
time.sleep(0.1)
assert browser.xpath("//*[contains(text(), 'Указав уникальный ID номер мероприятия вы можете подключиться к нему прямо сейчас')]")
allure.attach(browser.get_screenshot_as_png(), name='screenshot', attachment_type=AttachmentType.PNG)
except:
allure.attach(browser.get_screenshot_as_png(), name='error_screen', attachment_type=AttachmentType.PNG)
raise
with allure.step('Шаг 4. Ввод ID 929-997-704 и нажатие “Подключиться” → наличие контрольной фразы "Планерка"'):
try:
browser.xpath('//input[@placeholder="ID мероприятия"]').send_keys(f"{IVA_ID}")
time.sleep(0.1)
browser.xpath('//*[@e2e-id="login-page.login-by-id-page.submit-btn"]').click()
assert browser.xpath("//*[contains(text(), 'Планерка')]")
allure.attach(browser.get_screenshot_as_png(), name='screenshot', attachment_type=AttachmentType.PNG)
except:
allure.attach(browser.get_screenshot_as_png(), name='error_screen', attachment_type=AttachmentType.PNG)
raise
Переменные окружения
- Системные значения (read-only)
$.vars.params.projectId
- идентификатор текущего проекта.$.vars.params.projectKey
- API-ключ текущего проекта.$.vars.params.testforgeUri
- текущий домен пространства Monq.
- Пользовательские переменные - можно добавить любое количество пользовательских переменных, которые можно использовать в Задании по следующему шаблону:
$.vars.params.<название переменной>
Для добавления пользовательской переменной:
-
Нажмите кнопку +Добавить переменную
-
Задайте Название переменной
-
Выберите Тип переменной (
String
илиNumber
) -
Задайте