Умение разбираться с нестабильными тестами критически важно в тестировании, потому что автотесты с плавающими результатами замедляют скорость всей разработки.
Если вы не сталкивались с нестабильными тестами, обязательно прочтите эту статью, поскольку в ней делается попытка систематизировать причины возникновения нестабильности в тестах. Если вы сталкивались с нестабильными тестами, посмотрите сколько из них попадает в перечисленные области.
Данная статья призвана рассказать как бороться с каждой из причин.
За прошедшие годы я не раз сталкивался с нестабильными тестами, но вместо того чтобы рассматривать конкретные случаи, давайте попробуем сгруппировать причины возникновения нестабильности по задействованным при выполнении автотестов компонентам:
Сами тесты;
Фреймворк для запуска тестов;
Сервисы и библиотеки, от которых зависит тестируемая система и тестовый фреймворк;
Операционная система и устройство с которым взаимодействует фреймворк автотестирования.
На рисунке 1 показан стек оборудования / программного обеспечения, который поддерживает тестируемое приложение или систему. На самом низком уровне находится оборудование. Следующий уровень - это операционная система, за которой следуют библиотеки, обеспечивающие интерфейс с системой. На самом высоком уровне находится промежуточное программное обеспечение, уровень, который предоставляет интерфейсы для конкретных приложений.
![](https://habrastorage.org/getpro/habr/upload_files/cdb/10b/8b1/cdb10b8b1952154813f1dce092a56070.jpeg)
Однако в распределенной системе каждая служба приложения и службы, от которых она зависит, могут находиться в другом аппаратном / программном стеке, как и служба, выполняющая тест. Это проиллюстрировано на рисунке 2 как полная среда выполнения теста
![](https://habrastorage.org/getpro/habr/upload_files/b67/790/0b9/b677900b9061a0551c1eb18d1257e4f8.jpeg)
Как обсуждалось выше, каждый из этих компонентов является потенциальной областью нестабильных тестов
Сами тесты
Сами тесты могут вызвать нестабильность. Типичные причины:
Неправильная инциализация или очистка;
Неправильно подобранные тестовые данные;
Неправильное предположение о состоянии системы. Примером может служить системное время;
Зависимость от асинхроных действий;
Зависимость от порядка запуска тестов.
Фреймворк для запуска тестов
Ненадежный фреймворк для запуска тестов может привести к нестабильности. Типичные причины:
Неспособность выделить достаточно ресурсов для тестируемой системы, что приводит к ее сбою;
Неправильное планирование тестов, поэтому они "противоречат" и приводят к сбою друг друга;
Недостаточно системных ресурсов для выполнения требований тестирования.
Сервисы и библиотеки, от которых зависит тестируемая система и тестовый фреймворк
Приложение (или тестируемая система) может быть источником нестабильности
Приложение также может иметь множество зависимостей от других служб, и каждая из этих служб может иметь свои собственные зависимости.
В этой цепочки каждый сервис может послужить причиной возникновения нестабильных тестов.
Типичные причины:
Состояние гонки;
Непроинициализированные переменные;
Медленный ответ или отсутствие ответа при запросе от теста;
Утечки памяти;
Избыточная подписка на ресурсы;
Изменения в приложении и в тестах происходят с разной скоростью.
Среды тестирования называются герметичными, если они содержат всё, что необходимо для запуска тестов (т.е. нет внешних зависимостей, таких как серверы, работающие в прод окружении).
Герметичная среда менее подвержена нестабильности.
Операционная система и устройство с которым взаимодействует фреймворк автотестирования
Наконец, оборудование и операционная система могут быть источником нестабильности тестов. Типичные причины включают:
Сбои или нестабильность сети;
Дисковые ошибки;
Ресурсы, потребляемые другими задачами / службами, не связанными с выполняемыми тестами.
Как видно из большого разнообразия сбоев, снижение нестабильности при автоматизированном тестировании может быть довольно сложной задачей. В этой статье описаны области и типы нестабильности, которые могут возникать в этих областях, поэтому она может служить шпаргалкой при локализации причины нестабильных тестов.
В следующих статьях мы рассмотрим способы решения этих проблем.
Ссылки на источники
Откуда берутся нестабильные тесты? (оригинал/ перевод статьи на хабре)
Нестабильные тесты в Google и как мы их исправляем (оригинал)
Мои тесты на Selenium не стабильны! (оригинал)
Избегайте нестабильных тестов (оригинал)