Какие ключевые возможности Pytest вы используете в автоматизации тестирования?

«Какие ключевые возможности Pytest вы используете в автоматизации тестирования?» — вопрос из категории Инструменты тестирования, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Pytest — мощный и гибкий фреймворк для написания тестов на Python. Его ключевые возможности, которые я активно применяю:

1. Структура и фикстуры (Fixtures): Фикстуры (@pytest.fixture) — основа для управления тестовыми данными и состоянием. Они обеспечивают setup/teardown логику.

import pytest
import requests

@pytest.fixture
def api_client():
    # Setup: создание клиента API
    client = APIClient(base_url="https://api.example.com")
    yield client  # передача контроля тесту
    # Teardown: закрытие сессии (выполнится после теста)
    client.close()

@pytest.fixture
def create_test_user(api_client):
    # Фикстура может зависеть от другой фикстуры
    user = api_client.create_user(name="Test")
    yield user
    api_client.delete_user(user.id)  # очистка после теста

2. Параметризация тестов: Позволяет запустить один тест с разными наборами входных данных и ожидаемых результатов, что увеличивает покрытие.

import pytest

@pytest.mark.parametrize("test_input,expected", [
    ("3+5", 8),
    ("2*4", 8),
    ("6/2", 3.0),
])
def test_eval(test_input, expected):
    assert eval(test_input) == expected

3. Плагины и интеграции:

  • pytest-xdist: Для параллельного запуска тестов, что значительно ускоряет выполнение suite.
  • pytest-html / allure-pytest: Для генерации наглядных отчетов о выполнении тестов.
  • pytest-cov: Для интеграции с coverage.py и измерения покрытия кода тестами.
  • pytest-mock: Упрощает использование unittest.mock для изоляции тестируемого кода.

4. Гибкие ассерты и отладочная информация: Pytest предоставляет детальный вывод при падении assert'а, показывая значения переменных, что упрощает отладку.

5. Маркировка и селективный запуск: Маркеры (@pytest.mark.smoke, @pytest.mark.slow) позволяют категоризировать тесты и запускать только определенные группы.

pytest -m "smoke"          # запустить только smoke-тесты
pytest -v -k "login"       # запустить тесты, в имени которых есть "login"

6. Интеграция с CI/CD: Легко интегрируется с Jenkins, GitHub Actions, GitLab CI через вызов команды pytest и обработку exit-кода.