✅ Решения самопроверки
⚡ Краткие ответы
- 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 (например, из баг-трекера) без запуска отчёта.