Внедрение автоматизированных тестов, которые тестируют всё приложение, является сложной задачей. От выбора уровней для проверки (API, UI или оба) до управления тестовыми данными и подбора подходящей библиотеки для работы. Основываясь на своем опыте, я подготовил руководство по внедрению автоматизации в ваш проект. Какие аспекты следует учитывать?
Понять характер вашего проекта
Включает ли он API тестирование?
Включает ли он UI тестирование?
Есть ли у него мобильное приложение?
Как много логики заложено в мобильном приложении?
Взаимодействуют ли между собой несколько мобильных устройств?
Есть ли внешние зависимости, которые нужно мокировать?
Выясните архитектуру кода самого проекта. Проверьте, можете ли вы применить некоторые принципы к архитектуре кода ваших автоматизированных тестов.
Найдите документацию и проверьте ее во время планирования разработки автоматизации тестирования.
Понять будущее вашего проекта
Если на ближайшие недели запланирована работа по рефакторингу, лучше сделать акцент на API или UI тесты, которые, как правило, относятся к тестированию методом черного ящика. Инвестировать время в unit-тесты для классов, которые наверняка будут изменены в будущем - напрасная трата усилий.
Планируется ли заказчиком работа, в которой будет использован определенный вид тестирования? Подумайте об этом, чтобы повысить качество разработки.
Определить места, которые больше всего нуждаются в тестировании
Определите наиболее важные пути и элементы: Core-Domain (концепция Domain-driven design).
Поговорите с менеджером проекта, тестировщиками и разработчиками, чтобы выяснить важнейшие элементы с их точки зрения.
Проанализируйте ошибки, найденные за последние месяцы.
Выясните, есть ли у кого-нибудь в команде опыт автоматизации тестирования.
Изучить, какой вид автоматизации тестирования принесет наибольшую выгоду с учетом стоимости и времени разработки
Это определяется уравнением, состоящим из нескольких элементов:
Какова текущая форма вашей пирамиды тестирования?
Сколько энергии мы хотим потратить на автоматизацию?
Каковы знания по автоматизации тестирования в команде?
Какую область мы должны охватить?
Как много мы должны/нам нужно мокировать?
Есть ли у нас приемлемая рабочая среда для выполнения тестов?
Убедиться, что ваша автоматизация тестирования понятна бизнесу
Чем “прозрачнее” тесты, результаты тестирования, тестовые данные, тем больше желания у бизнеса приложить усилия для расширения автоматизации тестирования.
При каждом удобном случае подчеркивайте ошибки, обнаруженные автоматизацией тестирования.
Уделять внимание данным тестирования с первого дня
Полагайтесь на статические данные тестирования как можно больше, потому что так легче подготовить, отладить и повторить тест вручную.
Статические данные + удаление данных проще реализовать, чем динамическую генерацию данных (но это зависит от характеристик системы).
Рассмотреть технические аспекты
Реализуйте тесты так, чтобы их можно было выполнять параллельно.
Сделайте тесты независимыми, легко запускаемыми, самостоятельными.
Приветствуются очистка данных, сброс базы данных.
Не переносить подход unit-тестов на автоматизированные тесты
Автоматизированные тесты нуждаются во фреймворке, настройке и правильной разработке. Структурированный и хорошо выстроенный набор классов и модулей является обязательным условием.
Вызвать у разработчиков желание выполнять и расширять тестирование
Хорошей практикой считается делать тесты удобными для запуска и расширения разработчиками. Размещение их в том же репозитории, что и код приложения - первый шаг к достижению этой цели.
Позаботьтесь о простоте настройки и запуска: тесты должны настраиваться с помощью 3-4 команд, а запускаться с помощью одной.
Внедряйте автоматизированные тесты как часть User Story. Обсудите порядок действий с тестировщиками.
Выделять себе немного времени и сил для рефакторинга, итераций и улучшений
Автоматизированные тесты — это сложный кусок кода - такой же, как и само приложение. Примите вызов и примите тот факт, что создать надежную и масштабируемую систему автоматизации непросто.
Есть еще много аспектов, которые необходимо учитывать, но перечисленные выше, на мой взгляд, являются основными. Внедрение автоматизации тестирования в ваш проект - трудная задача, но, если вы чувствуете, что обладаете необходимыми навыками - дерзайте! Однако я бы посоветовал поддерживать связь с опытным разработчиком, чтобы посоветоваться с ним по поводу структуры фреймворка. Конкретный рецепт успешной автоматизации тестирования сложно описать в рамках одной статьи в блоге, но я думаю, что полезно хотя бы задать себе вопросы и вдохновиться предложениями, написанными выше.