Автотесты: от первого автотеста до масштабного проекта. Мой набор инструментов для масштабирования

от автора

Привет, Хабр! Меня зовут Максим, я инженер по автоматизации тестирования в компании 1221СИСТЕМС и хотел бы поделиться своим опытом и рассказать путь настройки автотестов от минимального рабочего состояния до масштабного проекта. Поделюсь тем, какие инструменты я внедрил для улучшения процессов на нашем проекте.

Это статья для тех, у кого уже есть:

— Базовое понимание python

— Понимание паттернов автоматизации (если пока нет – рекомендую ознакомиться с этой статьей https://habr.com/ru/articles/777262/)
Рекомендую использовать из неё хотя бы следующие паттерны:

  1. Page Object Pattern – для каждой страницы тестируемого приложения создаётся отдельный объект. Сам тест ничего не знает о веб-элементах, он обращается к определённому методу, который работает с нужной страницей.

  2. Steps Pattern – тест разбивается на отдельные шаги, для удобства читаемости и дальнейшей поддержки.

  3. Паттерн проверок (Assert/Checker) – это сравнение ожидаемого и фактического результата, у каждого теста он должен быть.

Для начала, попробуем создать свой первый API / WEB автотест на Python, множество примеров которых можно найти на просторах интернета. В целом, это несложно, можно осилить за полчаса-час.

В нашем примере тест API отправляет GET запрос с ответом 200, а WEB-тест открывает Google-поиск и вписывает в поисковую строку слово «привет».

API Тест

# В блоке импорта добавляем библиотеку requests import requests  def test_api():     # Объявляем заголовки     headers = {         'Accept': 'application/json',         'Content-Type': 'application/json'     }     # Объявляем url, на который будем отправлять запрос. В данном случае, используем тестовый сервер.     url = 'https://petstore.swagger.io/v2/user/login'     # Указываем параметры для будущего запроса на авторизацию     params = {         'username': 'kot',         'password': 'kot'     }     # Производим авторизацию на сайте     response = requests.get(url=url, headers=headers, params=params)     # Сравниваем фактический код ответа с ожидаемым     assert response.status_code == 200

WEB Тест

# В блоке импорта добавляем библиотеки from selenium.webdriver.chrome.service import Service import time from selenium import webdriver from selenium.webdriver.common.by import By  options = webdriver.ChromeOptions() #TODO В начале нужно скачать chromedriver для вашей версии Chrome и ниже указать путь до него service = Service("chromedriver.exe") # Объявляем url, который будем открывать url = "https://www.google.com/" driver = webdriver.Chrome(service=service)  try:     # Открываем заданный сайт     driver.get(url=url)     # Ждем 1 секунду, чтобы страница прогрузилась     time.sleep(1)     # Впишем в поисковую строку слово «привет»     element = driver.find_element(By.XPATH, '//textarea[@title="Поиск"]')     element.send_keys('привет')  finally:     time.sleep(10)     print('Все успешно')     driver.close()     driver.quit() 

В чем проблема таких тестов?

Их очень сложно поддерживать и масштабировать.

Что важно для поддержания тестов и их масштабирования?

  • Использование единого кода в разных местах;

  • При этом изменения в код должны вноситься только в одном месте.

Например, у нас есть 2 теста: первый заходит в поисковик Google и вводит запрос в поисковую строку, а второй – в поисковик Яндекс и делает то же самое. Мы можем вынести метод перехода на страницу (без указания конкретного url) в отдельный файл, на который будем ссылаться в дальнейшем.

Тесты, написанные таким образом, будет легко поддерживать и масштабировать.

Рассмотрим инструменты, которые помогают улучшить процессы автоматизации на проекте.

  1. Перед написанием автотестов продумывайте все связи и выстраивайте архитектуру.

    Проект автоматизации – это такой же код, как и в разработке, поэтому чем позже вы вносите изменения, тем больше они будут стоить денег и времени. Конечно, всё сразу предусмотреть невозможно, но с каждым проектом вы набираетесь опыта, который сможете привносить в новые задачи.

  2. Создавайте скрипты подготовки данных для ваших автотестов.

    Такие скрипты помогают избежать непредвиденных ошибок и облегчают жизнь тестировщикам при разборе упавших тестов.

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

    При попытке разобраться, почему это произошло, тестировщики порой тратят несколько часов и не могут понять, в чём дело. Решение этой проблемы – создать скрипты для актуализации / создания сущностей, которые будут использовать ваши автотесты. Такой скрипт ищет тестового пользователя по определенному параметру. Если пользователь был изменён, скрипт откатит его к дефолтным значениям, а если не найдёт пользователя совсем – создаст нового с дефолтными данными.

    Такие скрипты нужно запускать всегда перед основными тестами. Приведение пользователей к дефолтным значениям можно делать через API, то есть скрипты пробегут быстро, а итоговая стабильность ваших тестов вырастет.

  3. Используйте фреймворк Allure

    От любого автоматизатора рано или поздно потребуют отчета о прохождении автотестов. Возникает вопрос: как их представить? Не показывать же код и результаты в IDEA? =)

    В этом нам поможет Allure. Это фреймворк для формирования и визуализации отчетов о прохождении автотестов. Я не буду погружать вас в технические подробности, но если кратко, для его настройки достаточно подключить зависимости и импортировать сам Allure в файл, в котором вы работаете.

    Моя задача в этой статье – показать, что такой инструмент есть и кратко рассказать о его возможностях.

    1. Аннотация step для описания шагов. Рекомендую использовать её для описания любого действия. Эта информация будет подтягиваться в Allure, и будет легче найти место, где упали тесты.

      Пример кода с использованием step:

      @allure.step('Ввести текст в поле поиска') def fill_text_in_search(self, locator, text):   web_element = self.find_element(locator)   web_element.send_keys(text)   return self
      Пример отображение шагов в Allure

      Пример отображение шагов в Allure

    2. Аннотация link. Позволяет прикрепить полезные ссылки для быстрого доступа.

      Пример кода с использованием link

      @allure.link('https://www.google.com/') def test_web(self):   self.APP.habr.go_to_page('https://www.google.com/')   self.APP.habr.fill_text_in_search('Привет Google')
      Пример отображение ссылки в Allure

      Пример отображение ссылки в Allure

    3. Аннотация screenshot. Без неё не должен обходиться ни один веб-тест, так как именно она показывает нам, что было на экране в момент падения / успешного завершения. В случае падения по такому скриншоту будет гораздо легче определить, в чем заключалась проблема.

      Для подключения этой аннотации в Импортах нужно указать следующий строку:

      from allure_commons.types import AttachmentType

      А также код самого скриншота, чтобы прикрепить его в дальнейшем к Allure:

      allure.attach(self.GetDriver().get_screenshot_as_png(),               name="Screenshot", attachment_type=AttachmentType.PNG)
      Пример отображение скриншота в Allure

      Пример отображение скриншота в Allure
  4. Используйте маркеры.

    Mark — aннотация pytest. Маркеры позволяют разбивать ваши тесты по группам, блокам функционала или просто WEB / API.

    Это может быть полезно, когда нужно срочно протестировать блок, в котором вносились изменения, или прогнать все тесты с высоким приоритетом.

    @allure.title('Тест для Habr') @allure.mark.ApiTest @allure.mark.Account @allure.mark.CRITICAL   def test(self):     pass

    Главное, не забудьте вынести ваши маркеры в файл pytest.ini
    Пример ниже:

    markers =   Account   ApiTest   #Приоритет   CRITICAL
  5. Используйте системы тестовой документации.

    Test IT – одна из таких систем. Конечно, есть и другие, но покажу на её примере, так как мы в работе используем именно её.

    Хорошим тоном считается, если у вас есть система, в которой хранится вся тестовая документация. Через такую систему вы можете создавать тестовые планы или просто объединить скоуп тестов для определенной проверки. Для подключения проекта к системе Test IT вам необходимо вписать в код буквально 6 параметров в отдельном файле connection_config.ini:

    • url

    • privatetoken

    • projectID

    • configurationID

    • adapterMode

    • automaticUpdationLinksToTestCases

    К примеру, если в терминале вашей IDEA запустить команду «pytest —testit», то все ваши тесты запустятся, а результаты отобразятся в Test IT.

    Пример отображения автотестов в Test IT

    Пример отображения автотестов в Test IT

    Через Test IT можно:

    • Классифицировать ошибки падений;

    • Формировать список упавших в прогоне автотестов и запускать их заново;

    • Связывать автотесты с тест-кейсами;

    И еще много разных возможностей. Подробнее – в документации Test IT.

    Дисклеймер! Test IT — платный инструмент. В данной статье я делюсь своим опытом и не рекламирую никакие программы.

  6. Используйте CI / CD инструменты

    Ваши тесты должны запускаться независимо и удалённо (не на локальной машине / сервисе). Я рекомендую ознакомиться с CI / CD инструментами, позволяющими это сделать, заранее, так как у них может отличаться функционал и стоимость.

    Если чуть углубиться, вам нужно указать данные вашего репозитория (скачать код проекта), указать время запуска (удобное для вас) и другие необходимые вам параметры. Для подробностей – изучите сам продукт.

    Могут использоваться следующие варианты:

    • Jenkins

    • GitLab

    • и другие

    В идеале стоит разносить время запуска автотестов с рабочими часами, чтобы нагрузка на сервер была минимальной.

Резюме

Создание любого проекта с нуля – это непростой процесс, и автоматизатор всегда будет сталкиваться со сложностями и проблемами. Но, скорее всего, кто-то уже натыкался на эти проблемы и даже нашёл варианты решения как для проблемы в целом, так и для улучшения процессов.

Если вы хотите масштабировать свой проект автоматизации, рекомендую пользоваться инструментами, которые я описал выше ­– мне они сильно облегчили работу, а где-то просто помогли избежать многих неприятностей.

Хочется акцентировать внимание, что есть аналоги указанных выше фреймворков. Может быть, это не идеальная комбинация или выбор, но эта хорошая совокупность инструментов, которая – я проверил! – работает и даёт результат.


ссылка на оригинал статьи https://habr.com/ru/articles/840594/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *