Написать пост

Автоматизированное тестирование: Go или Python?

Какой язык лучше подойдёт для автоматизированного тестирования — Go или Python? Разобрали и разложили по полочкам преимущества и недостатки.

Автоматизированное тестирование: Go или Python?

Популярный Python с большим набором готовых библиотек или быстрорастущий Go с возможностью удобного взаимодействия с gRPC? С экспертами курсов Route 256 от Ozon обсудили особенности автоматизированного тестирования на Go и Python.

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

  1. Преимущества автоматизированного тестирования
  2. Почему разработчики не могут сами покрыть код тестами?
  3. Пирамида тестирования
  4. Особенности Go и Python для автоматизации тестирования
  5. Автотесты на Python для Go-проекта и наоборот
  6. Автоматизированное тестирование на Python или Go?
  7. Что дальше?
  8. Полезные ресурсы по тестированию

Преимущества автоматизированного тестирования

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

Виды автоматизированного тестирования:

  • тестирование интерфейсов с использованием инструментов вроде Selenium;
  • написание end-to-end (e2e) тестов;
  • тесты для проверки модулей и сервисов на уровне кода;
  • Unit-тесты.

Автоматизированное тестирование проверяет не только методы и функции в коде. Существуют библиотеки, которые позволяют, например, взаимодействовать напрямую с браузером — кликать по кнопкам, заполнять формы, делать снимок страницы сайта и сверять с ожидаемым скриншотом.

Автоматизация тестирования имеет смысл практически в любом проекте. По крайней мере, регрессию стоит автоматизировать всегда. Это ускоряет релизы и сокращает time to market*.*Промежуток времени с момента возникновения намерения реализовать новую функцию до её выпуска на реальных пользователей.

Почему разработчики не могут сами покрыть код тестами?

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

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

Пирамида тестирования

Виды тестирования можно разделить по уровням и изобразить с помощью пирамиды. Она показывает количество тестов в зависимости от того, насколько они сложные и ресурсоёмкие. Такая визуализация помогает сгруппировать тесты по типу их назначения или объекту проверки, чтобы оптимально организовать работу автоматизаторов и разработчиков.

Возьмём для примера пирамиду, которую составили специалисты Ozon Tech. Её используют при разработке и тестировании продуктов Ozon.

Автоматизированное тестирование: Go или Python? 1

Как видно из схемы, два нижних блока покрывают unit-тесты. Их делают разработчики после написания блока кода. Тесты позволяют моментально узнать, корректно работает код или нет.

Далее — на этапе компонентных тестов — к разработчикам подключается команда автоматизированного тестирования.

Верхние слои тестирования представляют e2e и UI-тесты. Они проверяют правильность реакции системы на действия конечного пользователя. К таким проверкам относятся, например, тесты, проверяющие ответ системы на заполнение полей ввода или на нажатие кнопок. Визуальные тесты проверяют отображение элементов интерфейса на экране.

Пирамида Ozon Tech показывает соотношение количества тестов к количеству частей продукта, задействованных в том или ином тесте. Отметим, что чем больше сервисов покрывает тестирование, тем больше процесс переходит от разработчиков к тестировщикам.

Что касается языков программирования, то в Ozon Tech тестирование трёх нижних слоёв осуществляют на языке разработки — на Go. Для тестирования нескольких сервисов (четвёртый и пятый слои) используют как Go, так и Python. А то, что связано с UI, тестируют с использованием Python/Typescript и популярных фреймворков (вроде Playwright). Интерфейсы мобильных приложений на Android тестируют на Python и Kotlin, а для iOS выбирают Swift + XCUITest.

Особенности Go и Python для автоматизации тестирования

Особенности использования языка программирования для автотестов складываются из тонкостей самого языка и их библиотек.

Так, в Go все необходимые для тестирования библиотеки идут из «коробки». Создатели Go позаботились о том, чтобы пользователи делали как можно меньше дополнительных действий, и это очевидный плюс языка.

При тестировании на Go можно использовать и сторонние решения, как, например, инструмент для интеграции тестов с Allure, разработанный Ozon Tech.

В Go есть возможность исполнять одни и те же тесты для разного набора данных. Это называется TableDrivenTests. Чтобы его написать, нужно объявить slice структур и после этого в цикле запустить тест:

Ещё Go позволяет гибко настраивать параллельные тесты — нужно просто добавить команду t.Parallel(). Лучше использовать эту команду аккуратно: если тесты исполняются на одной среде, то один тест может повлиять на работу другого.

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

Тестирование на Go отлично подходит для работы с gRPC. Язык изначально писался под многопоточность и взаимодействие с gRPC-протоколами. А вот для взаимодействия с браузером больше подходит Python, поскольку он поставляет библиотеки для решения практически любой задачи.

Python приятнее глазу из-за «синтаксического сахара». В нём уже есть масса готовых решений, поэтому часто, чтобы получить результат, достаточно просто вызвать уже готовую функцию. В Go придётся вручную реализовать эту функцию, чтобы получить тот же самый результат.

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

  • Установить PyTest.
			pip3 install pytest
		
  • Создать файл со следующим содержимым. Ниже — пример как с правильным тестом, так и с тестом, возвращающим ошибку.
			def test_access():
    assert (1, 2, 3) == (1, 2, 3)

def test_fail():
    assert (1, 2, 3) == (3, 2, 1)
		
  • Запустить файл из терминала.
			pytest test_one.py
		
  • Восхититься результатом.

Стоит отметить, что без использования дополнительных библиотек Python довольно медленно выполняет задачи с обработкой большого объёма данных.

Автотесты на Python для Go-проекта и наоборот

Unit-тесты принято писать на том языке, на котором реализована тестируемая функциональность. А вот язык e2e тестов, которые делают запросы и взаимодействуют с приложением, не зависит от того, на каком языке написан сервис, — их можно делать как на Python, так и на Go, Java или JS.

Однако есть «но». Если разработка на проекте ведётся, например, на Go — как в Ozon, то использование этого же языка в автотестах позволяет заранее исключить массу проблем.

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

И если писать автотесты на другом языке, например, на Python, то придётся с нуля генерировать схемы, модели и так далее — а это лишние силы и время.

Автоматизированное тестирование на Python или Go?

Каждый язык программирования имеет свои особенности, и нет единственно верного ответа на вопрос «На чём учиться автоматизировать тестирование?». Всё индивидуально и зависит от того, что именно вы хотите тестировать и от того, насколько комфортно писать код на конкретном языке.

Если разработчик уходит в тестирование и не знает ни Python, ни Go, он с одинаковой скоростью изучит оба этих языка. Возможно, на Go придётся потратить немного больше времени — понять этот язык базово чуть сложнее. Однако впоследствии он даст меньше возможностей ошибиться.

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

Автоматизированное тестирование: Go или Python? 2

Что дальше?

Изучить Go или Python и написать тесты на них достаточно просто. Сложно понять, какой именно тест нужно написать. Поэтому, если вы решили стать QA-инженером, нужно развивать мышление. Зачастую именно этот пункт становится решающим при выборе кандидата на такую должность.

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

  • Предположим, что вы задеплоили ваш продукт. Внезапно выяснилось, что в нём есть баг, который аффектит кучу заказчиков. Вы разобрались в причинах бага и поняли, что нужно сделать фикс в ядре вашей системы. Фикс готов, полная регрессия займёт 24 часа, но у вас есть только 8. Как вы гарантируете заказчикам, что продукт после фикса будет готов к релизу?
  • Вы тестируете интернет-магазин, который продаёт тетради. В заказе нужно указать их количество (максимум 1 тыс. штук). В зависимости от количества тетрадей меняется их цена. С каждой новой сотней она уменьшается на 1 рубль:1–100 — 15 рублей за штуку.101–200 — 14 рублей за штуку.и так далее.

Используя тест-дизайн, опишите все необходимые тест-кейсы, которые будут максимально покрывать описанную функциональность.

  • Сформулируйте негативные сценарии для POST-запроса, который создаёт нового пользователя.
  • Вы тестируете логин-форму, вводите логин и пароль, нажимаете кнопку логин и ничего не происходит. Ваши действия?
  • Что делать, если проект уже начался, а QA-инженер начал работать на нём, только когда начали внедряться бизнес-фичи? Какие этапы тестирования теперь нужно наверстать и нужно ли это? Как это сделать максимально грамотно без ущерба для загрузки по тестированию новых фич? Какие риски имеет позднее вовлечение QA-инженера в разработку?

Полезные ресурсы по тестированию

А чтобы обучение тестированию на Python или Go было максимально эффективным, следует запастись полезными ресурсами.

Книги

Сэм Ньюмен, «Создание микросервисов»

Сэм Ньюмен, «Создание микросервисов»

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

Крис Ричардсон, «Микросервисы. Паттерны разработки и рефакторинга»

Крис Ричардсон, «Микросервисы. Паттерны разработки и рефакторинга»

Хотите узнать, какие проблемы возникают при переезде с монолитной архитектуры? Читайте эту книгу. Заодно познакомитесь с концепциями автоматического тестирования микросервисов и с методиками, которые позволяют писать простые, быстрые, но в то же время эффективные тесты.

YouTube-каналы

  1. Тестирование. «Яндекс» публикует записи с конференций и митапов по тестированию.
  2. COMAQA. На этом канале собраны видео с конференций сообщества автоматизаторов. Материалы регулярно обновляются.

Подкасты

  1. Radio QA ведётся на русском языке. Здесь собраны обзоры трендов, интервью и полезные беседы на около-айтишные темы.
  2. Test Talks — подкаст о тестировании на английском.

Бесплатный курс с ментором

Если вам больше подходит формат обучения с ментором и хочется подключиться к живому русскоязычному комьюнити, попробуйте бесплатные курсы Route 256 от Ozon по автоматизированному тестированию на Go и Python.

При поддержке опытных разработчиков вы научитесь писать тесты с использованием HTTP, gRPC и прокачаете знания в PostgreSQL. А также разберётесь со встраиванием тестов в пайплайны CI/CD, обсудите подготовку тестовых данных и Mock-объектов. В факультативной части курса вы изучите продвинутые темы: нагрузочное и другие виды тестирования, очереди, observability, Kubernetes, метрики.

Учиться вместе с Ozon Tech

Реклама ООО «Озон технологии»

Следите за новыми постами
Следите за новыми постами по любимым темам
11К открытий12К показов