Введение в автоматизированное тестирование

Note

В этом блоке мы разберём основы автоматизированного тестирования, постепенно перейдём к Python и подготовим базу для дальнейшей работы с PyTest, API-тестами и UI-тестированием через Playwright.

Что разберём

  1. Что такое автоматизированное тестирование
  2. Какие бывают типы автотестов
  3. Кто такие авто-тестеры
  4. Чем занимается AQA-инженер
  5. Какие инструменты используются в автоматизации
  6. Как зайти в профессию авто-тестера
  7. Практика

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) == 0

2.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-инженера может выглядеть так:

  1. Проверить ночной прогон автотестов.
  2. Посмотреть, какие тесты упали и по какой причине.
  3. Перезапустить нестабильные проверки или прогнать их локально.
  4. Прийти на daily.
  5. Проверить Scrum/Kanban-доску и календарь встреч.
  6. Подготовить отчёт по результатам прогона.
  7. Взять задачи в работу.
  8. Писать тестовые артефакты, заниматься тест-дизайном и автоматизацией.
  9. Следить за рабочими чатами.
  10. Взаимодействовать с командой, уточнять требования, читать документацию.
  11. Защищать заведённые баги и помогать с их анализом.

Итог

Авто-тестер отвечает не только за написание тестов. Его задача шире: помогать команде быстрее выпускать изменения и при этом не терять контроль над качеством продукта.

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 строится постепенно. Не нужно пытаться сразу выучить все инструменты. Важно двигаться слоями.

Базовый маршрут

  1. Освоить основы тестирования.
  2. Разобраться с клиент-серверной архитектурой.
  3. Выучить Python на уровне, достаточном для написания тестового кода.
  4. Научиться работать с PyTest.
  5. Освоить API-тестирование через Requests.
  6. Перейти к UI-автоматизации через Playwright или Selenium.
  7. Разобраться с Git.
  8. Научиться читать логи и анализировать падения.
  9. Подключить тесты к CI/CD.
  10. Постепенно улучшать архитектуру тестового проекта.

Главная цель — не просто писать тесты, а понимать, какую проблему они решают и какую ценность дают команде.

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