IT Academy
Справочник курса

Автоматизация тестирования

Все объяснения, задачи и лабораторная в одном месте.

Можно сохранить страницу в PDF через печать браузера. Для печати разборы ответов раскрываются автоматически.

1. Test pyramid и выбор уровня

Объяснение

Уровень теста выбирают по риску и стоимости обратной связи. Много E2E не заменяет тестов вычислений. Проверка должна падать по понятной причине и быть независимой от соседних тестов.

Задача для самостоятельного решения

Где проверить формулу скидки для ста наборов данных?

Показать разбор ответа

В быстрых unit-тестах. E2E достаточно подтвердить соединение формы с логикой на нескольких ключевых сценариях.

2. pytest/JUnit и test fixtures

Объяснение

Fixture создаёт нужное состояние и убирает собственные ресурсы. Общие изменяемые данные связывают тесты и вызывают зависимость от порядка. Параметризация покрывает варианты без копирования кода.

Задача для самостоятельного решения

Почему тест проходит отдельно и падает в наборе?

Показать разбор ответа

Возможны общая БД, изменённые globals, время или окружение. Создавайте изоляцию и воспроизводите разные порядки запуска.

3. API contracts и integration tests

Объяснение

Контракт проверяет согласованность сторон API. Integration-тест проверяет реальную сериализацию, хранилище и ошибки. Mock должен моделировать контракт, а не выдуманное удобное поведение.

Задача для самостоятельного решения

Что проверять кроме статуса 200?

Показать разбор ответа

Схему, смысл полей, права, побочные эффекты и неверные входы. Успешный HTTP-статус может сопровождать неправильный результат.

4. Browser automation и Page Objects

Объяснение

Browser automation должна взаимодействовать через устойчивые роли и имена. Page Object собирает действия страницы, но не должен скрывать все ожидания. Auto-wait ждёт условия, sleep лишь время.

Задача для самостоятельного решения

Чем заменить sleep(5) после отправки?

Показать разбор ответа

Ожиданием видимого сообщения успеха или конкретного состояния ответа. Это быстрее при быстром UI и надёжнее при медленном.

5. Parallel runs, test data и isolation

Объяснение

Параллельные тесты требуют уникальных данных, портов и ресурсов. Общая учётная запись может создавать гонки. Cleanup должен удалять только объекты собственного теста.

Задача для самостоятельного решения

Как избежать конфликта двух тестов создания пользователя?

Показать разбор ответа

Использовать уникальный идентификатор запуска и независимые fixtures. Не очищать всю таблицу в teardown параллельного теста.

6. Flaky analysis, reporting и maintenance

Объяснение

Flaky-тест даёт разные результаты при одинаковом ожидаемом поведении. Retry может снизить шум, но скрыть гонку. Диагностика требует trace, логов, времени и состояния.

Задача для самостоятельного решения

Когда считать flaky исправленным?

Показать разбор ответа

После установления причины, изменения синхронизации/изоляции и повторов соответствующего конкурентного сценария; одно успешное повторение недостаточно.

Практика

Лабораторная работа

Подготовка

Python 3 и pytest в отдельном учебном окружении; файл test_price.py.

Учебный пример

import pytest
def discount(price,percent):
    if price < 0 or not 0 <= percent <= 100: raise ValueError()
    return price*(100-percent)/100

@pytest.mark.parametrize('price,percent,expected',[(100,10,90),(100,0,100),(100,100,0)])
def test_discount(price,percent,expected):
    assert discount(price,percent) == expected

def test_invalid():
    with pytest.raises(ValueError): discount(100,101)

Как работает пример и что ожидать

pytest должен показать четыре успешные проверки. Деньги в реальном приложении требуют согласованного представления и округления; этот пример демонстрирует параметризацию, а не готовую финансовую библиотеку.

Итоговая работа

Добавьте fixtures с изолированной БД, API-тест прав и E2E через доступные имена. Запустите параллельно и в другом порядке. Найдите и устраните искусственную гонку без увеличения sleep.

Проверка результата

1. Опишите исходные данные и условия запуска, чтобы другой человек мог повторить работу.
2. Приложите результат обычного сценария и сравните его с ожидаемым.
3. Проверьте неверный вход, граничный случай и отказ зависимости, если она есть.
4. Объясните выбранное решение и известное ограничение.
5. Сохраните исправления после самопроверки вместе с примером, который раньше не работал.

Как оценить работу

По каждому пункту поставьте 0 (не выполнено), 1 (выполнено с пробелами) или 2 (результат воспроизводим и объяснён). Если обязательный сценарий не работает, вернитесь к нему независимо от общей суммы. Это рубрика самопроверки: сайт не исполняет присланный код и не выдаёт автоматическую оценку проекта.