Sistema de generación automática de tests de Playwright usando Claude AI (Anthropic).
Este proyecto genera tests de Playwright automáticamente a partir de User Stories usando Claude AI. El sistema:
- Lee una User Story (desde archivo o texto)
- Genera escenarios Gherkin usando Claude AI
- Convierte Gherkin a código Playwright
- Valida el código automáticamente
- Reporta problemas, advertencias y sugerencias
- 🤖 Generación automática con Claude AI - Usa el modelo Sonnet 4
- ✅ Validación automática - 5 validadores de calidad de código
- 🖥️ CLI profesional - Múltiples modos de input
- 📝 Workflow de 2 pasos - User Story → Gherkin → Code (mejor calidad)
- 🏗️ Arquitectura modular - Prompts, generador y validadores separados
- 📊 Test suite incluido - Verificación automática del sistema
- 📚 Documentación exhaustiva - 60+ páginas de conceptos y guías
User Story
↓
AI Generator (Claude) → Gherkin Scenarios
↓
AI Generator (Claude) → Playwright Code
↓
Validator → Reporte de calidad
↓
Test ejecutable
ai-test-generator/
├── src/
│ ├── __init__.py
│ ├── prompts.py # Templates de prompts para Claude
│ ├── ai_generator.py # Generador principal
│ └── validators.py # Validadores de código
│
├── tests/ # Tests generados
├── user_stories/ # User stories de ejemplo
│ ├── login.txt
│ ├── search.txt
│ ├── navigation.txt
│ └── form_submission.txt
│
├── cli.py # CLI principal
├── test_ai_generator.py # Script de prueba simple
├── test_complete_workflow.py # Test suite completo
│
├── .env # API keys (no commitear)
├── .gitignore # Archivos ignorados
├── requirements.txt # Dependencias
│
├── README.md # Este archivo
├── USAGE.md # Guía de uso detallada
└── CONCEPTOS.md # Documentación técnica (60 páginas)
git clone https://github.com/TU-USUARIO/ai-test-generator.git
cd ai-test-generatorpython -m venv venv
source venv/bin/activate # En Mac/Linux
# venv\Scripts\activate # En Windowspip install -r requirements.txt
playwright installCrea un archivo .env en la raíz del proyecto:
ANTHROPIC_API_KEY=tu_api_key_aquiObtener API Key:
- Ir a https://console.anthropic.com/
- Crear cuenta o iniciar sesión
- Generar API key en Settings
python test_complete_workflow.pyDeberías ver: ✅ 5/5 tests pasados
El proyecto incluye un CLI profesional con múltiples modos de input:
# Método 1: Desde archivo (RECOMENDADO para user stories largas)
python cli.py generate --file user_stories/login.txt
# Método 2: Directo en terminal (para textos cortos)
python cli.py generate "As a user I want to login to the system"
# Ver Gherkin generado
python cli.py generate --file user_stories/login.txt --show-gherkin
# Validar un test existente
python cli.py validate tests/test_example.py
# Ver información del sistema
python cli.py info
# Ayuda
python cli.py --help
python cli.py generate --helpEl proyecto incluye 4 ejemplos en user_stories/:
login.txt- Test de loginsearch.txt- Test de búsquedanavigation.txt- Test de navegaciónform_submission.txt- Test de formulario
# Generar desde ejemplo
python cli.py generate --file user_stories/login.txt
# Ver output
ls tests/
# Ejecutar test generado
python -m pytest tests/test_*.py -v -sTambién puedes usar el generador directamente en Python:
from src.ai_generator import AITestGenerator
# Crear generador
generator = AITestGenerator()
# Tu user story
user_story = """
As a user
I want to visit example.com
So that I can see the page
Acceptance Criteria:
- User navigates to https://example.com
- User sees "Example Domain" in the page
"""
# Generar test completo
result = generator.generate_complete_test(user_story)
# Ver resultados
print(result['gherkin']) # Escenarios Gherkin
print(result['code']) # Código Playwright
print(result['validation']) # Reporte de validación# Test específico (con navegador visible)
python -m pytest tests/test_login.py -v -s
# Todos los tests (headless)
python -m pytest tests/ -v
# Con reporte detallado
python -m pytest tests/ -v --tb=shortEl sistema valida automáticamente el código generado:
- ✅ Sintaxis Python - Detecta errores de sintaxis con
ast.parse() - ✅ Imports - Verifica que estén pytest y playwright
- ✅ Fixtures - Valida que existan
browserypage - ✅ Async/Await - Verifica uso correcto de decoradores y await
- ✅ Complejidad - Detecta código innecesariamente complejo
🔍 VALIDACIÓN:
────────────────────────────────────────────────────────────
✅ Código validado exitosamente
💡 SUGERENCIAS:
- Código bien estructurado y siguiendo mejores prácticas
Templates modulares para Claude:
SYSTEM_PROMPT- Define el rol de Claude como experto en QAGHERKIN_GENERATION_PROMPT- Convierte User Story en GherkinPLAYWRIGHT_GENERATION_PROMPT- Convierte Gherkin en código Playwright
Clase principal que orquesta el proceso:
class AITestGenerator:
def generate_gherkin(user_story: str) -> str
# User Story → Gherkin
def generate_playwright_code(gherkin: str) -> str
# Gherkin → Código Playwright
def generate_complete_test(user_story: str) -> Dict
# Workflow completo (2 pasos + validación)Sistema de validación robusto:
class CodeValidator:
def validate_syntax(code: str) -> bool
def validate_imports(code: str) -> bool
def validate_fixtures(code: str) -> bool
def validate_async_await(code: str) -> bool
def validate_complexity(code: str) -> bool
def validate_code(code: str) -> ValidationResultInterfaz de línea de comandos profesional con:
- Múltiples modos de input
- Progress bars
- Colores y formato
- Validación integrada
- Generación automática de nombres de archivo
As a user
I want to search on Google
So that I can find information
Acceptance Criteria:
- Navigate to https://www.google.com
- Enter search query "Playwright"
- Press Enter
- Verify results appear
import pytest
from playwright.async_api import async_playwright, Page
@pytest.fixture
async def browser():
async with async_playwright() as p:
browser = await p.chromium.launch(headless=False)
yield browser
await browser.close()
@pytest.fixture
async def page(browser):
page = await browser.new_page()
yield page
await page.close()
@pytest.mark.asyncio
async def test_user_searches_on_google(page: Page):
# Given I navigate to Google
await page.goto("https://www.google.com")
# When I search for "Playwright"
await page.fill('[name="q"]', "Playwright")
await page.press('[name="q"]', "Enter")
# Then I should see search results
await page.wait_for_selector("#search")
assert await page.locator("#search").is_visible()Claude Sonnet 4 (claude-sonnet-4-20250514):
- Input: $3 por millón de tokens
- Output: $15 por millón de tokens
Estimado por test: ~$0.003-0.005 USD
100 tests: ~$0.30-0.50 USD
- Python 3.8+ - Lenguaje base
- Playwright - Automatización de navegador
- Pytest - Framework de testing
- Claude API (Anthropic) - Generación de código con IA
- pytest-asyncio - Soporte para tests asíncronos
- Click - Framework para CLI
- python-dotenv - Manejo de variables de entorno
Este proyecto incluye documentación exhaustiva:
📄 README.md (Este archivo)
- Overview del proyecto
- Instalación y configuración
- Uso básico con ejemplos
📘 USAGE.md
Guía de uso completa con:
- Diferentes formas de generar tests
- Workflows comunes
- Ejemplos paso a paso
- Troubleshooting
- Tips y mejores prácticas
Documentación técnica profunda (60 páginas):
- LLMs y Claude API
- Prompt Engineering
- Arquitectura de Sistemas AI
- Async/Await en Python
- Validación de Código AI
- Testing con Playwright
- CLI y UX
- Patrones de Diseño
- Mejores Prácticas
- Prompt Engineering es iterativo - Mejoré los prompts 4-5 veces hasta obtener código simple
- LLMs no son perfectos - La validación automática es esencial
- Arquitectura modular - Separar prompts, generación y validación facilita mantenimiento
- Workflow de 2 pasos - User Story → Gherkin → Code da mejor calidad que generación directa
- Async/Await - Dentro de un test es secuencial, entre tests es paralelo
# 1. Activar entorno
source venv/bin/activate
# 2. Crear/editar user story
code user_stories/mi_feature.txt
# 3. Generar test
python cli.py generate --file user_stories/mi_feature.txt
# 4. Revisar código generado
code tests/test_mi_feature.py
# 5. Ejecutar test
python -m pytest tests/test_mi_feature.py -v -s
# 6. Iterar si es necesarioVerifica que todo funciona correctamente:
python test_complete_workflow.pyEsto ejecuta 5 tests:
- ✅ Inicialización del generador
- ✅ Validador detecta errores
- ✅ Generación completa funciona
- ✅ CLI existe y es válido
- ✅ Estructura del proyecto correcta
- Claude a veces genera código más complejo de lo necesario (se controla con prompts específicos)
- La validación no cubre todos los casos edge posibles
- Costos de API se acumulan con uso frecuente
- Selectores CSS pueden requerir ajustes manuales según el sitio
- Agregar modo interactivo (
--interactive) - Auto-corrección de problemas simples
- Soporte para más frameworks (Selenium, Cypress)
- Dashboard web para visualizar tests
- Integración con CI/CD
- Sistema de templates personalizables
Este es un proyecto de aprendizaje. Mejoras y sugerencias son bienvenidas.
Para contribuir:
- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'Add some AmazingFeature') - Push a la rama (
git push origin feature/AmazingFeature) - Abre un Pull Request
MIT License - Uso educativo y personal
[Bryan Rodriguez]
- GitHub: [https://github.com/bryan0422]
- LinkedIn: [www.linkedin.com/in/bryan-rodriguez-32a9a8211]
- Anthropic por Claude AI
- Playwright por el excelente framework de testing
- Comunidad de Python y testing
⭐ Si este proyecto te fue útil, considera darle una estrella en GitHub
Creado como parte del aprendizaje de AI Engineering y Test Automation 🤖✨