В тестировании программного обеспечения автоматизация тестирования — это использование программного обеспечения отдельно от тестируемого программного обеспечения для управления выполнением тестов и сравнения фактических результатов с прогнозируемыми результатами. [1] Автоматизация тестирования может автоматизировать некоторые повторяющиеся, но необходимые задачи в уже существующем формализованном процессе тестирования или выполнить дополнительное тестирование, которое было бы сложно выполнить вручную. Автоматизация тестирования имеет решающее значение для непрерывной поставки и непрерывного тестирования . [2]
Существует множество подходов к автоматизации тестирования, однако ниже приведены общие широко используемые подходы:
Одним из способов автоматического создания тестовых примеров является тестирование на основе моделей с использованием модели системы для создания тестовых сценариев, но продолжаются исследования различных альтернативных методологий для этого. [ нужна цитация ] В некоторых случаях подход, основанный на модели, позволяет нетехническим пользователям создавать автоматизированные бизнес-тестовые примеры на простом английском языке, так что не требуется никакого программирования для их настройки для нескольких операционных систем, браузеров и интеллектуальных устройств. устройства. [3]
Некоторые задачи тестирования программного обеспечения (например, обширное низкоуровневое регрессионное тестирование интерфейса ) могут быть трудоемкими и отнимать много времени, если их выполнение вручную. Кроме того, ручной подход не всегда может быть эффективным при обнаружении определенных классов дефектов. Автоматизация тестирования дает возможность эффективно выполнять эти типы тестирования.
После разработки автоматизированных тестов их можно быстро и многократно запускать. Это может быть экономически эффективным методом регрессионного тестирования программных продуктов с длительным сроком эксплуатации. Даже незначительные исправления в течение срока службы приложения могут привести к поломке существующих функций, которые работали ранее.
Тестирование API также широко используется тестировщиками программного обеспечения, поскольку оно позволяет им проверять требования независимо от реализации графического пользовательского интерфейса, обычно для их тестирования на более ранних этапах разработки, а также для того, чтобы убедиться, что сам тест соответствует принципам чистого кода, особенно принципу единой ответственности. Он включает в себя непосредственное тестирование API в рамках интеграционного тестирования , чтобы определить, соответствуют ли они ожиданиям в отношении функциональности, надежности, производительности и безопасности. [4] Поскольку API не имеют графического интерфейса , тестирование API выполняется на уровне сообщений . [5] Тестирование API считается критически важным, когда API служит основным интерфейсом для логики приложения . [6]
Многие инструменты автоматизации тестирования предоставляют функции записи и воспроизведения, которые позволяют пользователям интерактивно записывать действия пользователя и воспроизводить их любое количество раз, сравнивая фактические результаты с ожидаемыми. Преимущество этого подхода в том, что он практически не требует разработки программного обеспечения . Этот подход можно применить к любому приложению, имеющему графический интерфейс пользователя . Однако использование этих функций создает серьезные проблемы с надежностью и ремонтопригодностью. Изменение названия кнопки или перемещение ее в другую часть окна может потребовать перезаписи теста. Запись и воспроизведение также часто добавляют ненужные действия или неправильно записывают некоторые действия. [ нужна цитата ]
Вариант этого типа инструмента предназначен для тестирования веб-сайтов. Здесь «интерфейсом» является веб-страница. Однако такая платформа использует совершенно другие методы, поскольку она отображает HTML и прослушивает события DOM , а не события операционной системы. Для этой цели обычно используются безголовые браузеры или решения на основе Selenium Web Driver . [7] [8] [9]
Другой вариант этого типа инструмента автоматизации тестирования предназначен для тестирования мобильных приложений. Это очень полезно, учитывая количество различных размеров, разрешений и операционных систем, используемых на мобильных телефонах. В этом варианте используется платформа для создания экземпляров действий на мобильном устройстве и сбора результатов действий.
Другой вариант — автоматизация тестирования без сценариев, которая не использует запись и воспроизведение, а вместо этого строит модель ( необходимы пояснения ) приложения, а затем позволяет тестировщику создавать тестовые примеры, просто вставляя параметры и условия теста, что не требует навыков написания сценариев. .
Автоматизация тестирования, в основном с использованием модульного тестирования, является ключевой особенностью экстремального программирования и гибкой разработки программного обеспечения , где она известна как разработка через тестирование (TDD) или разработка с упором на тестирование. Модульные тесты могут быть написаны для определения функциональности до написания кода. Однако эти модульные тесты развиваются и расширяются по мере разработки кода, обнаружения проблем и рефакторинга кода. [10] Только когда все тесты для всех требуемых функций пройдены, код считается завершенным. Сторонники утверждают, что он создает программное обеспечение, которое является более надежным и менее затратным, чем код, тестируемый вручную. [ нужна цитация ] Он считается более надежным, поскольку покрытие кода лучше, а также потому, что он запускается постоянно во время разработки, а не один раз в конце каскадного цикла разработки. Разработчик обнаруживает дефекты сразу после внесения изменений, когда их исправление обходится дешевле всего. Наконец, рефакторинг кода безопаснее при использовании модульного тестирования; преобразование кода в более простую форму с меньшим дублированием кода , но эквивалентным поведением с гораздо меньшей вероятностью приведет к появлению новых дефектов, когда рефакторинг кода покрывается модульными тестами.
Непрерывное тестирование — это процесс выполнения автоматических тестов в рамках конвейера доставки программного обеспечения для получения немедленной информации о бизнес-рисках, связанных с кандидатом на выпуск программного обеспечения. [11] [12] При непрерывном тестировании объем тестирования простирается от проверки восходящих требований или пользовательских историй до оценки системных требований, связанных с общими бизнес-целями. [13]
Что автоматизировать, когда автоматизировать и вообще нужна ли автоматизация — вот важные решения, которые должна принять команда тестирования (или разработки). [14] Многосторонний обзор литературы с участием 52 практиков и 26 академических источников показал, что пять основных факторов, которые следует учитывать при принятии решения об автоматизации тестирования: 1) тестируемая система (SUT), 2) типы и количество тестов, 3) тест -инструмент, 4) человеческие и организационные темы и 5) сквозные факторы. Наиболее частыми индивидуальными факторами, выявленными в исследовании, были: необходимость регрессионного тестирования, экономические факторы и зрелость SUT. [15]
Хотя возможность повторного использования автоматизированных тестов ценится компаниями-разработчиками программного обеспечения, это свойство также можно рассматривать как недостаток. Это приводит к так называемому «парадоксу пестицидов» , когда многократно выполняемые скрипты перестают обнаруживать ошибки, выходящие за рамки их рамок. В таких случаях ручное тестирование может быть лучшим вложением средств. Эта неоднозначность еще раз приводит к выводу, что решение об автоматизации тестирования должно приниматься индивидуально, учитывая требования и особенности проекта.
Инструменты тестирования могут помочь автоматизировать такие задачи, как установка продукта, создание тестовых данных, взаимодействие с графическим пользовательским интерфейсом, обнаружение проблем (рассмотрите агенты синтаксического анализа или опроса, оснащенные тестовыми оракулами ), регистрацию дефектов и т. д. без обязательной сквозной автоматизации тестов. .
Думая об автоматизации тестирования, необходимо продолжать удовлетворять популярные требования:
Инструменты автоматизации тестирования могут быть дорогими и обычно используются в сочетании с ручным тестированием. Автоматизация тестирования может стать экономически эффективной в долгосрочной перспективе, особенно при многократном использовании в регрессионном тестировании . Хорошим кандидатом на автоматизацию тестирования является тестовый пример для общего потока приложения, поскольку его необходимо выполнять (регрессионное тестирование) каждый раз, когда в приложении вносятся улучшения. Автоматизация тестирования сокращает усилия, связанные с ручным тестированием. Для разработки и поддержки автоматических проверок, а также для анализа результатов испытаний необходимы ручные усилия.
При автоматизированном тестировании инженер по тестированию или специалист по обеспечению качества программного обеспечения должен обладать способностью кодировать программное обеспечение, поскольку тестовые примеры записываются в форме исходного кода, который при запуске выдает выходные данные в соответствии с утверждениями , которые являются его частью. Некоторые инструменты автоматизации тестирования позволяют создавать тесты с помощью ключевых слов вместо кодирования, что не требует программирования.
Стратегией определения количества тестов для автоматизации является пирамида автоматизации тестирования. Эта стратегия предлагает написать три типа тестов с разной степенью детализации. Чем выше уровень, тем меньше нужно писать тестов. [16]
Одна из концепций пирамиды тестирования включает модульные, интеграционные и сквозные модульные тесты. Согласно блогу тестирования Google , модульные тесты должны составлять большую часть вашей стратегии тестирования, с меньшим количеством интеграционных тестов и лишь небольшим количеством сквозных тестов. [19]
Фреймворк автоматизации тестирования — это интегрированная система, задающая правила автоматизации конкретного продукта. Эта система объединяет библиотеки функций, источники тестовых данных, детали объектов и различные модули многократного использования. Эти компоненты действуют как небольшие строительные блоки, которые необходимо собрать для представления бизнес-процесса. Платформа обеспечивает основу для автоматизации тестирования и упрощает процесс автоматизации.
Основным преимуществом системы предположений , концепций и инструментов, обеспечивающих поддержку автоматизированного тестирования программного обеспечения, является низкая стоимость обслуживания . Если в какой-либо тестовый сценарий внесены изменения , то необходимо обновить только файл тестового сценария, а сценарий драйвера и сценарий запуска останутся прежними. В идеале нет необходимости обновлять скрипты в случае изменений в приложении.
Выбор правильной структуры/методики написания сценариев помогает снизить затраты. Затраты, связанные с написанием тестовых сценариев, связаны с усилиями по разработке и обслуживанию. Подход к написанию сценариев, используемый при автоматизации тестирования, влияет на затраты.
Обычно используются различные методы фреймворка/сценариев:
Структура тестирования отвечает за: [20]
Растущая тенденция в разработке программного обеспечения — использование платформ модульного тестирования , таких как платформы xUnit (например, JUnit и NUnit ), которые позволяют выполнять модульные тесты, чтобы определить, действуют ли различные разделы кода ожидаемым образом при различных обстоятельствах. Тестовые случаи описывают тесты, которые необходимо запустить в программе, чтобы убедиться, что программа работает должным образом.
Интерфейсы автоматизации тестирования — это платформы, которые предоставляют единое рабочее пространство для включения нескольких инструментов и сред тестирования для системного/интеграционного тестирования тестируемого приложения. Цель интерфейса автоматизации тестирования — упростить процесс сопоставления тестов с бизнес-критериями, не мешая этому процессу написанию кода. Ожидается, что интерфейс автоматизации тестирования повысит эффективность и гибкость поддержки тестовых сценариев. [21]
Интерфейс автоматизации тестирования состоит из следующих основных модулей:
Механизмы интерфейса построены на основе среды интерфейса. Интерфейсный движок состоит из парсера и средства запуска тестов. Синтаксический анализатор предназначен для анализа объектных файлов, поступающих из репозитория объектов, на язык сценариев, специфичный для теста. Средство запуска тестов выполняет тестовые сценарии, используя тестовую программу . [21]
Репозитории объектов — это набор данных объектов пользовательского интерфейса/приложения, записанных инструментом тестирования во время изучения тестируемого приложения. [21]
Инструменты специально разработаны для определенной среды тестирования, такой как Windows, инструменты веб-автоматизации и т. д. Инструменты служат движущей силой процесса автоматизации. Однако среда автоматизации — это не инструмент для выполнения конкретной задачи, а скорее инфраструктура, обеспечивающая решение, при котором различные инструменты могут выполнять свою работу унифицированным образом. Это обеспечивает общую платформу для инженера по автоматизации.
Существуют различные типы фреймворков. Они классифицируются в зависимости от используемого компонента автоматизации. Это: