Автоматизация тестирования
Автоматизация тестирования: с чего начать и как перейти из ручного
Автоматизация тестирования – это проверки, которые вместо человека проходит программа: она выполняет сценарий и сравнивает результат с ожидаемым. Начинают её с базы ручного тестирования и тест-дизайна, затем учат один язык программирования (чаще всего Java, Python или JavaScript), фреймворк автоматизации и его паттерны, разбираются в пирамиде тестирования и CI/CD. На проекте переход обычно начинается с того, что тестировщик предлагает команде автоматизировать самое рутинное, то есть регресс и смоук.
- Сначала база
- тест-дизайн и документация нужны и в автотестах
- Java, Python, JS
- самые востребованные языки для автотестов, по моей оценке
- Регресс и смоук
- их автоматизируют в первую очередь
Путь по шагам
- Шаг 1
База ручного тестирования
Теория, техники тест-дизайна, тестовая документация и базовые инструменты. На курсах автоматизации эту часть часто сжимают до пары уроков, и её стоит добрать отдельно.
Открыть - Шаг 2
Язык программирования
Java, Python или JavaScript, с оглядкой на вакансии в своей стране. Для автотестов хватает основ: переменные и типы данных, методы и функции, циклы, классы и ООП.
- Шаг 3
Фреймворк автоматизации
Готовая библиотека, в которой типовые действия уже описаны методами: pytest для Python, Selenium для разных языков, Cypress или Playwright для JavaScript.
- Шаг 4
Паттерны автоматизации
Правила, как устроить код автотестов, чтобы его можно было поддерживать. Самый известный из них – Page Object.
- Шаг 5
Тесты разных уровней и пирамида
API- и интеграционные тесты, тесты интерфейса и end-to-end для веба, мобильных или десктопных приложений. Пирамида тестирования подсказывает, каких тестов должно быть больше.
Открыть - Шаг 6
CI/CD и отчёты
Автотесты запускают в конвейере: настраивают джобы в Jenkins или похожем инструменте, собирают отчёты и разбирают падения.
Открыть
Чем заняты ручной тестировщик и автоматизатор
Ручной тестировщик пишет чек-листы и тест-кейсы, которые читает человек, проходит проверки по ним и заводит баг-репорты на найденные дефекты. Инструменты у него готовые и с интерфейсом: он смотрит фронтенд в браузере, отправляет запросы к базе данных, проверяет API в Postman и иногда пишет там простые автотесты. По моему опыту, документации в этой работе много.
Автоматизатор превращает проверки в код, который проходит их сам. Автоматизация всегда идёт после ручного тестирования. Новую функциональность сначала проверяют руками, пишут и приоритизируют кейсы, решают, что из них автоматизировать, и только потом пишут скрипты. На моих проектах автоматизаторы брали тест-кейсы ручных тестировщиков, и первыми в работу шли регресс и смоук. Ночные прогоны запускались в Jenkins, к утру результат был готов, и разбирали его ручные тестировщики или автоматизаторы.
Юнит-тесты и часть интеграционных пишут сами разработчики, иногда ещё до кода, если команда работает по TDD (разработка через тестирование). Автоматизировать всё подряд нельзя. Удобство интерфейса оценивает человек, а автотест проверяет ровно то, что в него заложили.
Почему начинают с ручного тестирования
Первым пунктом своего плана я пишу базу QA: теорию, проектирование тестов, документацию и работу с базовыми инструментами. Курсы автоматизации часто дают её в урезанном виде, в лучшем случае несколькими уроками, а то и одной обзорной лекцией на пару часов. Специалист после такого курса плохо проектирует тесты, не понимает тест-дизайн, слабо вникает в задачи бизнеса и автоматизирует тест-кейсы, которые за него написали другие.
Тест-дизайн нужен и внутри автотеста. Для сценария подбирают набор тестовых данных по техникам тест-дизайна, чтобы тестов хватало для вывода о том, что функция работает, и при этом не было лишних. Шаги и ожидаемый результат в коде автотеста повторяют тест-кейс. Например, если в интернет-магазине доставка бесплатна от 3000 рублей, параметризованный автотест берёт суммы 2999, 3000 и 3001. Это граничные значения, и десяток случайных сумм к ним ничего не добавит.
Поэтому я обычно советую идти в автоматизацию после одного-двух лет ручного тестирования. Это не правило: у каждого свой путь, и начать сразу с автоматизации тоже можно. Разработчики, например, переходят в автотесты и тратят на основы меньше времени, потому что сети и протоколы уже знают. Тест-дизайн и тестовую документацию им всё равно приходится изучать.
Какой язык программирования выбрать
Я выделяю три востребованных языка: Java, Python и JavaScript. Java и Python давно популярны в автоматизации, на Java автотесты пишут дольше всех, и учить её сложнее. Python и JavaScript осваивать проще, а JavaScript в автотестах набирает популярность. Подойдёт любой из трёх, но перед выбором стоит посмотреть вакансии: в разных странах преобладают разные языки, и узкое направление вроде автоматизации на Ruby сузит выбор работы.
Часто советуют писать автотесты на том же языке, что и сам проект. Код тогда проще поддерживать и разработчику, и тестировщику, но это не обязательное условие, и приложение на Java вполне можно проверять тестами на Python.
Язык – это инструмент, его меняют от проекта к проекту, и второй язык после первого даётся заметно легче. На старте хватает основ: переменные и типы данных, методы и функции, циклы, классы и принципы ООП. Переусложнять автотесты циклами и хитрой логикой не стоит, иначе для самих автотестов понадобятся свои тесты.
Фреймворк, паттерны и пирамида тестов
Знать язык для автотестов мало. Поверх него идёт фреймворк автоматизации, то есть библиотека, где типовые действия уже описаны готовыми методами: открыть страницу, нажать кнопку, сравнить значение. В Python тесты запускает pytest, а действия в браузере выполняют подключённые к нему Selenium или Playwright, для JavaScript есть Cypress и Playwright, а Selenium работает с Java и другими языками. На проекте фреймворк собирают под себя из таких библиотек и средств самого языка, и новичок подстраивается под то, что уже есть.
Следующий слой – паттерны автоматизации, правила устройства кода тестов. Самый известный из них, Page Object, собирает все элементы одной страницы в один файл, и тесты берут их оттуда. Паттернов много, и какие нужны, зависит от фреймворка и проекта. В тестах интернет-магазина вход встречается в каждом сценарии с корзиной и заказом. Если разработчики поменяли идентификатор кнопки "Войти", с Page Object локатор правят в одном классе страницы входа, а без него придётся править каждый тест, где он записан. Сюда же относятся параметризованные тесты, когда один сценарий прогоняют на наборе данных.
Дальше разбираются, какие тесты писать. Юнит-тесты обычно пишут разработчики, а автоматизатору остаются интеграционные и API-тесты, тесты графического интерфейса и end-to-end. По пирамиде тестирования быстрых нижних тестов должно быть больше всего, а медленных тестов интерфейса меньше всего. Начинать автоматизацию с тестов интерфейса на проекте, где нет юнит-тестов, – частая ошибка. Рядом стоит подход shift left, при котором тестировщики и автоматизаторы подключаются к работе как можно раньше.
Последний шаг – CI/CD. Автоматизатору уже мало нажать "Собрать" в Jenkins. Он сам настраивает джобы, которые разворачивают автоматизацию на проекте и запускают автотесты, и разбирает их отчёты.
Как начать автоматизацию на своём проекте
Учиться автоматизации проще всего на работе. Стоит поговорить с командой и предложить, что можно автоматизировать. Обычно это регрессионные и смоук-тесты, самые рутинные и долгие. Говорить при этом стоит про деньги: бизнесу важно, сколько он сэкономит и насколько быстрее и проще пойдут релизы.
Допустим, ручной смоук личного кабинета банка занимает у тестировщика два часа, а релизы выходят каждую неделю. Если те же проверки запускаются в Jenkins после каждой сборки, эти часы уходят на новую функциональность, а сломанный вход или перевод виден в отчёте сразу после сборки.
Если компания заинтересована, она поможет разработчиками и менторами, материалами и книгами, иногда оплатит курс. На настоящем проекте учиться выгоднее, чем на учебном, но интересы должны совпасть у вас, работодателя и заказчика, потому что за счёт заказчика учить никого не станут. О возможности автоматизировать стоит спросить ещё на собеседовании.
Автоматизация удешевляет тестирование в будущем, ускоряет процессы и повышает качество продукта, но и она не панацея. Иногда вводить её незачем.
Короткий проект
Автотесты не успеют окупить время, потраченное на их написание.
Ранняя стадия, когда требования часто меняются
Автотесты придётся переписывать вслед за каждым изменением.
Проверки, которые не автоматизируются
Удобство интерфейса (usability) оценивает человек, и автотест здесь не поможет.
Видеоуроки, шпаргалки и задания
В ролике "Автоматизация тестирования. С чего начать и как перейти?" я отвечаю на вопрос подписчика и рисую порядок изучения на доске. Сам я не автоматизатор: план составлен по пройденному курсу автоматизации и по работе рядом с автоматизаторами. О том, чем заняты ручные тестировщики и автоматизаторы, какой язык выбрать и куда расти дальше, я говорю на стриме "Автоматизация и ручное тестирование" с коллегой, которая сама писала автотесты.
В бесплатном базовом курсе по тестированию автотесты встречаются в уроке "CI/CD для тестировщика + демо в Jenkins": там они запускаются в конвейере, а после теории есть задания. Шпаргалка по пирамиде показывает, как разложить проверки по уровням, а в шпаргалке по скриптам Postman собраны готовые проверки ответа, с которых удобно начать первые автотесты.
- Урок курсаУрок о CI/CD с заданиями – бесплатно
- Мой видеоурокавтоматизация тестирования, с чего начать и как перейти
- Мой видеоурокавтоматизация и ручное тестирование, обзор
- Шпаргалкауровни тестирования и пирамида
- Шпаргалкаскрипты и тесты в Postman
- ШпаргалкаCI/CD и тестовые окружения
- СтатьяCI/CD для тестировщика и Jenkins
- СтатьяАвтотесты в Postman
Курсы по теме
Вопросы и ответы
С чего начать изучение автоматизации тестирования?
С базы ручного тестирования: теории, тест-дизайна и документации. Затем выбрать язык программирования (чаще Java, Python или JavaScript) и выучить его основы, освоить фреймворк автоматизации и паттерны вроде Page Object, разобраться в пирамиде тестирования и в том, как автотесты запускаются в CI/CD.
Можно ли сразу пойти в автоматизацию без опыта ручного тестирования?
Можно, у каждого свой путь. Я обычно советую сначала год-два поработать ручным тестировщиком, потому что курсы автоматизации дают базу тестирования очень коротко. Тест-дизайн и тестовую документацию автоматизатору всё равно придётся знать: по ним подбирают данные и шаги для автотестов.
Какой язык программирования выбрать для автотестов?
Чаще всего выбирают Java, Python или JavaScript. Python и JavaScript осваивать проще, Java сложнее, но на ней написано много проектов автоматизации. Перед выбором стоит посмотреть вакансии в своей стране. Язык – инструмент: второй даётся легче первого, и на новом проекте его можно сменить.
Что автоматизируют в первую очередь?
Регрессионные и смоук-тесты. Их прогоняют на каждой сборке, и вручную это самая рутинная и долгая работа. Новую функциональность сначала проверяют руками, а в автотесты она попадает, когда кейсы написаны и решено, что их стоит автоматизировать.
Заменит ли автоматизация ручное тестирование?
Нет. Автотест проверяет ровно то, что в него заложили. Новую функциональность сначала тестируют руками, удобство интерфейса оценивает человек, а на коротком проекте или при постоянно меняющихся требованиях автоматизация может не окупиться.
Как перейти в автоматизацию на текущем проекте?
Поговорить с командой, предложить автоматизировать самое рутинное, обычно регресс и смоук, и объяснить, сколько времени и денег это сэкономит. Заинтересованная компания помогает менторами и материалами, а иногда оплачивает курс. Учиться на настоящем проекте выгоднее, чем на учебном.
Посмотреть программы курсов
Программа каждого курса открыта целиком: видны все модули, уроки и число шагов.

