«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как выявить и смягчить ненадежные тесты: лучшие практики и стратегии.

Как выявить и смягчить ненадежные тесты: лучшие практики и стратегии.

Опубликовано 31 июля 2024 г.
Просматривать:344

How to Identify and Mitigate Flaky Tests: Best Practices and Strategies.

Повышение надежности и эффективности тестов в конвейерах CI/CD

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

Учитывайте, что ваш конвейер CI/CD настроен таким образом, что только после прохождения сборки ваш код проходит набор предопределенных тестовых случаев.

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

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

Причина понимания Flaky Test.

  1. Непредсказуемые результаты тестов: ненадежные тесты приводят к непредсказуемости: иногда они проходят успешно, а иногда терпят неудачу, даже если код не изменился. Эта случайность может затруднить доверие к результатам тестирования.

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

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

  4. Влияние на непрерывную интеграцию (CI): ненадежные тесты могут нарушить работу конвейеров непрерывной интеграции, что приведет к ненужным сбоям сборки и снижению общей эффективности процессов автоматизированного тестирования.

  5. Ложная уверенность или недоверие: Ненадежные тесты могут либо создать ложную уверенность, когда они проходят спорадически, либо вызвать недоверие к набору тестов, когда они непредсказуемо проваливаются, что затрудняет доверие к результатам тестов.

Способы смягчения ненадежных тестовых случаев.

  1. Рекомендации по смягчению последствий: Чтобы уменьшить количество ненадежных тестов, разработчики могут имитировать внешние зависимости, использовать детерминированные данные, обеспечивать изоляцию тестов и избегать зависимости от времени или порядка выполнения.

  2. Автоматическое обнаружение: внедрение автоматизированных инструментов, которые обнаруживают ненадежные тесты путем многократного запуска тестов и сравнения результатов, может помочь выявить и устранить проблемы на ранних этапах цикла разработки.

  3. Изоляция тестов: обеспечение полной изоляции каждого теста без зависимости от общих состояний или внешних факторов может значительно снизить вероятность нестабильности.

  4. Регулярное обслуживание: Регулярная проверка и рефакторинг набора тестов для удаления или исправления нестабильных тестов помогает поддерживать целостность и надежность процесса тестирования с течением времени.

Различные стратегии и инструменты для устранения ненадежных тестовых случаев

  1. Jenkins, CircleCI, Travis CI: Подобные инструменты непрерывной интеграции/непрерывного развертывания (CI/CD) можно настроить на повторный запуск неудачных тестов, помогая выявлять нестабильные тесты. У них часто есть плагины или встроенная поддержка для работы с нестабильными тестами.

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

  3. Виртуальные машины (ВМ): подобно Docker, виртуальные машины можно использовать для обеспечения выполнения тестов в контролируемой и изолированной среде, сводя к минимуму вмешательство со стороны других процессов или зависимостей.

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

  5. Политики проверки кода и приемы контроля версий: реализация строгих политик проверки кода, включающих проверку потенциальных источников нестабильности, может предотвратить внедрение нестабильных тестов.
    Использование перехватчиков предварительной фиксации или других механизмов контроля версий для контролируемого запуска тестов до объединения изменений может помочь выявить нестабильные тесты на ранней стадии.

Стратегии некоторых крупных организаций

  1. Google:
  • Повторить неудачные тесты: у Google есть политика, согласно которой они повторно запускают тесты, которые не могут определить, является ли ошибка последовательной. Это помогает выявить ненадежные тесты. У них также есть внутренние инструменты и инфраструктура для управления и устранения нестабильности в их обширных наборах тестов.

  • Изоляция тестов: Google подчеркивает важность изоляции тестов, чтобы гарантировать, что тесты не мешают друг другу, что имеет решающее значение для снижения нестабильности.

  1. Microsoft:
  • Аналитика тестирования и отчетность: Microsoft использует инструменты подробной аналитики тестирования и создания отчетов для отслеживания нестабильных тестов. Анализируя результаты тестирования с течением времени, они могут выявить закономерности и выявить ненадежные тесты.

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

3. Фейсбук:

  • Детокс: Facebook разработал библиотеку с открытым исходным кодом под названием Detox для тестирования своих мобильных приложений. Detox гарантирует, что тесты выполняются в согласованном состоянии и среде, уменьшая нестабильность, вызванную асинхронными операциями и другими проблемами синхронизации.

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

4. Нетфликс:

  • Разработка хаоса: Netflix использует методы проектирования хаоса для проверки устойчивости своих систем. Намеренно создавая сбои и сбои, они могут выявить нестабильные тесты и повысить надежность своих тестов и систем.

  • Автоматическая повторная попытка: Netflix использует механизмы автоматической повторной попытки в своих конвейерах CI/CD для повторного запуска тестов, которые периодически терпят неудачу, что помогает выявлять ненадежные тесты и управлять ими.

5. LinkedIn:

  • Инструменты управления ненадежными тестами: LinkedIn разработала инструменты специально для управления ненадежными тестами. Эти инструменты помогают отслеживать нестабильные тесты, обеспечивать видимость их возникновения и определять приоритетность их решения.

  • Стандартизация тестовой среды: LinkedIn фокусируется на стандартизации тестовых сред, чтобы уменьшить вариативность и гарантировать, что тесты выполняются в одинаковых условиях, что помогает снизить нестабильность.

Об авторе

Апурв Томар — разработчик программного обеспечения и ведет блог в **Mindroast. Вы можете подключиться в социальных сетях. Подпишитесь на **информационный бюллетень для получения новейшего тщательно подобранного контента.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/apoorvtomar/how-to-identify-and-mitigate-flaky-tests-best-practices-and-strategies-1cb0?1 Если есть какие-либо нарушения, свяжитесь с Study_golang. @163.com удалить
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3