✅ Решения самопроверки

← К оглавлению урока | ← К заданиям

⚡ Краткие ответы

  • Allure — инструмент для интерактивных HTML-отчётов по тестам
  • Пирамида: Unit (быстрые) → Integration → UI (дорогие)
  • Selenium: управляет браузером через WebDriver, имитирует действия пользователя
  • @allure.step + параметр: @allure.step("Удалить '{id}'") → id подставится автоматически
  • allure.attach: allure.attach(sql, "SQL", allure.attachment_type.TEXT)

Блок 1: Основы автоматизации

Задание 1. Что такое автоматизация тестирования?

Решение (из лекции): Автоматизация тестирования — это процесс написания и использования скриптов для автоматической проверки программного обеспечения. Нужна для ускорения тестирования, уменьшения количества рутинных задач, повышения стабильности проверок и улучшения качества продукта.

Задание 2. Преимущества и недостатки

Решение (из лекции):
  • Преимущества: высокая скорость, повторяемость тестов, уменьшение человеческого фактора, возможность тестирования ночью
  • Недостатки: сложность поддержки тестов, высокая начальная стоимость, ограниченная способность находить UI-ошибки

Задание 3. Пирамида тестирования

Решение (из лекции):
  • Unit-тесты — наиболее быстрые, покрывают отдельные модули кода
  • Интеграционные тесты — проверяют взаимодействие компонентов
  • UI-тесты — самые дорогие в обслуживании, тестируют приложение с точки зрения пользователя

Блок 2: Selenium WebDriver

Задание 4. Что такое Selenium?

Решение (из лекции): Selenium — инструмент для автоматизации тестирования веб-приложений. Управляет браузером через WebDriver, имитируя действия пользователя: нажатие кнопок, ввод текста, навигацию по страницам.

Задание 5. Компоненты Selenium

Решение (из лекции):
  • Selenium WebDriver — основная библиотека для управления браузером
  • Selenium Grid — инструмент для параллельного запуска тестов
  • Selenium IDE — плагин для записи и воспроизведения тестов

Задание 6. Локаторы в Selenium

Решение (из лекции): Локаторы — способы поиска элементов на веб-странице.
driver.find_element(By.ID, "username")          # по id
driver.find_element(By.CLASS_NAME, "btn")       # по классу
driver.find_element(By.CSS_SELECTOR, "#form input") # CSS
driver.find_element(By.XPATH, "//button[@type='submit']") # XPath
driver.find_element(By.NAME, "q")               # по name

Задание 7. Неявное vs явное ожидание

Решение:
  • driver.implicitly_wait(10) — глобальное ожидание: ждёт элемент до 10 сек при каждом find_element. Менее гибко.
  • WebDriverWait(driver, 10).until(EC.visibility_of_element_located(...)) — явное: ждёт конкретное условие. Рекомендуется для AJAX и динамических страниц.

Блок 3: Page Object Model

Задание 8. Паттерн POM

Решение: Page Object Model — паттерн, где каждая страница представлена отдельным классом с методами-действиями. Тесты работают с методами страниц, а не с локаторами напрямую. Решает проблему дублирования локаторов и упрощает поддержку при изменении UI.

Задание 9. BasePage

Решение: BasePage — базовый класс всех страниц. Содержит общие методы: find(locator), click(locator), input(locator, text), wait_for_element(locator). Конкретные страницы наследуют BasePage и добавляют специфичные действия.

Задание 10. scope="class"

Решение: @pytest.fixture(scope="class") создаёт фикстуру один раз для всего класса, а не пересоздаёт для каждого теста. Для Selenium это означает один запуск браузера на весь класс тестов — значительно быстрее, чем scope="function".

Блок 4: Requests и API-тестирование

Задание 11. POST-запрос с JSON

# test_api.py
import requests

resp = requests.post(
    "https://x-clients-be.onrender.com/auth/login",
    json={"user": "raphael", "password": "cool-but-crude"}
)
assert resp.status_code == 200
token = resp.json()["userToken"]

Задание 12. resp.text vs resp.json()

Решение (из лекции):
  • resp.text — всегда строка, даже если содержимое JSON. Нельзя обращаться к полям через data["key"].
  • resp.json() — автоматически парсит JSON в dict/list. Работаешь как со словарём: resp.json()["id"].

Задание 13. Зачем класс-обёртка?

Решение (из лекции): Класс (CompanyApi) убирает дублирование requests.get/post() в каждом тесте, инкапсулирует URL и проверки статусов. При изменении API — правим только класс, тесты остаются неизменными.

Блок 5: Allure Framework

Задание 14. Что такое Allure?

Решение (из лекции): Allure — инструмент с открытым исходным кодом для генерации интерактивных и наглядных отчётов по результатам автоматизированного тестирования. Визуализирует результаты, позволяет прикреплять логи и вложения, группировать тесты по признакам.

Задание 15. Преимущества Allure

Решение (из лекции):
  • Визуализация результатов с интерактивными диаграммами
  • Цветовая индикация статусов (passed/failed/skipped)
  • Группировка тестов по фичам, историям, эпикам
  • История запусков и сравнение с предыдущими прогонами
  • Вложения: скриншоты, SQL-запросы, логи

Задание 16. Декораторы Allure

Решение (из лекции):
@allure.epic("компании")      # принадлежность к модулю
@allure.feature("READ")       # функциональная группа
@allure.story("Получение списка")  # сценарий
@allure.title("Получить все компании")  # название в отчёте
@allure.severity("blocker")   # критичность
@allure.id("ITCH-1")          # ID для кода (не в отчёте)
@allure.description("...")    # описание

Задание 17. Шаги и вложенные шаги

Решение (из лекции):
# Простой шаг
with allure.step("Получить список"):
    result = api.get_company_list()

# Вложенные шаги
with allure.step("Создать компанию"):
    with allure.step("Сгенерировать название"):
        name = "Test"
    with allure.step("Вызвать API"):
        result = api.create_company(name)

Задание 18. Вложение в отчёт

Решение (из лекции):
# Вложение SQL-запроса
allure.attach(
    sql_query_text,
    "SQL-запрос",
    allure.attachment_type.TEXT
)

# Вложение скриншота
allure.attach(
    driver.get_screenshot_as_png(),
    "Скриншот",
    allure.attachment_type.PNG
)

Задание 19. Автоматизация запуска

Решение (из лекции): Создать скрипт run.sh (Linux/Mac) или run.ps1 (Windows), который запускает pytest --alluredir=allure-results, генерирует отчёт через allure generate allure-results -o allure-report --clean и открывает его через allure open allure-report.

Задание 20. Почему @allure.id не в отчёте?

Решение (из лекции): ID тестов (@allure.id) не отображаются в отчётах Allure — используются исключительно для удобства чтения и навигации в коде. Позволяют быстро найти тест по его ID (например, из баг-трекера) без запуска отчёта.