Автоматизация тестирования программ
Автоматизированное тестирование программного обеспечения — основные понятия
Автоматизированное тестирование программного обеспечения (Software Automation Testing) — это процесс верификации программного обеспечения, при котором основные функции и шаги теста, такие как запуск, инициализация, выполнение, анализ и выдача результата, выполняются автоматически при помощи инструментов для автоматизированного тестирования.
Специалист по автоматизированному тестированию программного обеспечения (Software Automation Tester) — это технический специалист (тестировщик или разработчик программного обеспечения), обеспечивающий создание, отладку и поддержку работоспособного состояния тест скриптов, тестовых наборов и инструментов для автоматизированного тестирования.
Инструмент для автоматизированного тестирования (Automation Test Tool) — это программное обеспечение, посредством которого специалист по автоматизированному тестированию осуществляет создание, отладку, выполнение и анализ результатов прогона тест скриптов.
Тест Скрипт (Test Script) — это набор инструкций, для автоматической проверки определенной части программного обеспечения.
Тестовый набор (Test Suite) — это комбинация тест скриптов, для проверки определенной части программного обеспечения, объединенной общей функциональностью или целями, преследуемыми запуском данного набора.
Тесты для запуска (Test Run) — это комбинация тест скриптов или тестовых наборов для последующего совместного запуска (последовательного или параллельного, в зависимости от преследуемых целей и возможностей инструмента для автоматизированного тестирования).
Автоматизация тестирования программных систем
На сегодняшний день мало кто сомневается в целесообразности проведения процесса тестирования разрабатываемых программных продуктов. Целью любого проекта по тестированию является обеспечение качества разрабатываемого продукта. Автоматизация повышает эффективность тестирования и, следовательно, улучшает качество создаваемого программного обеспечения (ПО). Основная задача статьи – создать у читателя достаточно чёткую картину того, что собой представляет автоматизация тестирования.
Основные понятия
Первое, с чего мне хотелось бы начать – это освежить в вашей памяти основные термины и понятия, которые будут использованы в данной статье в дальнейшем:
Тестирование – процесс, содержащий в себе все активности жизненного цикла, как динамические, так и статические, касающиеся планирования, подготовки и оценки программного продукта и связанных с этими результатами работ с целью определения их соответствия описанным требованиям, и демонстрации их пригодности для заявленных целей и определения дефектов;
Автоматизация тестирования – использование программного обеспечения для осуществления или помощи в проведении определенных тестов процессов, например, управление тестированием, проектирование тестов, выполнение тестов и проверка результатов;
Автоматизированное тестирование ПО – процесс тестирования ПО, при котором основные функции и шаги теста, такие как запуск, инициализация, выполнение, анализ и выдача результата производятся автоматически с помощью некого стека технологий, в котором главное место занимает инструмент для автоматизированного тестирования;
Инструмент для автоматизированного тестирования – это ПО, посредством которого специалист по автоматизированному тестированию осуществляет создание, отладку, выполнение и анализ результатов прогона тест-скриптов;
Интерфейс программирования приложений (иногда интерфейс прикладного программирования) (англ. application programming interface, API [эй-пи-ай]) — набор готовых классов, процедур, функций, структур и констант, предоставляемых приложением (библиотекой, сервисом) для использования во внешних программных продуктах. Используется программистами для написания всевозможных приложений;
Нагрузочное тестирование – вид тестирования производительности, проводимый с целью оценить поведение компонента или системы под увеличивающейся нагрузкой (число одновременно работающих пользователей и/или число транзакций) для определения максимально допустимого уровня нагрузки для исследуемого компонента или системы;
Регрессионная спираль смерти – данный эффект наступает тогда, когда на тестирование проекта тратится все больше и больше времени, т.к. готовой функциональности в продукте становится все больше и надо постоянно контролировать, что она по-прежнему работает;
Регрессионное тестирование – тестирование уже протестированной программы, проводящееся после модификации для уверенности в том, что процесс модификации не внес или не активизировал ошибки в областях, не подвергавшихся изменениям. Проводится после изменений в коде программного продукта или его окружения;
Тест-скрипт – это набор инструкций, для автоматической проверки определенной части ПО;
Тестовый набор – это комбинация тест-скриптов, для проверки определенной части ПО, объединенной общей функциональностью или целями, преследуемыми запуском данного набора;
Тестовые данные – данные, которые существуют (например, в базе данных) на начало выполнения теста\тест-скрипта и влияют на работу, или же испытывают влияние со стороны тестируемой системы или компонента;
Фреймворк (англ. framework — каркас, структура) — структура программной системы; программное обеспечение, облегчающее разработку и объединение разных компонентов большого программного проекта. (Употребляется также слово «каркас», а некоторые авторы используют его в качестве основного, в том числе не базируясь вообще на англоязычном аналоге);
Функциональное тестирование – тестирование, основанное на анализе спецификации функциональности компонента или системы.
Виды тестирования
Немного разобравшись с основными понятиями, предлагаю вам рассмотреть и основные виды тестирования:
• Первым пунктом в этом списке стоит нагрузочное тестирование. Без автоматизации его выполнение трудно себе представить (программными продуктами имитируется нагрузка следующим образом: подключаются виртуальные пользователи, выполняющие различные скрипты (действия), по различным сценариям.);
• Следом идёт регрессионное тестирование. Ошибки, которые возникли после внесения изменений в программу называют регрессионными ошибками (англ. regression bugs). Выполняется с регулярной частотой, задаваемой в зависимости от многих условий: может проводиться с каждой новой сборкой проекта или с каждой версией для заказчика;
• Функциональное тестирование проводится в целях проверки реализуемости функциональных требований, то есть способности ПО в определённых условиях решать задачи, нужные пользователям. (Одна из основных задач автоматизации регрессионного\функционального тестирования заключается в том, чтобы уберечь проект от регрессионной спирали смерти.)
Преимущества и недостатки автоматизированного тестирования
Но всё ли так хорошо и красиво, как описано выше? Для ответа на эти вопросы, предлагаю «взвесить все за и против», чтобы сделать для себя соответствующие выводы.
Преимущества:
• Исключен «человеческий фактор» во время выполнения: тест-скрипт не допустит ошибки по неосторожности;
• Быстрое выполнение;
• Автоматически формируемые и сохраняемые отчёты о результатах тестирования;
• Выполнение в фоне – во время выполнения тестов можно заниматься другими задачами или выполнять тест-скрипты в нерабочее время.
Недостатки:
• Однотипность – все написанные тесты всегда будут выполняться строго по алгоритму, реализованном в них, в то время как тестировщик, выполняя тест вручную, может обратить внимание на некоторые детали и найти дефект. (Например, после очередного обновления проекта на форме операции было добавлено необязательное поле, но разработчик допустил ошибку и формат данных для ввода оказался не верным. Во время функционального\регрессионного тестирования приложения тест-скрипт отработает без ошибок, т.к. в его алгоритме взаимодействие с этим полем не реализовано.);
• Затраты на поддержку – чем чаще изменяется приложение, тем они выше. (В результате доработок конкретный функционал может изменяться, что приведёт к частичной или полной непригодности тест-скриптов. Перед специалистом по автоматизированному тестированию встанет задача привести тест-скрипт(ы) к актуальному состоянию.);
• Большие затраты на разработку тестового каркаса для конкретного проекта (фактически идёт разработка приложения, которое тестирует другое).
Внедрение автоматизированного тестирования
Прежде, чем задумываться о внедрении автоматизации тестирования, необходимо убедиться, что процесс контроля качества на ваших проектах выстроен, документирован и работает как часы. Помните, что внедрение автоматизации – это не дань моде. Это задача, призванная поднять контроль качества на вашем проекте на новый уровень, ввиду чего повышается эффективность тестирования проекта (без дополнительной головной боли).
Вторым шагом будет обращение к специалистам, которые помогут Вам поставить процесс автоматизации на профессиональном уровне и в сжатые сроки. Несомненно, можно пробовать развивать направление собственными силами, но без опытных специалистов этот процесс, вероятно, выльется в существенные сроки, будет проходить методом проб и ошибок, затронет больший бюджет, и, в конечном итоге, вполне может и вовсе отбить у вас всё желание применять автоматизированное тестирование.
При внедрении на проекты автоматизации тестирования «с нуля», в большинстве случаев рекомендуется разработка фрэймворка. Данный подход позволит вашим специалистам самостоятельно дорабатывать фреймворк и развивать покрытие тест-скриптами. На сегодняшний день это наиболее технологически продвинутое решение по соотношению цена / трудозатраты / эффективность.
К особенностям такого фрэймворка можно отнести:
• Максимальная повторная используемость кода: фактически создается API, который обеспечивает управление процессом выполнения;
• Применение методик Data Driven (тестирование по одному и тому же сценарию, проводимое при различных наборах и/или значений исходных данных);
• Все сценарии тестирования (test cases) и пакеты запуска (test suites) также описываются во внешних файлах что позволяет легко управлять параметрами запуска;
• Фреймворк обладает максимальной гибкостью: вы можете легко добавлять, удалять, редактировать существующие сценарии тестирования и пакеты запуска, при этом для данной задачи не требуется дополнительной квалификации, необходимо лишь умение работать с фреймворком;
• В систему легко могут быть добавлены новые операции, или изменены существующие; при этом не потребуется каких-либо сложных действий, необходимо будет только написать новую функцию. Это позволяет легко и безболезненно расширять сам фреймворк;
• Для многих отделов тестирования данное решение может оказаться панацеей, т.к. по результатам разработки фреймворка и проведения краткого обучения работе с ним, требования к квалификации специалистов, покрывающих систему авто тестами, существенно снижается, достаточно навыков работы XML.
Итоги
Напоследок стоит отметить, что целью автоматизации является повышение эффективности процесса (в данном случае тестирования) за счёт высвобождения специалистов и, следовательно, уменьшения затрат.
При рассмотрении вопроса автоматизации стоит помнить о затратах на внедрение. Большинство средств автоматизации тестирования являются платными, кроме того, требуются дополнительные трудозатраты на адаптацию. Поиск баланса между ручным и автоматизированным тестированием любого программного продукта является важной задачей подразделения тестирования в любой организации.
- automation testing
- testing
Автоматизированное или ручное тестирование – что выбрать?

Независимо от типа проекта, будь то вебсайт, SaaS платформа или же мобильное приложение, Вы должны определиться какой же тип тестирования выбрать – ручное или автоматизированное тестирование? Английская версия статьи manual testing vs automated testing. Существует огромное количество разных типов тестирования, которые относятся как к ручному (мануальное), так и автоматическому. Но сперва давайте узнаем, что такое ручное тестирование в веб-разработке.
Что такое автоматизированное тестирование?
Автоматизированное тестирование это процессы, которые запускают программы и скрипты для тестирования отдельных модулей, используя повторяющиеся действия. Фактически, это значит, что программа запускает определенные скрипты, чтобы проверить все составляющие проекта и оценить его. Для того, чтобы создать программу тестирования требуются определенные ресурсы.
В автоматизированном тестировании должен присутствовать тестировщик, который создаст программу и затем будет ее запускать. Наиболее популярной программой тестирования является Selenium Web Driver IDE. Используя язык Java или Python Вы можете начать тестирование. Кстати, если эти два языка входят в список программных языков 2019 года.
Плюсы автоматизированного тестирования:
- Качество. Точность результатов тестирования напрямую зависит от уровня разработчика. Однако по большей части, точность результатов близка к 99.9%. Практически все возможные варианты, к примеру, валидации формы, можно охватить написав 5 строчек кода.
- Автозапуск. Технологии не стоят на месте. И если ранее программист должен был написал программу тестирования и запускать ее вручную – то сейчас это можно полностью автоматизировать. Общеизвестный факт, что в период с 2 до 5 утра нагрузка на сервер минимальная. Это является наиболее оптимальным временем запуска тестов. Но ведь не приходить же тестировщику в 3 утра в офис, или вовсе ночевать и жить там?
- Выгодный. Большие проекты, особенно с высокой нагрузкой очень нуждаются в повышенном внимании и качестве. В долгосрочной перспективе, только автоматизированное тестирование будет выгодным и для финансового проекта, и для ecommerce сайта, и для веб проекта казино. Обратите внимание, на ecommerce тренды 2020. Более того, по статистике, чтобы заменить одного автоматизированного тестировщика требуется от 3 до 8 ручных тестировщиков. Средняя стоимость автоматизированного тестировщика составляет $25 в час. При условии работы с Восточно-Европейской компанией. Агентства из США берут от $55 в час.
- Захватывающее. В отличии, от ручного тестирования, автоматизированное считается креативным. Потому что, тестировщик в этой роли выступает как программист.
- Видимость результатов. Ручное тестирование в основе своей субъективное. Видимость результатов, эффективности, и статистика перед каждым релизом это важные особенности автоматизированного тестирования. Отчеты генерируются также в автоматическом режиме.
- Расширенный функционал. Автоматизированное тестирование связано напрямую с вебсайтом. Это можно назвать его скрытой темной стороной. Вы имеете доступ к бекэнд и можете оценить практически любые параметры. Нагрузка, проходимость сервера, строить прогнозы. Работая с аналитиками, и data science инженерами представляется огромная польза для компании.

Минусы автоматизированного тестирования
- Стоимость тестировщика. Обращая внимание на тот факт, что в данном случае тестировщик является программистом – значит и его цена выше.
- Время. Время запуска тестов, как и их продолжительность очень высоки. Однако требуется некоторое время чтобы написать те самые тесты. В таком случае в фазы веб разработки входит тестирование, и идет в буквальном смысле бок-о-бок с программированием. Тем временем тестировщик пишет автотесты, чтобы покрыть работающие части кода.
- Тестирование глазами пользователя. Вы никогда не сможете протестировать сайт глазами пользователя используя автоматизированное тестирование. Все просто, ведь программа создает отчеты. А тестировщик, всего лишь управляет ею и контролирует работу.
- Ограничения. Ограничения в невозможности тестировать цвета, гамму, и UX. Эти пункты, хоть и являются второстепенными, но без должного внимания к ним, Ваши пользователи вряд ли смогут наслаждаться платформой на 100%.
Что такое ручное тестирование в разработке?
Ручное тестирование, это процессы через которые разработчики, или manual QA тестировщик тестируют продукт: вебсайт, платформу, SaaS, что угодно чтобы найти дефекты и ошибки. Ручное тестирование идеально подходит для тех проектов с малым бюджетом, либо же краткосрочных (до 2 месяцев). Ручное тестирование проходит от лица тестировщика, который выступает как конечный пользователь системы.
Проверяет все функции, ссылки, пункты меню и т.д. Чтобы избежать поломанных ссылок, или не рабочего функционала. Часто тестировщик также использует несколько браузеров, чтобы охватить как можно больше пользователей, и само собой мобильную версию. К примеру, наиболее популярны Chrome, Firefox, Safari, IE11, Edge. С мобильными устройствами все несколько проще – всего лишь Google Chrome и Safari для iOS устройств. Но встает вопрос – стоит ли начать с вебсайта или мобильного приложения? Или же оба одновременно?
Какие же плюсы ручного тестирования?
- Низкие затраты. В краткосрочной перспективе, это финансово выгодное решение.
- Позволяет увидеть сайт глазами пользователя. Тестировщик, это в первую очередь программист. Имея знания в проектировании интерфейсов, графическом интерфейсе, бэкенд части, фреймворков и их взаимодействия. Он ходит по сайту имея за спиной все эти навыки, и конечно же навыки «пользователя».
- Гибкость. Если проект проектируется и программируется по методологии Agile, Скрам или Канбан, возможно это наибольшее преимущество. Если Вы быстро внедряете новые функции, и хотите быть уверенными, что они работают правильно – ручное тестирование позволяет сделать это быстро.
Минусы ручного тестирования
- Ограничения. К сожалению, нельзя проверить в ручном режиме все угодно. К примеру, нагрузочное тестировании практически нереально. Чтобы узнать какую веб-сервер сможет выдержать нагрузку – нужно фактически дать такую нагрузку.
- Скучное. По больше части касается непосредственно самого тестировщика, однако повторение одних и тех же действий, может быть несколько скучными для человека.
- Качество. На больших проектах ручное тестирование теряет свое качество. Нехватка времени, и рассеивание внимания стоят на первых местах.
Автоматизированное или ручное тестирование?
Прежде всего к Вам, как к владельцу проекта, несколько вопросов:
- Какой срок и объем Вашего проекта?
- Имеет ли значение поддержка платформы?
- Ищите ли Вы выгодное и доступное решение в области тестирования?
Если хоть бы на один из вопросов Вы ответили положительно, значит Вам скорее всего подойдет автоматизированное тестирование. Особенно это незаменимо при создании маркетплейсов или при создании приложений по доставке еды. В нашем опыте, достижение наилучшего результата возможно только объединив оба типа тестирования. Это позволит минимизировать риски, смягчить затраты и выпустить желаемый продукт очень быстро. Тем более, что Вы также решите визуальную составляющую, тренды веб дизайна 2019помогут Вам в этом.
Кому нужно автоматизированное или ручное тестирование?
В первую волну попадают SaaS платформы, и те которые «делают деньги» со своего сайта. Онлайн казино, торговые площадки. Высоко нагруженные проекты из любой отрасли также нуждаются в автоматизированном тестировании. Ручное тестирование идеально подходит для вебсайтов для малого бизнеса, персональных сайтов и других маленьких веб проектов.
Оцените (146 оценки — 4.4 из 5)
Automated test script что это
Автоматизация тестирования
latest update of the page: 27-01-2024, 09:53 UTC
Присмотреться к чужому опыту
Базовое
- Написание автоматических тестов для тестирования пользовательского интерфейса десктопных приложений
- Selenium для всех: как мы учим QA-инженеров работать с автотестами. Примечательно то, что они задумались и даже реализовали какое-никакое автоматическое вычисление какие тесты запускать под выбранную задачу, на основе того какие файлы изменил разраб в репозитории. Т.е. своеобразный impact-analysis в тестировании.
- Как сократить издержки на автотестах
- Пожалуй, лучшая архитектура для UI тестов (НТЦ ПРОТЕЙ, 2020). Java.
- Антипаттерны тестирования ПО (unit-тесты, интеграционные тесты) (2018)
Комплексный подход
- Что делать, если у вас слишком много автотестов? (Сергей Потанин, Wrike, 2020)
- Автоматизация End-2-End тестирования комплексной информационной системы. Часть 1. Организационная
- Автоматизация End-2-End тестирования комплексной информационной системы. Часть 2. Техническая
Интересное
Тестирование в условиях микросервисной архитектуры и Service mesh
- Реализация Consumer-Driven Contract подхода для тестирования микросервисов (Фрол Крючков, Авито, 2018)
- Consumer-Driven Contracts глазами разработчика (2019)
Cucumber
- Руководство: Cucumber + Java (2017)
- Cucumber 3 + Java (2018)
- Cucumber Selenium Java Example
Coded UI
- Time for Coded UI Tests
- Тестируем UI с помощью Coded UI Test
- Walkthrough: Creating, Editing and Maintaining a Coded UI Test
- тестирование на уровне кода — модульное ( unit testing). Это тестирование одного модуля кода (обычно это одна функция или один класс в случае ООП-кода) в изолированном окружении. Это значит, что если код использует какие-то сторонние классы, то вместо них подсовываются классы-заглушки (моки и стабы). Код не должен работать с сетью (и внешними серверами), файлами, базой данных, иначе мы тестируем не саму функцию или класс, а еще и диск, базу, и т.д.
- тестирование через API. API — это набор функций, которые можно вызывать, чтобы получить какие-то данные.
Например, у Яндекс.Карт есть API геокодера. Отправив к нему запрос с географическим адресом, ты можешь получить координаты точки (и наоборот), а у Центробанка есть API, которое возвращает официальный курс валют в заданный день.
Если у твоего приложения есть API, то можно тестировать его, посылая заранее подготовленные запросы и сравнивая пришедший ответ с ожидаемым. - тестирование через пользовательский интерфейс — GUI-тестирование. Имитация действий пользователя в браузере с помощью специальных тестовых фреймворков (типа Selenium).
- серия программных продуктов Selenium
- PhantomJS
- JUnit
- PhpUnit
Компания созрела для автотестов?
| Если хочется | , то для этого нужно | и скиллы ролей |
|---|---|---|
| проектирования и разработки автотестов | 1. Сначала нужно провести тест-анализ продукта/сервисов — выявить требования, определить процент покрытия их существующими тестами, определить технологический стек, используемый тестируемыми сервисами и их БД. | тест-аналитика, лида |
| 2. Определиться с уровнем тестирования: фронт, бэк, UI, API (web REST, web не REST, RPC. ), десктоп/мобильное приложение и т.п. | тест-аналитика | |
| 3. Определиться каким образом будем тестировать: функциональное, интеграционное, нагрузочное. | тест-аналитика | |
| 4. Исходя из п.1-3 подобрать ЯП и фреймворк (готовый или создавать самим) для автотестов. Используем ли Selenium для UI, используем ли Cucumber с его Gherkin. И т.п. |
опытного разработчика автотестов, тест-аналитика | |
| 5. Для подачи на вход автоматизаторам, требуется, чтобы кто-то составлял тест-кейсы по требованиям. Возможно, это будет тест-аналитик или сами тестировщики. Требуется удобный инструмент для хранения тест-кейсов (какой-нибудь древний HP ALM, современная Jira-плагин TM4J, что-то ещё. |
тест-аналитика, тестировщика | |
| 6. Непосредственно разработка автотестов. Требуется обеспечить разработчиков удобной IDE (платной/бесплатной), исходя из выбранных языков/фреймворков в п.4. |
разработчика автотестов | |
| 7. Исходя из п.1-3 можно уже сколько и каких сервисов требуется развернуть для тестирования. Таким образом выходим на технические требования к тестовому стенду (CPU/RAM, OS, будет ли это Openshift и прочее и прочее) и БД на них. Нужны ли в наличии актуальные мобильные устройства для прогона на них автотестов. Далее происходит обсуждение с ЛПР есть ли бюджет на покрытие этих технических требований, надо ли где-то ужиматься за счёт уменьшения тестового покрытия. Обычный процесс «торговли» за бюджет и поиски компромисса. |
||
| встраивания автотестов в CI/CD | 8. Выбрать инструмент для CI/CD. Возможно, решено использовать Jenkins как один из самых распространённых, по установке/настройке/решению проблем с которым легко найти ресурсы в Сети. Определить как будут запускаться job’ы с автотестами, на каких машинах, с какими параметрами, в каком виде мы хотим получать отчёт о тесте (Allure, кастомные виды представлений. ). Определить на какой машине с какими ресурсами будет размещён выбранный инструмент, какая там будет ролевая модель (кто будет иметь права на запуск/редактирование job’ов). Если делать это всё без инструмента, т.е. запуск будет производиться вручную или средствами cron в linux или job’ов Windows — то всё равно это требует обсуждения. |
любого кто пользовался выбранным инструментом CI/CD — разработчика автотестов, администратора, тестировщика. |
| * методик нагрузочного тестирования, * разработки и актуализации средств нагрузочного тестирования (сценарии и скрипты НТ , эмуляторы, скрипты генерации данных , скрипты анализа результатов), |
9. После п.1 провести тест-анализ сервисов в разрезе именно нагрузочного тестирования, в т.ч. получение профия нагрузки с ПРОДа, опрос администраторов, поддерживающих ПРОД и т.п. Отталкиваясь от требований, определить что следует нагружать и каким образом, какими способами будем измерять, какие метрики будем использовать. |
тест-аналитика, тестировщика-нагрузочника |
| 10. Определить какие технические ресурсы нам потребуются для реализации задуманного по НТ. Провести обсуждение с ЛПР есть ли бюджет на такие ресурсы, надо ли где-то ужиматься за счёт уменьшения тестового покрытия. Обычный процесс «торговли» за бюджет и поиски компромисса. |
тестировщика-нагрузочника, архитектора, тест-аналитика, лида | |
| 11. На основании тест-анализа в разрезе НТ из п.9 спроектировать сценарии НТ, определить необходимость скриптов анализа данных, учесть их в сценариях. | тестировщика-нагрузочника, тест-аналитика | |
| 12. На основании сценариев НТ из п.9 определяем необходимость подготовки данных в БД. Какие они должны быть. Нужно ли их подготавливать отдельными скриптами или же можем себе позволить репликацию с БД прода полностью или частично. | тестировщика-нагрузочника, тестировщика данных, тест-аналитика | |
| 13. На основании тест-анализа из п.1 и п.9 определяем нужны ли нам заглушки, моки, синтетические тестовые приложения (имитирующие поведение задействованных в сценарии сервисов) | тестировщика-нагрузочника, разработчика автотестов, тест-аналитика | |
| 14. Непосредственно разработка скриптов НТ. | тестировщика-нагрузочника, разработчика автотестов | |
| 15. На основании данных из п.10 и п.12 провести обсуждение с ЛПР есть ли бюджет на такие ресурсы, надо ли где-то ужиматься за счёт уменьшения тестового покрытия. Обычный процесс «торговли» за бюджет и поиски компромисса. | тестировщика-нагрузочника, архитектора, тест-аналитика, лида. | |
| поддержки разработанных автотестов | — | разработчика автотестов и немного тест-аналитика. |
Что автоматизировать
Какие тест-кейсы стоит автоматизировать в первую очередь
- покрывающие самые критические для Бизнеса бизнес-процессы и юзкейсы
- часто требующиеся к (пере)прохождению
- которые слишком сложно и неудобно выполнять вручную
, например, содержащие проверку данных, требующих точных математических и логических расчётов (банковское, бухгалтерское, аналитическое ПО)
или проверку структуры многочисленных файлов/сообщений, созданных системой. - требующие много времени на ручное прохождение
, например по проверке корректности отображаемых результатов поиска данных в ответ на запрос по данным
или проверяющие длинные бизнес-процессы, требующие действий под различными пользовательскими ролями на многочисленных формах UI и в различных системах.
Какие тест-кейсы НЕ СТОИТ автоматизировать
- разработанные недавно и еще не проверенные вручную
- требования для которых постоянно меняются
- разработанные для специфической задачи
Общие рекомендации
- Разметка автотестов по @Tag, @Category, @Feature, @Types, @Step и прочему. Не экономьте на этом.
Такая группировка автотестов позволяет производить запуск не всех 100500 тестов при каждом чихе, а именно тех, которые связаны с изменённой/добавленной функциональностью.
Также это позволяет производить трассировку между тестами и функциональностью. - Кошерный автотест в случае PASS (успешного прохождения) «убирает за собой», возвращая данные и настройки тестового стенда в состояние, максимально близкое к исходному. Если, конечно, настройки тестируемых приложений менялись в ходе теста, если в ходе теста создавались/изменялись объекты данных.
Если автотест упал, то чистить за собой ему не надо, потому что его данные потребуются для расследования причины падения.
Также, хорошей идеей может быть создание cleanup-скрипта, который по расписанию, например, ранним утром каждый день, чистит данные, которые были созданы за предыдущий период время упавшими тестами; предполагается, что за 1-2 дня все упавшие автотесты были расследованы и их данные нам больше не нужны). - Здесь про must have
- TBD
- Файлы проекта укладываются в контейнер с указанием запускающего файла start.sh и публикуются в хранилище YYY.
- При запуске тестов из Jenkins, контейнер устанавливается в Openshift/k8s и происходит автоматический запуска скрипта start.sh
- все файлы из контейнера копируются в папку /tmp/tests
- запускается сборка проекта Maven’ом с запуском тестов
- по завершению сборки и тестов формируется allure-отчёт
Java + Maven + Cucumber + Selenium
Создадим примитивные helloworld GUI-тест и API-тест с использованием Java, Maven, Cucumber (+JUnit) и Selenium.
Нижеизложенное выполнялось под Windows 10 и Intellij IDEA Ultimate 2020.1.
Установка
- Установить JRE (Java Run-Time Environment) = https://java.com/ru/download/
Посредством консоли убедиться что Java установлена, например: > java -version java version «1.8.0_261» Java(TM) SE Runtime Environment (build 1.8.0_261-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.261-b12, mixed mode) - Установить JDK: SE или EE.
Ссылки для Java Standard Edition:- Java SE download = https://oracle.com/java/technologies/javase-downloads.html
- JDK installation guide = https://docs.oracle.com/en/java/javase/14/install/overview-jdk-installation.html
- JAVA_HOME = [путь установленного JDK, например C:\Program Files\Java\jdk-14.0.2 ]
- в переменную Path добавить путь %JAVA_HOME%\bin
- download = https://maven.apache.org/download.cgi
- installation guide = https://maven.apache.org/install.html
- installation guide = https://mkyong.com/maven/how-to-install-maven-in-windows/
- MAVEN_HOME = [путь установленного Maven, например C:\Program Files\apache-maven-3.6.3 ].
- в переменную Path добавить путь %MAVEN_HOME%\bin
Настройка IDEA, создание Проекта, настройка dependencies
- Настроить Intellij IDEA на работу с Maven.
- Меню File/Config -> Settings -> Build, Execution, Deployment -> Build Tools -> Maven. Maven home directory = путь до каталога с Мавен
- .. Maven->Importing. JDK for importer = Use JAVA_HOME
- .. Maven->Runner. JRE = Use JAVA_HOME
- OK
- +Create New Proejct
- Maven
- Archetype = org.apache.maven.archetypes:maven-archetype-quickstart
- Project SDK = [путь до JDK]
- Next
- Заполняем Name, выбираем Location
- Заполняем GroupId и ArtifactId, например = org.tests и helloworld
- Finish
mvn clean compile
Hello world
- Структура проекта, создание cucumber-файлов для фич и кода
TBD - Hello World test
TBD