Ответ
Я имел опыт работы с несколькими TMS, которые интегрировались в процессы команд разработки и тестирования.
TestRail: Использовал его как основную систему для хранения ручных тест-кейсов, планирования тестовых прогонов и формирования отчетности. Настраивал интеграцию с JIRA для автоматического обновления статусов багов и линковки требований. Его REST API активно применял для автоматической отправки результатов выполнения автотестов, что позволяло иметь актуальную историю прохождения тестов.
Allure TestOps: Работал с этой системой в связке с фреймворком Allure для отчетов по автотестам. Ценил её за мощные возможности аналитики (тренды, графики стабильности), управление тестовой документацией в стиле BDD (возможность привязки автотестов к сценариям Gherkin) и глубокую интеграцию с CI/CD (Jenkins, GitLab CI).
Zephyr Scale (для JIRA): Применял в проектах, где требовалась тесная интеграция управления тестами непосредственно внутри JIRA. Использовал его гибкость для создания как структурированных тест-кейсов, так и BDD-сценариев. Удобно было то, что вся информация — от требований до тестов и дефектов — была сосредоточена в одном инструменте.
Xray: Работал с ним в качестве аддона для JIRA. Основные задачи — это создание и организация тест-кейсов, планирование тестовых прогонов и, что особенно важно, поддержка формата Cucumber (Gherkin). Это позволяло напрямую ассоциировать фичи-файлы с автотестами и визуализировать их выполнение в JIRA.
Пример интеграции автотестов с TestRail через его API на Python:
import requests
def report_test_result_to_testrail(test_run_id: int, test_case_id: int, status: str, comment: str = ""):
"""
Отправляет результат выполнения теста в TestRail.
"""
base_url = "https://your-company.testrail.io"
endpoint = f"/index.php?/api/v2/add_result_for_case/{test_run_id}/{test_case_id}"
url = base_url + endpoint
# Аутентификация через логин и API-ключ (можно использовать токен)
auth = ("your.email@company.com", "your-api-key")
# Маппинг статуса теста на ID статуса в TestRail (1-Passed, 5-Failed)
status_id_map = {"passed": 1, "failed": 5, "blocked": 2}
status_id = status_id_map.get(status.lower(), 5) # По умолчанию - Failed
payload = {
"status_id": status_id,
"comment": comment or f"Test executed via automation. Result: {status}"
}
headers = {"Content-Type": "application/json"}
try:
response = requests.post(url, auth=auth, headers=headers, json=payload)
response.raise_for_status() # Вызовет исключение для кодов 4xx/5xx
print(f"Result for case {test_case_id} reported successfully.")
except requests.exceptions.RequestException as e:
print(f"Failed to report result to TestRail: {e}")
# Использование в фикстуре или tearDown методе автотеста
# report_test_result_to_testrail(run_id=15, case_id=305, status="passed")
Выбор TMS всегда зависел от процессов команды, стека технологий и необходимости интеграции с другими инструментами (JIRA, CI/CD).