Русский
Русский
English
Статистика
Реклама

Flaky

Перевод Нестабильные(Flaky) тесты одна из основных проблем автоматизированного тестирования

26.04.2021 10:24:01 | Автор: admin

Умение разбираться с нестабильными тестами критически важно в тестировании, потому что автотесты с плавающими результатами замедляют скорость всей разработки.

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

Данная статья призвана рассказать как бороться с каждой из причин.

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

  • Сами тесты;

  • Фреймворк для запуска тестов;

  • Сервисы и библиотеки, от которых зависит тестируемая система и тестовый фреймворк;

  • Операционная система и устройство с которым взаимодействует фреймворк автотестирования.

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

Однако в распределенной системе каждая служба приложения и службы, от которых она зависит, могут находиться в другом аппаратном / программном стеке, как и служба, выполняющая тест. Это проиллюстрировано на рисунке 2 как полная среда выполнения теста

Как обсуждалось выше, каждый из этих компонентов является потенциальной областью нестабильных тестов

Сами тесты

Сами тесты могут вызвать нестабильность. Типичные причины:

  • Неправильная инциализация или очистка;

  • Неправильно подобранные тестовые данные;

  • Неправильное предположение о состоянии системы. Примером может служить системное время;

  • Зависимость от асинхроных действий;

  • Зависимость от порядка запуска тестов.

Фреймворк для запуска тестов

Ненадежный фреймворк для запуска тестов может привести к нестабильности. Типичные причины:

  • Неспособность выделить достаточно ресурсов для тестируемой системы, что приводит к ее сбою;

  • Неправильное планирование тестов, поэтому они "противоречат" и приводят к сбою друг друга;

  • Недостаточно системных ресурсов для выполнения требований тестирования.

Сервисы и библиотеки, от которых зависит тестируемая система и тестовый фреймворк

Приложение (или тестируемая система) может быть источником нестабильности

Приложение также может иметь множество зависимостей от других служб, и каждая из этих служб может иметь свои собственные зависимости.

В этой цепочки каждый сервис может послужить причиной возникновения нестабильных тестов.

Типичные причины:

  • Состояние гонки;

  • Непроинициализированные переменные;

  • Медленный ответ или отсутствие ответа при запросе от теста;

  • Утечки памяти;

  • Избыточная подписка на ресурсы;

  • Изменения в приложении и в тестах происходят с разной скоростью.

Среды тестирования называются герметичными, если они содержат всё, что необходимо для запуска тестов (т.е. нет внешних зависимостей, таких как серверы, работающие в прод окружении).

Герметичная среда менее подвержена нестабильности.

Операционная система и устройство с которым взаимодействует фреймворк автотестирования

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

  • Сбои или нестабильность сети;

  • Дисковые ошибки;

  • Ресурсы, потребляемые другими задачами / службами, не связанными с выполняемыми тестами.

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

В следующих статьях мы рассмотрим способы решения этих проблем.

Ссылки на источники

Подробнее..

Перевод Нестабильные тесты одна из основных проблем автоматизированного тестирования(Часть 2)

05.05.2021 08:04:43 | Автор: admin

Это продолжение серии статей о нестабильных тестах.

В первой статье(оригинал/перевод на хабре) говорилось о 4 компонентах, в которых могут возникать нестабильные тесты.

В этой статье дадим советы как избежать нестабильных тестов в каждом из 4 компонентов.

Компоненты

Итак 4 компонента в которых могут возникать нестабильные тесты:

  • Сами тесты;

  • Фреймворк для запуска тестов;

  • Сервисы и библиотеки, от которых зависит тестируемая система и тестовый фреймворк;

  • Операционная система и устройство с которым взаимодействует фреймворк автотестирования.

Это отображено на рисунке 1.

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

Сами тесты

Сами тесты могут быть нестабильными.

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

Таблица 1 Причины, варианты локализации проблемы и варианты решения нестабильности в самих тестах.

Причины нестабильных тестов

Варианты локализации проблемы

Варианты решения

Неправильная инициализация или очистка.

Ищите предупреждения компилятора о неинициализированных переменных. Проверьте код инициализации и очистки. Проверьте, что среда настроена и очищена правильно. Убедитесь, что тестовые данные верные.

Явно инициализируйте все переменные правильными значениями перед их использованием. Правильно настройте и очистите тестовую среду. Убедитесь, что первый тест не вредит состоянию тестовой среды.

Неправильно подобранные тестовые данные.

Перезапустите тесты самостоятельно.

Сделайте тесты независимыми от какого-либо состояния из других тестов и предыдущих запусков.

Неправильное предположение о состоянии системы. Примером может служить системное время.

Проверьте зависимости приложения.

Удалите или изолируйте зависимости вашего приложение от аспектов среды, которые вы не контролируете.

Зависимости от времени выполнения, ожидание появления асинхронных событий в определенном порядке, ожидание без тайм-аутов или состояние гонки между тестами и приложением.

Логируйте время, когда были обращения к приложению. В рамках отладки добавьте задержки для проверки результатов прогона автотеста.

Добавьте в тесты элементы синхронизации, чтобы они ждали определенных состояний приложения. Отключите ненужное кеширование, чтобы иметь предсказуемый график ответов приложения. НЕ ДОБАВЛЯЙТЕ явные ожидания, это может привести к нестабильности тестов в будущем.

Зависимость от порядка запуска тестов (Вариант решения схож с второй причиной).

Перезапустите тесты самостоятельно.

Сделайте тесты независимыми от какого-либо состояния из других тестов и предыдущих запусков.

Фреймворк для запуска тестов

Ненадежный фреймворк для запуска тестов может привести к нестабильности

Таблица 2 Причины, варианта локализации проблемы, и варианты решения нестабильности в фреймворке для запуска тестов

Причины нестабильных тестов

Варианты локализации проблемы

Варианты решения

Неспособность выделить достаточно ресурсов для тестируемой системы, что приводит к ее сбою.

Проверьте логи, чтобы удостовериться появилось ли приложение.

Выделите достаточно ресурсов.

Неправильное планирование тестов, поэтому они "противоречат" и приводят к сбою друг друга.

Запустите тесты в другом порядке.

Сделайте тесты независимыми друг от друга.

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

Проверьте системные логи, чтобы удостовериться не закончились ли ресурсы.

Устрани утечки памяти или другие утечки ресурсов. Выделите достаточно ресурсов для прогона тестов.

Сервисы и библиотеки, от которых зависит тестируемая система и тестовый фреймворк

Приложение (или тестируемая система) может быть источником нестабильности.

Приложение также может иметь множество зависимостей от других служб, и каждая из этих служб может иметь свои собственные зависимости.

В этой цепочки каждый сервис может послужить причиной возникновения нестабильных тестов.

Таблица 3 Причины, варианта локализации проблемы, и варианты решения нестабильности в приложении или тестируемой системе

Причины нестабильных тестов

Варианты локализации проблемы

Варианты решения

Состояние гонки.

Логируйте доступ к общим ресурсам.

Добавьте в тесты элементы синхронизации, чтобы они ждали определенных состояний приложения. НЕ ДОБАВЛЯЙТЕ явные ожидания, это может привести к нестабильности тестов в будущем.

Непроинициализированные переменные.

Ищите предупреждения компилятора о неинициализированных переменных.

Явно инициализируйте все переменные правильными значениями перед их использованием.

Медленный ответ или отсутствие ответа при запросе от теста.

Логируйте время когда делаются запросы и ответы.

Проверьте и устраните все причины задержек.

Утечки памяти.

Посмотрите на потребление памяти во время прогона тестов. В обнаружении проблемы поможет инструмент Valgrind.

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

Избыточная подписка на ресурсы.

Проверьте логи, чтобы узнать не закончились ли ресурсы.

Выделите достаточно ресурсов для запуска тестов.

Изменения в приложении и в тестах происходят с разной скоростью.

Изучите историю изменений.

Введите правило при изменении кода, писать на это тесты.

Операционная система и устройство с которым взаимодействует фреймворк автотестирования

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

Таблица 4 Причины, варианта локализации проблемы, и варианты решения нестабильности в ОС и устройстве с которым взаимодействует фреймворк автотестирования

Причины нестабильных тестов

Варианты локализации проблемы

Варианты решения

Сбои или нестабильность сети.

Проверьте наличие ошибок в системных логах.

Исправьте аппаратные ошибки либо запускайте тесты на другом оборудовании.

Дисковые ошибки.

Проверьте наличие ошибок в системных логах.

Исправьте аппаратные ошибки либо запускайте тесты на другом оборудовании.

Ресурсы, потребляемые другими задачами / службами, не связанными с выполняемыми тестами.

Изучите активность системного процесса.

Сократите активность процессов не связанных с прогоном тестов.

Заключение

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

Ссылки на источники

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru