Введение в автоматизированное тестирование
Note
В этом блоке мы разберём основы автоматизированного тестирования, постепенно перейдём к Python и подготовим базу для дальнейшей работы с PyTest, API-тестами и UI-тестированием через Playwright.
Что разберём
- Что такое автоматизированное тестирование
- Какие бывают типы автотестов
- Кто такие авто-тестеры
- Чем занимается AQA-инженер
- Какие инструменты используются в автоматизации
- Как зайти в профессию авто-тестера
- Практика
1. Что такое автоматизированное тестирование
1.1 Определение
Автоматизированное тестирование — это подход, при котором проверка приложения выполняется не вручную, а с помощью заранее написанных тестовых скриптов и специальных инструментов.
Вместо того чтобы каждый раз руками проходить одни и те же сценарии, мы пишем код, который делает эти проверки за нас: открывает страницы, отправляет запросы, проверяет ответы, сравнивает фактический результат с ожидаемым.
Автотесты можно запускать многократно: локально, на сервере, по расписанию, перед релизом или после каждого изменения в коде.
Главная идея простая: всё, что часто повторяется и имеет понятный ожидаемый результат, можно переложить на автоматизацию.
1.2 Зачем автоматизация нужна в IT
В реальном проекте код меняется постоянно: добавляются фичи, исправляются баги, обновляются зависимости, меняется логика работы приложения. Каждое такое изменение может неожиданно сломать уже существующий функционал.
Если проверять всё вручную, команда быстро упрётся в ограничение по времени. Чем больше продукт, тем дороже становится ручная регрессия.
Автотесты решают эту проблему: они быстро проходят ключевые сценарии и помогают понять, не сломалась ли важная часть продукта после изменений.
Исключение
Фраза «один раз написали тесты — и забыли» в реальной работе не работает.
Автотесты нужно сопровождать: обновлять после изменений в продукте, чинить нестабильные проверки, адаптировать под новую бизнес-логику и следить за инфраструктурой прогонов. Поэтому у AQA-инженера всегда есть работа.
1.3 Преимущества автоматизированного тестирования
Скорость
Автотесты выполняют большое количество проверок быстрее, чем человек. Особенно хорошо это заметно на регрессионных наборах, где нужно много раз проходить одни и те же сценарии.
Точность
Скрипт не устает, не отвлекается и не забывает шаги. Если тест написан корректно, он каждый раз выполняет проверку одинаково.
Повторяемость
Один и тот же тест можно запускать сколько угодно раз: локально, в CI/CD, перед релизом, ночью по расписанию или после каждого pull request.
Экономия времени
Автоматизация снимает с команды часть рутинных проверок. Освободившееся время можно тратить на тест-дизайн, исследовательское тестирование, анализ рисков, работу с багами и улучшение качества тестового покрытия.
2. Основные типы автоматизированного тестирования
2.1 Unit-тесты
Unit-тесты проверяют небольшие изолированные части программы: функцию, метод, отдельный модуль.
В рамках этого курса мы не делаем на них основной упор, но понимать их назначение нужно. Обычно такие тесты пишут разработчики, потому что они ближе всего к внутренней логике кода.
Пример: есть функция, которая складывает два числа. Unit-тест проверяет, что она действительно возвращает сумму, а не другой результат.
# Пример unit-теста для функции сложения
def add(a, b):
return a + b
def test_add():
assert add(2, 3) == 5
assert add(-1, 1) == 0
assert add(0, 0) == 02.2 UI-тесты
UI-тесты проверяют пользовательский интерфейс: страницы, формы, кнопки, поля ввода, переходы между экранами.
Такие тесты имитируют действия пользователя: открыть страницу, ввести логин и пароль, нажать кнопку, проверить появление нужного текста или элемента.
Пример: проверяем, что после нажатия кнопки «Войти» пользователь попадает на главную страницу.
# Пример UI-теста с использованием Selenium
from selenium import webdriver
from selenium.webdriver.common.by import By
def test_login():
driver = webdriver.Chrome()
driver.get("https://example.com/login")
username_input = driver.find_element(By.ID, "username")
password_input = driver.find_element(By.ID, "password")
login_button = driver.find_element(By.ID, "loginButton")
username_input.send_keys("test_user")
password_input.send_keys("password123")
login_button.click()
assert "Welcome" in driver.page_source
driver.quit()UI-тесты полезны, но требуют аккуратной поддержки: интерфейс часто меняется, локаторы ломаются, а прогон может быть медленнее, чем на уровне API.
2.3 API-тесты
API-тесты проверяют взаимодействие между частями системы через программные интерфейсы.
Вместо кликов по интерфейсу мы отправляем HTTP-запросы и проверяем ответы: статус-коды, JSON, заголовки, структуру данных, бизнес-логику.
Пример: отправляем запрос на создание пользователя и проверяем, что API вернул корректный ответ.
# Пример API-теста с использованием requests
import requests
def test_create_user():
url = "https://api.example.com/users"
data = {
"name": "John Doe",
"email": "johndoe@example.com"
}
response = requests.post(url, json=data)
assert response.status_code == 201
response_data = response.json()
assert response_data["name"] == "John Doe"
assert response_data["email"] == "johndoe@example.com"API-тесты обычно быстрее и стабильнее UI-тестов, поэтому их часто автоматизируют в первую очередь.
2.4 Регрессионные тесты
Регрессионные тесты проверяют, что новый код не сломал старую функциональность.
Например, команда добавила новую фичу, но после этого нужно убедиться, что регистрация, авторизация, корзина, оплата и другие уже существующие сценарии продолжают работать.
Регрессионный тест может быть и UI-тестом, и API-тестом. Его определяет не технический уровень, а цель: убедиться, что после изменений не появился регресс.
# Пример регрессионного UI-теста:
# проверяем, что товар остается в корзине после обновления страницы
from selenium import webdriver
from selenium.webdriver.common.by import By
def test_cart_persistence():
driver = webdriver.Chrome()
driver.get("https://example.com")
add_to_cart_button = driver.find_element(By.ID, "addToCartButton")
add_to_cart_button.click()
cart_count = driver.find_element(By.ID, "cartCount").text
assert cart_count == "1"
driver.refresh()
cart_count = driver.find_element(By.ID, "cartCount").text
assert cart_count == "1"
driver.quit()Итог по типам тестов
Разные виды автотестов закрывают разные задачи. Unit-тесты проверяют мелкие части кода, API-тесты — взаимодействие сервисов, UI-тесты — пользовательский путь, регрессионные тесты — сохранность уже работающего функционала.
О том, где автоматизация действительно оправдана, а где выгоднее остаться на ручном тестировании, подробнее поговорим в 01.02 - Знакомство с AQA.
3. Кто такие авто-тестеры
3.1 Роль авто-тестера в команде
AQA-инженер — это специалист, который пишет код для проверки другого кода.
Он не просто «кликает приложение», а проектирует проверки, автоматизирует сценарии, анализирует результаты прогонов, помогает команде быстрее находить проблемы и снижать риск поломок после изменений.
С точки зрения навыков авто-тестер уже близок к разработчику. От него ждут знания языка программирования хотя бы на уровне junior-разработчика, понимания архитектуры тестов, умения читать логи, работать с Git, запускать тесты и разбираться в причинах падений.
3.2 Основные задачи авто-тестера
Написание тестов
AQA-инженер создаёт автоматизированные проверки для разных уровней приложения: API, UI, интеграционных сценариев, регрессии.
Поддержка тестов
Автотесты нужно обновлять вместе с продуктом. Если изменилась логика, API-контракт, локатор или тестовые данные — тест должен быть адаптирован.
Запуск тестов и анализ результатов
После прогона важно не просто увидеть красный статус, а понять причину: баг в продукте, ошибка теста, нестабильная инфраструктура, проблемы с окружением или тестовыми данными.
Работа с CI/CD
Автотесты часто запускаются автоматически при изменении кода. Для этого их подключают к CI/CD-пайплайнам, например через Jenkins или аналогичные инструменты.
3.3 Какие навыки нужны авто-тестеру
Программирование
Для Python AQA нужно уметь писать читаемый код, работать с функциями, классами, коллекциями, исключениями, модулями, зависимостями и библиотеками.
Инструменты тестирования
В работе используются PyTest, Selenium, Playwright, Requests, Allure, Jenkins, Docker и другие инструменты. Не нужно знать всё сразу, но важно понимать, для какой задачи какой инструмент применяется.
Логическое мышление
Авто-тестеру нужно уметь разложить сценарий на шаги, выделить ожидаемый результат, понять, где может появиться ошибка, и корректно проверить гипотезу.
Коммуникация
AQA взаимодействует с разработчиками, ручными тестировщиками, аналитиками, менеджерами и DevOps. Нужно уметь объяснять проблему так, чтобы её можно было быстро воспроизвести и исправить.
3.4 Обычный рабочий день AQA
Примерный день AQA-инженера может выглядеть так:
- Проверить ночной прогон автотестов.
- Посмотреть, какие тесты упали и по какой причине.
- Перезапустить нестабильные проверки или прогнать их локально.
- Прийти на daily.
- Проверить Scrum/Kanban-доску и календарь встреч.
- Подготовить отчёт по результатам прогона.
- Взять задачи в работу.
- Писать тестовые артефакты, заниматься тест-дизайном и автоматизацией.
- Следить за рабочими чатами.
- Взаимодействовать с командой, уточнять требования, читать документацию.
- Защищать заведённые баги и помогать с их анализом.
Итог
Авто-тестер отвечает не только за написание тестов. Его задача шире: помогать команде быстрее выпускать изменения и при этом не терять контроль над качеством продукта.
4. Чем занимаются авто-тестеры
4.1 Написание и поддержка тестов
Большая часть работы AQA связана с созданием и сопровождением автотестов.
Сначала инженер проектирует сценарий: что проверяем, какие данные нужны, какой результат ожидаем. Затем пишет код, запускает тест, проверяет стабильность и добавляет его в общий набор.
Но написать тест — только половина работы. Продукт меняется, и тесты должны меняться вместе с ним. Поэтому поддержка автотестов — нормальная постоянная часть профессии.
4.2 Выбор инструментов и настройка окружения
AQA должен понимать, какие инструменты подходят под конкретную задачу.
Для API удобно использовать Requests и PyTest. Для UI — Playwright или Selenium. Для отчётности — Allure. Для автоматических запусков — CI/CD. Для изоляции окружений — Docker.
Также авто-тестер участвует в настройке окружения: локального, тестового, CI-окружения. Без стабильного окружения даже хорошо написанные тесты будут давать шумные и бесполезные результаты.
4.3 Запуск тестов и анализ результатов
После написания тесты нужно запускать: вручную, локально, через CI/CD, по расписанию или перед релизом.
После прогона начинается анализ. Нужно понять:
- какие тесты прошли;
- какие упали;
- падение связано с багом или с самим тестом;
- можно ли воспроизвести проблему локально;
- требуется ли дефект, исправление теста или настройка окружения.
4.4 Взаимодействие с командой
AQA работает не изолированно. Он общается с разработчиками, тестировщиками, аналитиками, менеджерами и иногда с DevOps.
Он помогает уточнять требования, обсуждать риски, объяснять баги, согласовывать тестовое покрытие и предоставлять команде понятную картину качества продукта.
Итог
Работа авто-тестера — это не только код. Это сочетание разработки, тест-дизайна, анализа, инфраструктуры и коммуникации.
5. Какие инструменты используют авто-тестеры
Python
Python — основной язык курса. Он хорошо подходит для автоматизации благодаря читаемому синтаксису, большому количеству библиотек и низкому порогу входа.
Python используется для написания тестов, вспомогательных функций, фикстур, генерации тестовых данных, работы с API и интеграции с другими инструментами.
PyTest
PyTest — фреймворк для написания и запуска тестов на Python.
Он удобен для AQA, потому что поддерживает:
- фикстуры;
- параметризацию;
- группировку тестов;
- плагины;
- интеграцию с отчётами;
- гибкую структуру проекта.
Requests
Requests — библиотека для отправки HTTP-запросов из Python.
С её помощью удобно тестировать API: отправлять GET, POST, PUT, PATCH, DELETE запросы, передавать JSON, работать с заголовками, токенами, cookies и проверять ответы сервера.
Playwright
Playwright — инструмент для UI-автоматизации.
Он позволяет управлять браузером из кода: открывать страницы, кликать по элементам, вводить данные, проверять состояние интерфейса и делать скриншоты.
По сравнению с Selenium, Playwright во многих сценариях даёт более удобный API и встроенные ожидания, что упрощает работу с динамическими интерфейсами.
Selenium
Selenium — один из классических инструментов для UI-автоматизации. Он широко используется в проектах и часто встречается в вакансиях.
Даже если основной фокус курса будет смещён в сторону Playwright, понимать Selenium полезно: многие существующие автотесты в компаниях написаны именно на нём.
Jenkins и CI/CD
Jenkins и другие CI/CD-инструменты позволяют запускать автотесты автоматически: после изменения кода, перед релизом или по расписанию.
Для AQA важно понимать, как тесты попадают в pipeline, где смотреть логи, как анализировать падения и как отличать дефект продукта от проблем инфраструктуры.
Docker
Docker помогает запускать приложение и тесты в изолированном окружении.
Это снижает количество проблем из серии «у меня локально работает», потому что окружение можно описать и воспроизвести одинаково на разных машинах.
Git
Git нужен для работы с кодом тестов: создавать ветки, фиксировать изменения, открывать pull request, разбирать конфликты и работать в команде.
Для AQA это обязательный навык, потому что автотесты — такой же код, как и код продукта.
Allure
Allure используется для красивых и понятных отчётов по автотестам.
Отчёт помогает быстро понять, какие тесты упали, на каком шаге, с каким сообщением, в каком окружении и с какими вложениями.
6. Как стать авто-тестером
Путь в AQA строится постепенно. Не нужно пытаться сразу выучить все инструменты. Важно двигаться слоями.
Базовый маршрут
- Освоить основы тестирования.
- Разобраться с клиент-серверной архитектурой.
- Выучить Python на уровне, достаточном для написания тестового кода.
- Научиться работать с PyTest.
- Освоить API-тестирование через Requests.
- Перейти к UI-автоматизации через Playwright или Selenium.
- Разобраться с Git.
- Научиться читать логи и анализировать падения.
- Подключить тесты к CI/CD.
- Постепенно улучшать архитектуру тестового проекта.
Главная цель — не просто писать тесты, а понимать, какую проблему они решают и какую ценность дают команде.
7. Практика
Задание
Выписать себе в удобное место основные темы модуля и связать их между собой.
Минимальный набор тем:
- автоматизированное тестирование;
- ручное тестирование;
- AQA-инженер;
- UI-тесты;
- API-тесты;
- unit-тесты;
- регрессионные тесты;
- Python;
- PyTest;
- Requests;
- Playwright;
- Selenium;
- CI/CD;
- Git;
- Docker;
- Allure;
- интерпретатор;
- IDE;
- PyCharm;
- виртуальное окружение.
Темы про окружение (интерпретатор, IDE, PyCharm, виртуальное окружение) подробно разберём в 01.03 - Подготовка окружения.
Цель задания — собрать карту модуля и увидеть, как инструменты и понятия связаны между собой.
Далее: 01.02 - Знакомство с AQA ➡️ Модуль: 01 - MOC