DEV Community

JEFFERSON ROSAS CHAMBILLA
JEFFERSON ROSAS CHAMBILLA

Posted on

TestRail Manager: Automatiza tu Gestión de Pruebas con Python

🚀 TestRail Manager: Automatiza tu Gestión de Pruebas con Python

¿Cansado de gestionar manualmente tus casos de prueba en TestRail? ¿Quieres automatizar el reporte de resultados desde tus tests? TestRail Manager es la solución que necesitas.


🎯 ¿Qué es TestRail Manager?

TestRail Manager es una librería Python completa que te permite interactuar con la API de TestRail de forma simple y eficiente. Con ella puedes:

✅ Crear y gestionar proyectos, suites y casos de prueba

✅ Ejecutar test runs automáticamente

✅ Reportar resultados desde tus frameworks de testing (pytest, unittest, etc.)

✅ Generar métricas y reportes detallados

✅ Integrar TestRail en tu pipeline CI/CD


💡 ¿Por qué la creé?

Como QA Engineer, me encontraba constantemente:

  • 📝 Creando casos de prueba manualmente en TestRail
  • 🔄 Actualizando resultados uno por uno después de cada ejecución
  • 📊 Generando reportes manualmente para los stakeholders
  • 🤯 Perdiendo tiempo en tareas repetitivas

Necesitaba una forma de automatizar todo este proceso y mantener TestRail sincronizado con mis test automatizados. Así nació TestRail Manager.


🛠️ Instalación Rápida

# Clonar el repositorio
git clone https://github.com/Ankluna72/Gestion-de-pruebas-TestRail-Rosas.git
cd Gestion-de-pruebas-TestRail-Rosas

# Instalar dependencias
pip install -r requirements.txt

# Configurar credenciales
copy .env.example .env
# Edita .env con tus credenciales de TestRail
Enter fullscreen mode Exit fullscreen mode

🚦 Inicio Rápido

1️⃣ Configuración Básica

from testrail_manager import TestRailManager
from config import TestRailConfig

# Inicializar el manager
manager = TestRailManager(
    base_url="https://tu-empresa.testrail.io",
    username="tu-email@ejemplo.com",
    api_key="tu-api-key"
)
Enter fullscreen mode Exit fullscreen mode

2️⃣ Crear un Caso de Prueba

# Crear un caso de prueba con pasos detallados
case = manager.create_case(
    section_id=1,
    title="Login exitoso con credenciales válidas",
    type_id=TestRailConfig.TYPE_FUNCTIONAL,
    priority_id=TestRailConfig.PRIORITY_HIGH,
    custom_steps=[
        {
            'content': '1. Abrir página de login',
            'expected': 'Se muestra formulario de login'
        },
        {
            'content': '2. Ingresar credenciales válidas',
            'expected': 'Las credenciales son aceptadas'
        },
        {
            'content': '3. Hacer clic en "Iniciar sesión"',
            'expected': 'Usuario es redirigido al dashboard'
        }
    ],
    estimate='2m'
)

print(f"✓ Caso creado con ID: {case['id']}")
Enter fullscreen mode Exit fullscreen mode

3️⃣ Ejecutar un Test Run

from datetime import datetime

# Crear test run
run = manager.create_run(
    project_id=1,
    suite_id=1,
    name=f"Test Run - {datetime.now().strftime('%Y-%m-%d %H:%M')}",
    description="Ejecución automatizada",
    include_all=True
)

print(f"✓ Test Run creado: {run['id']}")
Enter fullscreen mode Exit fullscreen mode

4️⃣ Reportar Resultados

# Reportar resultado exitoso
result = manager.add_result_for_case(
    run_id=run['id'],
    case_id=case['id'],
    status_id=TestRailConfig.STATUS_PASSED,
    comment="✓ Prueba ejecutada exitosamente",
    elapsed="2m 30s",
    version="v1.2.3"
)

print("✓ Resultado reportado")
Enter fullscreen mode Exit fullscreen mode

5️⃣ Generar Métricas

# Obtener estadísticas del run
stats = manager.get_run_statistics(run_id=run['id'])

print(f"Total de pruebas: {stats['total_tests']}")
print(f"✓ Pasadas: {stats['passed']}")
print(f"✗ Fallidas: {stats['failed']}")
print(f"Tasa de éxito: {stats['pass_rate']:.2f}%")
Enter fullscreen mode Exit fullscreen mode

🔥 Caso de Uso Real: Integración con pytest

Una de las funcionalidades más potentes es la integración con pytest para reportar automáticamente los resultados a TestRail.

import pytest
from testrail_manager import TestRailManager
from config import TestRailConfig

# Configurar TestRail
testrail = TestRailManager(
    base_url=TestRailConfig.BASE_URL,
    username=TestRailConfig.USERNAME,
    api_key=TestRailConfig.API_KEY
)

class TestLogin:
    def test_login_exitoso(self):
        # Tu lógica de test
        resultado = perform_login("user@test.com", "password123")

        # Reportar a TestRail automáticamente
        testrail.add_result_for_case(
            run_id=123,
            case_id=456,
            status_id=1 if resultado else 5,
            comment="Test ejecutado desde pytest",
            elapsed="500ms"
        )

        assert resultado == True
Enter fullscreen mode Exit fullscreen mode

📊 Ejemplo Completo: Pipeline de Testing

Aquí un ejemplo de cómo usar TestRail Manager en un pipeline completo:

from testrail_manager import TestRailManager
from config import TestRailConfig
import time

# 1. Inicializar
manager = TestRailManager(
    base_url=TestRailConfig.BASE_URL,
    username=TestRailConfig.USERNAME,
    api_key=TestRailConfig.API_KEY
)

# 2. Crear test run
run = manager.create_run(
    project_id=1,
    suite_id=1,
    name="Regression Suite - Nightly",
    description="Ejecución nocturna automática"
)

# 3. Obtener tests
tests = manager.get_tests(run['id'])

# 4. Ejecutar y reportar
for test in tests:
    start_time = time.time()

    try:
        # Ejecutar tu test aquí
        result = execute_test(test['case_id'])

        # Reportar éxito
        manager.add_result(
            test_id=test['id'],
            status_id=TestRailConfig.STATUS_PASSED,
            comment=f"✓ Test pasó correctamente",
            elapsed=f"{int(time.time() - start_time)}s"
        )
    except Exception as e:
        # Reportar fallo
        manager.add_result(
            test_id=test['id'],
            status_id=TestRailConfig.STATUS_FAILED,
            comment=f"✗ Error: {str(e)}",
            elapsed=f"{int(time.time() - start_time)}s"
        )

# 5. Generar reporte
stats = manager.get_run_statistics(run['id'])
manager.generate_run_report(run['id'], 'report.txt')

# 6. Cerrar run
manager.close_run(run['id'])

print(f"✅ Pipeline completado - Tasa de éxito: {stats['pass_rate']:.2f}%")
Enter fullscreen mode Exit fullscreen mode

🎁 Características Destacadas

🔧 API Completa

La librería cubre prácticamente toda la API de TestRail:

  • Proyectos: Crear, listar, obtener detalles
  • Suites: Organizar casos en suites de prueba
  • Secciones: Estructurar casos en secciones
  • Casos: CRUD completo con campos personalizados
  • Test Runs: Gestión completa de ejecuciones
  • Resultados: Reporte individual o en lote
  • Métricas: Estadísticas y reportes automáticos

🛡️ Manejo Robusto de Errores

try:
    case = manager.create_case(
        section_id=999999,  # ID inexistente
        title="Test Case"
    )
except Exception as e:
    print(f"Error: {e}")
    # Salida: Error en la petición a TestRail: 404 Not Found
Enter fullscreen mode Exit fullscreen mode

📦 Ejemplos Incluidos

El repositorio incluye 4 ejemplos prácticos listos para usar:

  1. example_basic.py - Operaciones fundamentales
  2. example_create_test_run.py - Crear y ejecutar test runs
  3. example_manage_cases.py - Gestión de casos de prueba
  4. example_integration_pytest.py - Integración con pytest

🏗️ Arquitectura del Proyecto

testrail-manager/
│
├── testrail_manager.py    # Clase principal
├── config.py              # Configuración
├── requirements.txt       # Dependencias
├── .env.example          # Plantilla de credenciales
│
├── examples/             # Ejemplos prácticos
│   ├── example_basic.py
│   ├── example_create_test_run.py
│   ├── example_manage_cases.py
│   └── example_integration_pytest.py
│
└── README.md             # Documentación completa
Enter fullscreen mode Exit fullscreen mode

🔐 Seguridad

La herramienta sigue las mejores prácticas de seguridad:

Credenciales en variables de entorno (nunca en el código)

.gitignore configurado para evitar exposición

Manejo seguro de API Keys

Validación de configuración antes de ejecutar

# Configuración segura con .env
TESTRAIL_URL=https://tu-empresa.testrail.io
TESTRAIL_USERNAME=tu-email@ejemplo.com
TESTRAIL_API_KEY=tu-api-key
Enter fullscreen mode Exit fullscreen mode

📈 Métricas y Reportes

Genera reportes detallados automáticamente:

# Obtener estadísticas
stats = manager.get_run_statistics(run_id=123)

# Generar reporte
report = manager.generate_run_report(
    run_id=123,
    output_file='test_report.txt'
)
Enter fullscreen mode Exit fullscreen mode

Salida del reporte:

============================================================
REPORTE DE TEST RUN - Regression Suite
============================================================

Run ID: 123
Fecha: 2025-11-20 10:30:00

RESUMEN DE PRUEBAS:
============================================================
Total de pruebas:    50
Pasadas:             45 (90.00%)
Fallidas:            3
Bloqueadas:          1
Para re-probar:      0
Sin probar:          1
Enter fullscreen mode Exit fullscreen mode

🚀 Casos de Uso

1. CI/CD Integration

# GitHub Actions ejemplo
name: Run Tests and Report to TestRail

on: [push]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Run tests
        run: pytest
      - name: Report to TestRail
        run: python report_to_testrail.py
        env:
          TESTRAIL_URL: ${{ secrets.TESTRAIL_URL }}
          TESTRAIL_USERNAME: ${{ secrets.TESTRAIL_USERNAME }}
          TESTRAIL_API_KEY: ${{ secrets.TESTRAIL_API_KEY }}
Enter fullscreen mode Exit fullscreen mode

2. Selenium Integration

from selenium import webdriver
from testrail_manager import TestRailManager

driver = webdriver.Chrome()
manager = TestRailManager(...)

try:
    driver.get("https://app.com/login")
    # ... tu test ...

    manager.add_result_for_case(
        run_id=123,
        case_id=456,
        status_id=1,
        comment="✓ Selenium test passed"
    )
finally:
    driver.quit()
Enter fullscreen mode Exit fullscreen mode

3. Scheduled Reports

# Script para generar reportes diarios
from datetime import datetime
from testrail_manager import TestRailManager

manager = TestRailManager(...)

# Obtener runs activos
runs = manager.get_runs(project_id=1)

for run in runs:
    if run.get('is_completed') == False:
        stats = manager.get_run_statistics(run['id'])

        # Enviar por email, Slack, etc.
        send_notification(
            f"Run: {run['name']}\n"
            f"Progress: {stats['pass_rate']:.2f}%"
        )
Enter fullscreen mode Exit fullscreen mode

📚 Recursos Adicionales

🔗 Enlaces Útiles

💻 Requisitos

  • Python 3.7+
  • TestRail (cuenta con acceso a API)
  • requests >= 2.25.0
  • python-dotenv >= 0.19.0

🎯 Próximos Pasos

Estoy trabajando en nuevas características:

  • [ ] Soporte para attachments en resultados
  • [ ] CLI tool para operaciones comunes
  • [ ] Dashboard web para visualizar métricas
  • [ ] Exportación a PDF/Excel
  • [ ] Webhooks para notificaciones en tiempo real

🤝 Contribuciones

¡Las contribuciones son bienvenidas! Si tienes ideas o encuentras bugs:

  1. 🍴 Fork el repositorio
  2. 🔨 Crea tu feature branch
  3. ✅ Haz commit de tus cambios
  4. 🚀 Push a la rama
  5. 📬 Abre un Pull Request

💬 Feedback

¿Qué te parece la herramienta? ¿La usarías en tus proyectos? Déjame tus comentarios abajo 👇

Si te resultó útil:

  • ⭐ Dale una estrella en GitHub
  • 🔄 Compártelo con tu equipo
  • 💬 Déjame saber cómo la estás usando

📞 Contacto


🎬 Conclusión

TestRail Manager es una herramienta completa que te permite:

Ahorrar tiempo automatizando tareas repetitivas

Mejorar la calidad con mejor trazabilidad

Integrar TestRail en tu pipeline de CI/CD

Generar reportes automáticos y detallados

¿Listo para automatizar tu gestión de pruebas? 🚀

👉 Prueba TestRail Manager ahora


Tags: #testing #python #automation #testrail #qa #devops #cicd #pytest #selenium


Desarrollado con ❤️ para la comunidad de QA

Top comments (0)