...почему зависимости между тестами это плохо?
Image source: Telegraph Herald

...почему зависимости между тестами это плохо?

Предисловие

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

– Ой, у меня тест упал!
– Ну-ка, ну-ка, в чём там дело? Ага, этот тест выполнялся в ситуации, когда пользователь ещё не залогинился в систему.
– А почему? Я же сделал логин вон в том другом тесте!
– Да, но этот тест выполнялся первым, поэтому в нём логин ещё не случился.
– Ясно… А как сделать, чтобы тесты выполнялись в нужном порядке?

Логичный вопрос, правда? Такое решение возникшей проблемы напрашивается само собой.

Однако вместо ответа на этот вопрос я обычно отвечаю:

– Не стоит так делать. Тест не должен зависеть от других тестов. Иначе…

Так что же будет иначе?

Эффект домино

Главной проблемой, которая может возникать, если тесты зависят друг от друга, является так называемый “эффект домино”. Ну, знаете, когда доминошки выстроены в ряд, толкаешь первую из них, она толкает следующую, та толкает третью и так далее – возникает каскад падений.

С тестами происходит примерно то же самое. Если падает один тест – следом за ним падают те тесты, которые от него зависят, потом тесты, зависящие от них, и тоже возникает каскад падений.

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

Обратный эффект домино

Однако описанные выше проблемы – лишь цветочки по сравнению с обратным эффектом домино.

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

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

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

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

Упорядочение тестов

Означает ли это, что упорядочивать тесты вредно? Нет, не означает!

Если вы внимательно читали предисловие, вы могли заметить, что в воображаемом диалоге заявление про то, что “тесты должны быть независимыми” на самом деле не является ответом на поставленный вопрос. Произошла подмена понятий.

Ученик: как выполнить тесты в определённом порядке? Наставник: тесты должны быть независимыми!

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

Ученик: как выполнить тесты в определённом порядке? Наставник: а зачем выполнять их в таком порядке? Ученик: потому что в другом порядке они не выполняются… Наставник: а почему они не выполняются в другом порядке? Ученик: потому что второй тест зависит от результатов выполнения первого Наставник: тесты должны быть независимыми!

Теперь более понятно, откуда возникает такой ответ, правда?

Да, тесты должны быть независимыми.

Но это не означает, что упорядочивать тесты нельзя. Очень даже можно.

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

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

А зависимости между тестами – это плохо. Не делайте так.


Алексей Баранцев

Автор:

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

Мои тренинги
А ещё есть? Конечно!