Автоматизация тестирования на проектах: роль и результаты внедрения 8 Автоматизация тестирования на проектах: роль и результаты внедрения 9 Автоматизация тестирования на проектах: роль и результаты внедрения 10

Автоматизация тестирования на больших проектах: почему и как мы ее проводим

#Бизнес #Разработка

До выпуска "в люди" любой программный продукт (сайт, приложение) проходит долгий путь проверок и доработок, пока он на 100% не будет отвечать ожиданиям пользователей. Проверка качества ПО, соответствия заявленных к нему требований и реальной функциональности, поиск и исправление ошибок (багов) и устранение дефектов — эти и другие задачи решает тестирование. Оно нужно как самим разработчикам, чтобы увидеть готовность продукта к рынку, так и заказчикам — убедиться, что бюджет потрачен не зря.

Разница между ручным и автоматизированным тестированием

Ручное тестирование (manual testing) — классический метод оценки качества ПО, когда тест-кейсы запускаются без использования средств автоматизации: тестировщики вручную проходят тестовые сценарии и составляют отчеты об ошибках. Этот процесс довольно трудоемкий и продолжительный, без сочетания с автотестами используется только на небольших проектах. 

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

Чтобы говорить о автоматизации тестирования предметно, рассмотрим примеры ее внедрения в наших проектах: системе управления школой дистанционного обучения (на базе Source LMS), healthcare-проекте и большом онлайн-магазине.  

Для чего нужны автотесты на больших проектах? Наш опыт

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

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

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

Что входит в критический и некритический функционал проекта

Критические сценарии — сценарии, ошибки в работе которых принесут клиенту убыток, помешают получить ожидаемую прибыль. Например, для e-commerce проектов это процесс поиска и покупки товара, регистрация и авторизация. 

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

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

contact Evergreen

Нужно ли тестировать некритические сценарии? 

Покрытие автотестами любых сценариев, вплоть до целого проекта, возможно, но не всегда целесообразно.  

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

Когда мы проводим автотестирование?

Проверки с помощью автотестов проводятся перед релизами, а также планово по расписанию: 

  • на healthcare-проекте автотесты запускаются ежедневно в 3 часа ночи (время выбрали эмпирически);
  • для проекта онлайн-школы запуск тестов обязательно осуществляется в ручном режиме на тестовой среде (до релиза), а потом на продакшене (после релиза). Специфика проекта и характер релизов не требуют постоянного мониторинга — тесты не используются в качестве поддержки;
  • на проекте онлайн-магазина автотесты интегрированы во все процессы: запуск до релиза на тестовой среде, на продакшене после релиза, периодический запуск в качестве мониторинга.

Для всех проектов возможен запуск тестов вручную путем выполнения скрипта из консоли или с использованием интерфейса Gitlab.  

Техстек и выбор текущих решений

Репозитории с автотестами для всех проектов лежат в Gitlab, а в качестве основного стека был выбран Playwright + Jest. У такого варианта есть ряд преимуществ: 

  • большой и хорошо поддерживаемый набор встроенных инструментов позволяет быстро писать тесты без необходимости создавать перегруженную архитектуру фреймворка;
  • тесты разворачиваются на необходимой среде с минимальными затратами времени, официальный Docker image;
  • предоставляет список доступных устройств и браузеров, который легко конфигурируется и полностью покрывает нужды на проектах;
  • поддержка для автоматических тестов требуется редко и не занимает много времени;
  • Playwright быстро развивается, используется во многих компаниях и хорошо поддерживается.

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

На проекте интернет-магазина опробован стек Java + Selenium. Наш отдел тестирования остановился на нем, чтобы расширить используемые технологии в автотестах и создать более сложный по архитектуре фреймворк. Этот стек зарекомендовал себя при написании самых разнообразных тестов и отлично подходит для проверки end-to-end сценариев. 

При создании автотестов для healthcare-портала выбор пал на связку Python + Selenium. Это первый проект, на котором появилась автоматизация тестирования в компании, и выбор языка программирования и фреймворка именно такой в силу экспертизы команд разработки, тестирования и DevOps.

Как проходит автотестирование

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

Сам процесс автоматизации тестирования обычно происходит так: 

  • запуск (ручной или автоматический по расписанию) со стандартными/выбранными параметрами;
  • выполнение теста: автоматически пошагово выполняются сценарии согласно тестовой документации;
  • получение результатов теста;
  • анализ полученных результатов. 

На нашем healthcare-проекте тесты перезапускаются автоматически, если на одном из шагов произошла ошибка.

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

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

Пример автоматического прохождения урока в онлайн-школе:

1. Автотест запускается вручную или автоматически по расписанию на сервере.

2. Автоматически открывается браузер, выбранный в скрипте для запуска (любой, например, Chromium). При запуске по расписанию с сервера автотест работает в headless-режиме.

3. Скрипт автоматически вводит адрес сайта, попадает на страницу авторизации и переходит в кабинет школьника.

4. Согласно выбранным параметрам скрипт переходит в выбранный тест. Цель — пройти все задания и набрать максимальный балл. Для контроля результаты сверяются с данными из базы, к которой скрипт также подключается автоматически.

5. Скрипт проходит тест без вмешательства человека, проставляя правильные ответы, заранее полученные из базы.

6. Когда урок пройден, на страницу выводится оценка "автостудента". Ожидаемый результат — 12/12 баллов.

7. После окончания теста окно браузера автоматически закрывается, а информация выводится в консоли:

  • результат PASS или FAILED;
  • тип браузера;
  • количество пройденных и запущенных тестов (в примере — 1);
  • время прохождения.

автотест прохождение урока

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

Автотест проверки работы калькулятора стоимости анализов на healthcare-портале:

1. Запускается скрипт автотеста, после чего автоматически откроется браузер.

2. На главной странице сайта автоматически вводятся регистрационные данные для входа в личный кабинет.

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

4. Выбор нескольких анализов в корзину, расчет оптимальных тарифов. На экран выводятся подобранные скидки и выбранные предложения.

5. Действия повторяются для других случайно выбранных городов.

автотест калькулятор анализов

Результаты прохождения выводятся на экран или отправляются на почту. 

Результаты после внедрения автотестов на проектах:

Сократили время на тестирование

По проекту онлайн-школы время тестирования сократилось в среднем на 20%: 

  • без автотестов прохождение кейса вручную занимает от 15 до 30 минут, еще 10-15 минут — подготовка тестовых данных (в случае ошибки кейс придется проходить заново);
  • с автотестами кейс выполняется за 1 минуту, на запуск и просмотр результатов уходит 10 секунд. Не нужно готовить тестовые данные, что экономит время и исключает ошибки при подготовке тестов.

На healthcare-проекте до автоматизации ручное выполнение тестовых сценариев занимало 30-40 минут и было обязательным при каждом цикле тестирования. Автотесты же полностью отрабатывают за 10-12 минут.

Улучшили тестовое покрытие   

При тестировании функционала онлайн-школы часть кейсов все равно нужно выполнять вручную. Однако кейс с автоматизацией покрывает в среднем 15-20% всего тестирования для большинства релизов. В редких случаях (при отсутствии изменений в модулях, не покрытых автотестами) этот показатель может доходить до 60%.

Разгрузили команду

На healthcare-проекте автотесты сократили время на тестирование на 99% — тестировщик привлекается на проект крайне редко, и если привлекается, проверяет результаты выполнения тестов. 

Кроме этого автотесты позволяют отслеживать состояние системы, получать нотификации о проблемах для клиента и для нас. Так что со стороны DevOps на поддержку требуется минимальное количество времени — привлекаются только, если тесты падают несколько раз.

Постоянно мониторим состояние системы

Еще один плюс — автоматический перезапуск тестов, если на каком-то шаге произошел сбой. Благодаря этому удается исключить “ложные” падения, когда система работает нормально, но произошел кратковременный сбой, который не повлиял на работу сайта, но помешал автотестам корректно выполниться. Внутренняя система нотификации позволяет всегда знать, что прод рабочий, узнать о проблеме и быстро на нее среагировать.

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

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

25.02.2021
Используемые в статье картинки взяты из открытых источников и используются как иллюстрации.
Хотите обсудить ваш проект или заказать разработку?
Отправить
Цей сайт є українською мовою. Ви можете переключити мову у меню, або зробити це зараз.