Как тестируют в Google - страница 39



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

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

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

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

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


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

Система выполнения тестов Google отличает быстрые задания от медленных по информации о размере тестов. У каждого размера есть верхняя граница времени выполнения теста (табл. 2.1). Размер определяет и потенциальную потребность в ресурсах (табл. 2.2). Система прерывает выполнение и сообщает об ошибке, если тест превышает выделенное для его категории время или доступный объем ресурса. Это мотивирует разработчиков в тестировании назначать правильные метки размеров тестов. Точное определение размеров тестов позволяет системе строить эффективное расписание.


Таблица 2.1. Цели и ограничения времени отработки тестов по их размеру


Таблица 2.2. Использование ресурсов в зависимости от размеров теста

Преимущества разных размеров тестов

Размер теста имеет значение. Он влияет на специфические преимущества теста. На рис. 2.5 показана общая сводка, а ниже мы приводим более подробный список достоинств и недостатков каждого типа тестов.


Рис. 2.5. Ограничения разных размеров тестов

Большие тесты

Достоинства и недостатки больших тестов:

– Большие тесты проверяют самое важное – работу приложения. Они учитывают поведение внешних подсистем.

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

– Большой охват усложняет поиск причин при неудачном прохождении теста.

– Подготовка данных для тестовых сценариев может занимать много времени.

– Из-за высокоуровневости больших тестов в них трудно прорабатывать граничные значения. Для этого нужны малые тесты.

Средние тесты

Достоинства и недостатки средних тестов:

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

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

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

– Средние тесты учитывают поведение внешних подсистем.

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

– Средние тесты выполняются не так быстро, как малые.

Малые тесты