🏠 Итоговая самопроверка курса Auto QA

← К оглавлению урока

⚡ Финальный чек-лист

  • Умею писать pytest-тесты с assert и фикстурами
  • Умею управлять браузером через Selenium WebDriver
  • Знаю все основные локаторы: By.ID, By.CSS_SELECTOR, By.XPATH
  • Умею применять явные ожидания (WebDriverWait + EC)
  • Знаю паттерн Page Object Model, умею создавать BasePage
  • Умею тестировать HTTP API через requests
  • Умею добавлять Allure-разметку, шаги, вложения к тестам
Это не LMS-ДЗ. Summary session 8 — финальный урок-повторение. Отдельного домашнего задания в LMS нет. Здесь — итоговая самопроверка с практическим заданием, которое объединяет все темы курса. Убедитесь, что прошли финальный тест и заполнили анкету обратной связи по модулю (из лекции: «Важное задание»).

Итоговый чек-лист знаний

Пройдите по каждому пункту и убедитесь, что можете ответить без подсказки.

Блок 1: Unit-тесты и pytest

  • Знаете разницу между unittest и pytest
  • Умеете писать тесты с assert, @pytest.fixture, @pytest.mark.parametrize
  • Понимаете пирамиду тестирования: Unit → Integration → UI
  • Знаете, что такое scope у фикстуры: function / class / module / session

Блок 2: Selenium WebDriver

  • Умеете запустить браузер, открыть URL, найти элемент и выполнить действие
  • Знаете все локаторы: By.ID, By.NAME, By.CLASS_NAME, By.CSS_SELECTOR, By.XPATH, By.LINK_TEXT
  • Умеете работать с явными ожиданиями: WebDriverWait(driver, 10).until(EC.xxx)
  • Знаете, когда использовать implicitly_wait, а когда — WebDriverWait
  • Умеете работать с Alert, iframe, вкладками, ActionChains

Блок 3: Page Object Model

  • Понимаете суть паттерна POM: страница = класс с методами-действиями
  • Умеете создать BasePage с общими методами
  • Знаете, как организовать BaseTest с фикстурой управления драйвером
  • Умеете использовать scope="class" для оптимизации

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

  • Умеете отправлять GET, POST, PATCH, DELETE через requests
  • Знаете объект Response: status_code, json(), text, headers
  • Умеете создать класс-обёртку (например, CompanyApi)
  • Всегда проверяете status_code перед чтением тела ответа

Блок 5: Allure-отчётность

  • Умеете установить и запустить Allure с pytest
  • Знаете все декораторы: @allure.epic/feature/story/title/severity/id
  • Умеете добавлять шаги через with allure.step() и @allure.step
  • Умеете добавлять вложения через allure.attach()
  • Знаете, что @allure.id не отображается в отчёте Allure

Подготовка окружения для финальной практики

1. Виртуальное окружение (PowerShell)

# Создать виртуальное окружение
python -m venv venv

# Активировать
venv\Scripts\Activate.ps1

# Установить все зависимости курса
pip install pytest allure-pytest selenium webdriver-manager requests sqlalchemy

2. Структура финального проекта

final_project/
├── venv/
├── pages/
│   ├── base_page.py        # BasePage — общие методы Selenium
│   └── login_page.py       # Конкретная страница (пример)
├── api/
│   ├── company_api.py      # CompanyApi с @allure.step
│   └── company_table.py    # CompanyTable с @allure.step
├── tests/
│   ├── conftest.py         # Фикстуры pytest
│   └── test_companies.py   # Тесты с Allure-разметкой
├── run.ps1                 # Скрипт автозапуска (Windows)
└── requirements.txt

Финальное практическое задание

Соберите всё изученное в один проект: возьмите тесты CompanyApi из урока 15, добавьте к ним полную Allure-разметку и настройте автоматическую генерацию отчёта.

Шаг 1: Полная разметка тестового класса

# tests/test_companies.py
import allure
from api.company_api import CompanyApi
from api.company_table import CompanyTable

BASE_URL = "https://x-clients-be.onrender.com"

@allure.epic("компании")
@allure.severity("blocker")
class TestCompanies:
    api = CompanyApi(BASE_URL)
    # db = CompanyTable("postgresql://...")  # если есть доступ к БД

    @allure.id("ITCH-1")
    @allure.story("Получение списка компаний")
    @allure.feature("READ")
    @allure.title("Получение полного списка организаций")
    def test_get_companies(self):
        result = self.api.get_company_list()
        assert isinstance(result, list)
        assert len(result) > 0

    @allure.id("ITCH-2")
    @allure.story("Получение списка компаний")
    @allure.feature("READ")
    @allure.title("Получение списка активных организаций")
    @allure.description("Запрос организаций с параметром active = true")
    def test_get_active_companies(self):
        result = self.api.get_company_list(params_to_add={"active": "true"})
        for company in result:
            assert company.get("isActive") is True

    @allure.id("ITCH-3")
    @allure.story("Создание компаний")
    @allure.feature("CREATE")
    @allure.title("Создание организации")
    def test_add_company(self):
        with allure.step("Получить количество организаций ДО"):
            len_before = len(self.api.get_company_list())
        with allure.step("Создать организацию"):
            company = self.api.create_company("AutoTest Co", "Created by autotest")
            new_id = company["id"]
        with allure.step("Проверить, что список вырос на 1"):
            len_after = len(self.api.get_company_list())
            assert len_after - len_before == 1
        with allure.step("Удалить тестовую организацию"):
            self.api.delete_company(new_id)

Шаг 2: run.ps1 — автозапуск (Windows)

# run.ps1
$results = "allure-results"
$report  = "allure-report"

Remove-Item -Recurse -Force $results -ErrorAction SilentlyContinue
Remove-Item -Recurse -Force $report  -ErrorAction SilentlyContinue

pytest tests/ --alluredir=$results -v
allure generate $results -o $report --clean
allure open $report

Шаг 3: Запуск

# В PowerShell из папки проекта
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process
.\run.ps1

Шаг 4: Проверка в VS Code

// .vscode/launch.json
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "pytest: test_companies (Allure)",
            "type": "debugpy",
            "request": "launch",
            "module": "pytest",
            "args": [
                "tests/test_companies.py",
                "-v",
                "--alluredir=allure-results"
            ],
            "cwd": "${workspaceFolder}"
        }
    ]
}

Запуск через F5: тесты выполнятся с генерацией Allure-данных. Поставьте точку останова на assert len_after - len_before == 1 — сможете увидеть значения переменных в панели Variables.

Связь с теорией

Поздравляем с завершением курса Auto QA!

Вы прошли путь от первых unit-тестов до полноценных API-тестов с Allure-отчётностью. Теперь в вашем арсенале:

  • pytest с фикстурами и параметризацией
  • Selenium WebDriver: локаторы, ожидания, ActionChains, POM
  • API-тестирование через requests с классами-обёртками
  • Allure: разметка, шаги, вложения, автогенерация отчётов

Следующий шаг — интеграция тестов в CI/CD, параллельный запуск и Docker. Вы справитесь!