Как выстраивался процесс автоматизации тестирования на вашем прошлом проекте?

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

Ответ

На проекте по тестированию REST API микросервисной архитектуры был выстроен следующий процесс:

1. Технологический стек:

  • Язык/Фреймворк: Python 3.9+, pytest как основной runner и ассершн-библиотека.
  • HTTP-клиент: requests для отправки запросов к API.
  • Управление зависимостями: pip и requirements.txt.
  • Данные и фикстуры: pytest фикстуры для подготовки тестового окружения и данных.
  • Отчетность: pytest-html для базовых отчетов и Allure для детализированных.
  • CI/CD: GitLab CI для запуска тестов на merge/push.

2. Структура и ключевые практики:

# Пример структуры теста API
import pytest
import requests

BASE_URL = "https://api.example.com/v1"

# Фикстура для создания тестового пользователя
@pytest.fixture
def test_user():
    payload = {"name": "Test User", "email": "test@example.com"}
    response = requests.post(f"{BASE_URL}/users", json=payload)
    user_id = response.json()["id"]
    yield user_id
    # Пост-очистка после теста
    requests.delete(f"{BASE_URL}/users/{user_id}")

# Параметризованный тест
@pytest.mark.parametrize("status, expected_count", [
    ("active", 1),
    ("inactive", 0),
    ("", 0) # Граничный случай
])
def test_filter_users_by_status(test_user, status, expected_count):
    """Тест проверяет фильтрацию пользователей по статусу."""
    # When: Отправляем запрос с фильтром
    params = {"status": status} if status else {}
    response = requests.get(f"{BASE_URL}/users", params=params)

    # Then: Проверяем статус код и количество найденных пользователей
    assert response.status_code == 200
    users = response.json()
    assert len(users) == expected_count
    if expected_count > 0:
        assert all(user["status"] == status for user in users)

3. Интеграция в CI/CD (GitLab CI):

# .gitlab-ci.yml
stages:
  - test

api-tests:
  stage: test
  image: python:3.9-slim
  script:
    - pip install -r requirements.txt
    - pytest tests/api/ --alluredir=allure-results
  artifacts:
    when: always
    paths:
      - allure-results/

Итог: Такой подход обеспечивал стабильный прогон тестов, быструю обратную связь для разработчиков и наглядную отчетность о покрытии и дефектах.