Важный этап разработки любого ИТ-продукта – это тестирование. Оно помогает определить, соответствует ли программное обеспечение требованиям, все ли элементы приложения работают как надо и если есть проблемы в первых двух случаях, что нужно сделать, чтобы их исправить. По сути, тестирование – это репетиция перед согласованием с клиентом и выходом в продакшн.
Проверить, качественный ли продукт и соответствует ли он ожиданиям, можно вручную или с помощью автоматизации тестирования. В первом случае QA-инженер воспроизводит действия пользователя и фиксируют ошибки, если таковые имеются.
Во втором случае запуск, анализ, выдача результата происходят автоматически, с использованием ПО. ИТ-специалист лишь обрабатывает собранную информацию. Поэтому автоматизация тестирования — это своего рода инструмент оптимизации процессов.
Рассказываю подробнее про автоматизацию тестирования в статье.
Содержание
Как работает автоматизированное тестирование
Автоматизация тестирования имеет четкий алгоритм действий:
-
Сначала программист берет часть тестируемого приложения и предполагает, какие данные решение должно вернуть, если туда попадут другие данные.
-
Потом специалист собирает комбинации информации на «вход» и «выход», которые будут в идеальной ситуации. Эти данные нужны ему для автоматизированного тестирования.
-
Затем программист намеренно добавляет в тест неправильные данные и ответ, который ожидается в этом случае.
-
После того, как проверочные сведения готовы, разработчик «упаковывает» эти данные в код, пишет тест. Эта программа будет «наблюдать» за тем, как продукт реагирует на разную информацию.
-
В зависимости от стадии проекта специалисты проверяют результаты автоматизированного тестирования и резюмируют, правильно ли работает тот или иной элемент приложения.
Каким бывает автоматизированное тестирование
Автотесты можно условно разделить на три типа: интеграционные (API), модульные (Component+Unit) и системные (end-to-end, UI/API).
Цель модульных тестов – убедиться в исправности отдельно взятых функций в рамках одного модуля, из которых построено программное обеспечение. Как правило, такие проверки занимают считанные секунды. Системные тесты нужны для проверки приложения в целом. Их задача — убедиться, что модули решения соединены между собой правильно. Также с помощью системных тестов проверяют функции регистрации, биллинга и оформления заказа – части приложения, которые ни в коем случае не должны сломаться. Длительность таких тестов – от десятка секунд до нескольких минут. Нужно только запустить решение, загрузить его в эмулятор или веб-браузер и «пощёлкать» сценарии.
Интеграционные тесты нужны для проверки функциональности, которую невозможно сделать с помощью модульного теста, а использовать системный – излишне.
Вот так выглядит пирамида тестирования, визуальная метафора с сегментацией по уровню масштаба задачи. Чем выше автотест в этой пирамиде, тем он дороже в разработке и поддержке.
Чтобы ИТ-решение имело быструю, гибкую тестовую базу, нужно, чтобы её преобладающую часть составляли модульные тесты, далее – интеграционные, и самая маленькая доля – системные.
Как это работает в действительности? Представьте, что вам нужно добавить функцию комментариев к изображениям. Если проверите всё только системными тестами, вы получите очень медленную тестовую базу: проверка любой правки в коде будет занимать минуты. И наоборот, если протестируете только модульными, увидите, что из-за ошибки на стыке модулей нужная вам функция не работает, хотя тесты проходят.
Плюсы автоматизированного тестирования
Автоматизация тестирования имеет важные для разработчиков преимуществ. Их применение помогает быстро решать сразу несколько задач.
-
Идентификация ошибок в коде на первых этапах разработки. Команда может сразу устранить эти проблемы без чрезмерного расхода ресурсов.
-
Локализация ошибок. «Низкоуровневое» автоматизированное тестирование помогает как можно точнее указать на причину проблемы.
-
Высокая скорость разработки продуктов. Программист может написать код одного из компонентов приложения и проверить корректность его работы при отсутствии остальных элементов системы, например, UI.
-
Наличие структуры. Если автоматизация тестирования корректна и в актуальном состоянии, у разработчиков всегда исчерпывающая информация о покрытом тестами коде. В дальнейшем новички и команда в целом лучше понимают, что было на том или ином этапе разработки спустя несколько месяцев.
Особенности автоматизированного тестирования
Ручное тестирование в некоторых компаниях и правда перестаёт существовать и остаётся только в тонкой прослойке исследовательского тестирования. Однако, при переходе на автоматизированное тестирование, нужно иметь ввиду некоторые моменты:
-
Выбор тестов. Чтобы автоматизированное тестирование прошло успешно, сначала следует определиться, что именно вы будете проверять. Ошибка на этом этапе может испортить ход всех дальнейших работ.
-
Ресурсы на разработку. Поскольку автоматизация тестирования — это ПО, на его написание тоже нужны специалисты и время.
-
Поддержка. Автоматизированное тестирование нуждается в регулярной актуализации. QA-инженеры должны следить за корректностью тестируемых параметров, версиями софта и многим другим.
-
Наличие навыков программирования. Несмотря на то, что на рынке есть инструменты, которые упрощают работу тестировщика, без опыта в программировании обойтись по-прежнему сложно.
Что выбрать: ручное или автоматизированное тестирование
Ручное тестирование будет лучшим решением, если вы:
-
еще в процессе осознания функциональности вашего продукта;
-
нуждаетесь в проверке юзабилити и верстки;
-
хотите локализовать и описывать возникающие проблемы;
-
быстро проводите ручные тесты, а их количество совсем небольшое;
-
не обладаете нужными бюджетом и временем на автоматизацию тестирования.
Автоматизированное тестирование рекомендуется к внедрению в случаях, когда у вас:
-
много ручных тестов и нет времени на постоянную проверку всего регресса;
-
проходит много времени между обнаружением ошибки и ее исправлением;
-
подготовка к тестированию – формирование данных и настройка конфигурации – требует много времени;
-
требуется поддержка старых версий софта – нужно проверять новые сервис-паки и патчи;
-
нет уверенности, что новый код не сломает результат работы других разработчиков.
Безусловно, у автоматизированного тестирования есть нюансы. Они требуют время специалистов на написание и поддержку. А если внедрение прошло некорректно, автоматизация тестирования может даже принести больше вреда, чем пользы. Поэтому расскажем, как сделать это грамотно.
Как автоматизировать тестирование
Автоматизировав тестирование в нескольких десятках проектов, мы сформировали следующие рекомендации, которые сделают процесс проверки приложений корректным и значительно облегчат работу всей команды.
1. В первую очередь определите цели автоматизации тестирования. Одни хотят оптимизировать издержки, другие – сократить стоимость исправления ошибки, а кто-то – повысить охват элементов тестирования. Формулирование приоритетов поможет вам понять, что именно нужно автоматизировать и к чему приступить в первую очередь.
2. Рассчитывайте окупаемость вложений в автоматизацию тестирования, фиксируйте метрики и старайтесь делать это регулярно. Цель – определить, действительно ли вам нужна автоматизация этого процесса, и необходимость в этом отпала, корректировать план работ.
3. Подумайте, что вам нужно автоматизировать, а что – нет. Подсчеты помогут понять, возможно, экономически выгоднее поручить тестирование продуктов команде на аутсорсе, если объем работ слишком мал для наемного специалиста.
4. Пропишите, что вы ожидаете получать в логах. Это поможет сформировать у вас и вашей команды доверие к инструменту и понимание его полезности в конкретном проекте.
5. Ищите баланс между минимальным и максимальным объемами данных, чтобы автоматизация тестирования не тратила ваши ресурсы и приносила как можно больше пользы.
6. Позаботьтесь, чтобы вся проектная команда понимала, как работает автоматизация тестирования. Это важно в случае, если автотест “упадет” и нужно будет перепроверить вручную. Для таких случаях пропишите четкую инструкцию, а если работаете с командой на аутсорсинге, запросите такой пошаговый алгоритм действий.
7. Автоматизированное тестирование – это такой же софт, как и прочие ИТ-продукты. Поэтому нанимайте разработчиков, в чьей квалификации вы уверены – от их профессионализма зависит эффективность приложения, его архитектура и то, насколько легко его можно будет поддерживать в актуальном состоянии.
8. И самое главное – придерживайтесь пирамиды тестирования. Разработайте побольше низкоуровневых автотестов и буквально считанное количество UI.
Как выбрать инструмент автоматизации
Рынок решений для автоматизированного тестирования очень широк, и у каждого своя направленность. От правильности выбранного инструмента зависит результат: он может быть провальным или, наоборот, может стать прорывом. Вот несколько важных рекомендаций, которые помогут определиться с ИТ-решением.
-
Поддержка нескольких приложений. Неплохо, если инструмент поддерживает возможность тестирования в большинстве известных браузеров, операционных систем и мобильных устройств.
-
Простота использования. Он должен быть интуитивно понятным и удобным для разных специалистов, а саму автоматизацию тестирования – простой в написании и действии на нескольких проектах.
-
Наличие отчетности. При выборе инструмента важно проверить, сколько автотестов проведено, какие успешны, а какие – нет, состояние автоматизированных пакетов и прочее. И, конечно, важна функция экспорта результатов из системы.
-
Скорость. Продукты становятся сложнее, а значит, командам важна скорость проведения автоматизированного тестирования.
-
Бесшовная интеграция CI/CD. Этот пункт приобрел особую важность с ростом популярности гибких процессов разработки (например, Devops). Поэтому , чтобы убедиться в работоспособности критически важных функций ИТ-продукта, программисты проводят автоматизированное тестирование при каждом изменении кода. И интеграция помогает это обеспечить.
Популярные инструменты автоматизированного тестирования
А теперь расскажем о наиболее эффективных решениях для автоматических тестов, которые успешно зарекомендовали себя в среде разработчиков.
Selenium
-
Подходит для QA-инженеров c продвинутыми навыками программирования и написания скриптов.
-
Решение гибкое, и в этом оно превосходит большинство инструментов автоматизации тестирования.
-
Можно писать скрипты на нескольких языках: Java, PHP, C#, RubyPython, Groovy, Python, Ruby, Perl.
-
Работает в самых известных операционных системах (Windows, Linux, Mac) и браузерах.
-
Основной недостаток системы – необходимость тратить много времени на создание фреймворков и библиотек.
SoapUI
-
Не подходит для автоматизированного тестирования мобильных или веб-приложений – идеален для API и сервисов.
-
Имеет развитую функциональность, которая существенно упрощает работу разработчиков. Например, возможность генерировать тесты обычным перетаскиванием, использовать файлы и базы данных, повторно применять скрипты и проводить асинхронное тестирование.
Postman
- Прекрасно подходит для разработки и тестирования API. Имеет широкую функциональность для документирования, отладки, публикации.
- Можно пользоваться в формате расширения для браузера или как самостоятельным приложением на наиболее популярных ОС.
- Имеет простой и удобный интерфейс.
- Поддерживает исследовательское и автоматизированное тестирования.
Apache JMeter
-
Имеет открытый исходный код.
-
Позволят протестировать нагрузку и производительность приложений. Подходит для тестирования API и сервисов.
-
Поддерживает CSV-файлы, которые нужны для установки значений для параметров API.
-
Легко интегрируется с инструментами CI. Поэтому часто используется программистами в качестве компонента цепочки решений DevOps и CI.
-
Есть функция перезаписи результатов автоматизированного тестирования.
Cypress
-
Относительно новый инструмент тестирования, но уже так сильно любимый многими QA-инженерами и разработчиками.
-
Имеет открытый исходный код.
-
С его помощью можно протестировать все, что работает в браузере.
-
Хоть тесты системы созданы на JavaScript, работа с командами интуитивно понятна любому программисту.
-
Удобно использовать для всех видов тестирования.
Protractor
-
Это фреймворк, который создан с учетом требований к ИТ-продуктам с поддержкой Angular JS. При этом он прекрасно работает и с non-Angular JS приложениями, что дает ему значительные преимущества перед конкурентными инструментами.
-
Подходит для проверки веб-приложений, которые сочетают в себе технологии Node.js, Selenium Webdriver, Jasmine и многие другие.
Puppeteer
-
Это библиотека Node.js с открытым исходным кодом. Разработка Google, поэтому инструмент поддерживает любые действия в Google Chrome.
-
А для тех, кто не работает с Chrome stalwarts, есть хорошие новости: Mozilla тоже использует Puppeteer в Firefox.
Appium
-
Инструмент с открытым исходным кодом.
-
Предназначен для тестирования мобильных приложений для iOS и Android.
-
Универсален: автоматизирует приложение с любого языка и фреймворка.
-
Не требует SDK или перекомпиляции приложения.
WebdriverIO
-
Имеет собственный подход в использовании возможностей Selenium WebDriver.
-
Обладает читаемым и очень простым синтаксисом.
-
Имеет гибкую и легко расширяемую библиотеку для Node.js.
-
У решения есть активное сообщество разработчиков, которые пишут расширения и плагины.
Robot Framework
-
Keyword-driven фреймворк
-
Можно загрузить различные библиотеки, например, SeleniumLibrary.
-
Поддерживает веб и мобайл: работает с большинством известных браузеров и устройствами на Android и iOS.
-
Есть возможность задавать тэги автоматизированным тестам.
-
Автоматическое создание отчетов, без дополнительной команды. Более того, можно объединить результаты нескольких прогонов.
***
Автоматизация тестирования – важный этап развития команд разработки, который позволяет улучшать качество создаваемых ИТ-продуктов для конечных потребителей. Бизнес в целом ощущает на себе преимущества автоматизации: снижение финансовых затрат, сведение человеческого фактора к нулю, рост производительности труда.
А если вы ещё не до конца определились, автоматизировать ли тестирование у себя, напишите нам на адрес omni@korusconsulting.ru или заполните форму ниже, и мы посчитаем для вас все за и против.