{"id":34502838,"url":"https://github.com/bryan0422/ai-test-generator","last_synced_at":"2026-03-13T18:36:14.871Z","repository":{"id":328119285,"uuid":"1114262366","full_name":"bryan0422/ai-test-generator","owner":"bryan0422","description":"   Sistema de generación automática de tests de Playwright usando Claude AI","archived":false,"fork":false,"pushed_at":"2025-12-11T19:27:21.000Z","size":67,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-25T13:37:59.295Z","etag":null,"topics":["ai","anthropic","claude-ai","llm","playwright","pytest","python","qa-automation","test-automation","test-generation"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bryan0422.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-11T05:59:29.000Z","updated_at":"2025-12-15T17:22:52.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/bryan0422/ai-test-generator","commit_stats":null,"previous_names":["bryan0422/ai-test-generator"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/bryan0422/ai-test-generator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bryan0422%2Fai-test-generator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bryan0422%2Fai-test-generator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bryan0422%2Fai-test-generator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bryan0422%2Fai-test-generator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bryan0422","download_url":"https://codeload.github.com/bryan0422/ai-test-generator/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bryan0422%2Fai-test-generator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30472980,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-13T17:15:31.527Z","status":"ssl_error","status_checked_at":"2026-03-13T17:15:22.394Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","anthropic","claude-ai","llm","playwright","pytest","python","qa-automation","test-automation","test-generation"],"created_at":"2025-12-24T02:20:57.204Z","updated_at":"2026-03-13T18:36:14.797Z","avatar_url":"https://github.com/bryan0422.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🤖 AI Test Generator\n\n![Python](https://img.shields.io/badge/python-3.8+-blue.svg)\n![Playwright](https://img.shields.io/badge/playwright-1.40+-green.svg)\n![Claude](https://img.shields.io/badge/claude-sonnet--4-orange.svg)\n\nSistema de generación automática de tests de Playwright usando Claude AI (Anthropic).\n\n## 📋 Descripción\n\nEste proyecto genera tests de Playwright automáticamente a partir de User Stories usando Claude AI. El sistema:\n\n1. Lee una User Story (desde archivo o texto)\n2. Genera escenarios Gherkin usando Claude AI\n3. Convierte Gherkin a código Playwright\n4. Valida el código automáticamente\n5. Reporta problemas, advertencias y sugerencias\n\n## ✨ Características\n\n- 🤖 **Generación automática con Claude AI** - Usa el modelo Sonnet 4\n- ✅ **Validación automática** - 5 validadores de calidad de código\n- 🖥️ **CLI profesional** - Múltiples modos de input\n- 📝 **Workflow de 2 pasos** - User Story → Gherkin → Code (mejor calidad)\n- 🏗️ **Arquitectura modular** - Prompts, generador y validadores separados\n- 📊 **Test suite incluido** - Verificación automática del sistema\n- 📚 **Documentación exhaustiva** - 60+ páginas de conceptos y guías\n\n## 🏗️ Arquitectura\n```\nUser Story\n    ↓\nAI Generator (Claude) → Gherkin Scenarios\n    ↓\nAI Generator (Claude) → Playwright Code\n    ↓\nValidator → Reporte de calidad\n    ↓\nTest ejecutable\n```\n\n## 📁 Estructura del Proyecto\n```\nai-test-generator/\n├── src/\n│   ├── __init__.py\n│   ├── prompts.py              # Templates de prompts para Claude\n│   ├── ai_generator.py         # Generador principal\n│   └── validators.py           # Validadores de código\n│\n├── tests/                      # Tests generados\n├── user_stories/               # User stories de ejemplo\n│   ├── login.txt\n│   ├── search.txt\n│   ├── navigation.txt\n│   └── form_submission.txt\n│\n├── cli.py                      # CLI principal\n├── test_ai_generator.py        # Script de prueba simple\n├── test_complete_workflow.py   # Test suite completo\n│\n├── .env                        # API keys (no commitear)\n├── .gitignore                  # Archivos ignorados\n├── requirements.txt            # Dependencias\n│\n├── README.md                   # Este archivo\n├── USAGE.md                    # Guía de uso detallada\n└── CONCEPTOS.md                # Documentación técnica (60 páginas)\n```\n\n## 🚀 Instalación\n\n### 1. Clonar el repositorio\n```bash\ngit clone https://github.com/TU-USUARIO/ai-test-generator.git\ncd ai-test-generator\n```\n\n### 2. Crear entorno virtual\n```bash\npython -m venv venv\nsource venv/bin/activate  # En Mac/Linux\n# venv\\Scripts\\activate   # En Windows\n```\n\n### 3. Instalar dependencias\n```bash\npip install -r requirements.txt\nplaywright install\n```\n\n### 4. Configurar API Key\n\nCrea un archivo `.env` en la raíz del proyecto:\n```bash\nANTHROPIC_API_KEY=tu_api_key_aqui\n```\n\n**Obtener API Key:**\n1. Ir a https://console.anthropic.com/\n2. Crear cuenta o iniciar sesión\n3. Generar API key en Settings\n\n### 5. Verificar instalación\n```bash\npython test_complete_workflow.py\n```\n\nDeberías ver: `✅ 5/5 tests pasados`\n\n## 💻 Uso\n\n### CLI (Forma Recomendada)\n\nEl proyecto incluye un CLI profesional con múltiples modos de input:\n```bash\n# Método 1: Desde archivo (RECOMENDADO para user stories largas)\npython cli.py generate --file user_stories/login.txt\n\n# Método 2: Directo en terminal (para textos cortos)\npython cli.py generate \"As a user I want to login to the system\"\n\n# Ver Gherkin generado\npython cli.py generate --file user_stories/login.txt --show-gherkin\n\n# Validar un test existente\npython cli.py validate tests/test_example.py\n\n# Ver información del sistema\npython cli.py info\n\n# Ayuda\npython cli.py --help\npython cli.py generate --help\n```\n\n#### Ejemplos de User Stories\n\nEl proyecto incluye 4 ejemplos en `user_stories/`:\n- `login.txt` - Test de login\n- `search.txt` - Test de búsqueda\n- `navigation.txt` - Test de navegación\n- `form_submission.txt` - Test de formulario\n```bash\n# Generar desde ejemplo\npython cli.py generate --file user_stories/login.txt\n\n# Ver output\nls tests/\n\n# Ejecutar test generado\npython -m pytest tests/test_*.py -v -s\n```\n\n### Uso Programático (Python)\n\nTambién puedes usar el generador directamente en Python:\n```python\nfrom src.ai_generator import AITestGenerator\n\n# Crear generador\ngenerator = AITestGenerator()\n\n# Tu user story\nuser_story = \"\"\"\nAs a user\nI want to visit example.com\nSo that I can see the page\n\nAcceptance Criteria:\n- User navigates to https://example.com\n- User sees \"Example Domain\" in the page\n\"\"\"\n\n# Generar test completo\nresult = generator.generate_complete_test(user_story)\n\n# Ver resultados\nprint(result['gherkin'])      # Escenarios Gherkin\nprint(result['code'])         # Código Playwright\nprint(result['validation'])   # Reporte de validación\n```\n\n### Ejecutar Tests Generados\n```bash\n# Test específico (con navegador visible)\npython -m pytest tests/test_login.py -v -s\n\n# Todos los tests (headless)\npython -m pytest tests/ -v\n\n# Con reporte detallado\npython -m pytest tests/ -v --tb=short\n```\n\n## 🔍 Validaciones Automáticas\n\nEl sistema valida automáticamente el código generado:\n\n- ✅ **Sintaxis Python** - Detecta errores de sintaxis con `ast.parse()`\n- ✅ **Imports** - Verifica que estén pytest y playwright\n- ✅ **Fixtures** - Valida que existan `browser` y `page`\n- ✅ **Async/Await** - Verifica uso correcto de decoradores y await\n- ✅ **Complejidad** - Detecta código innecesariamente complejo\n\n### Ejemplo de validación:\n```\n🔍 VALIDACIÓN:\n────────────────────────────────────────────────────────────\n✅ Código validado exitosamente\n\n💡 SUGERENCIAS:\n  - Código bien estructurado y siguiendo mejores prácticas\n```\n\n## 📊 Componentes\n\n### 1. Prompts (`src/prompts.py`)\n\nTemplates modulares para Claude:\n- `SYSTEM_PROMPT` - Define el rol de Claude como experto en QA\n- `GHERKIN_GENERATION_PROMPT` - Convierte User Story en Gherkin\n- `PLAYWRIGHT_GENERATION_PROMPT` - Convierte Gherkin en código Playwright\n\n### 2. AI Generator (`src/ai_generator.py`)\n\nClase principal que orquesta el proceso:\n```python\nclass AITestGenerator:\n    def generate_gherkin(user_story: str) -\u003e str\n        # User Story → Gherkin\n        \n    def generate_playwright_code(gherkin: str) -\u003e str\n        # Gherkin → Código Playwright\n        \n    def generate_complete_test(user_story: str) -\u003e Dict\n        # Workflow completo (2 pasos + validación)\n```\n\n### 3. Validators (`src/validators.py`)\n\nSistema de validación robusto:\n```python\nclass CodeValidator:\n    def validate_syntax(code: str) -\u003e bool\n    def validate_imports(code: str) -\u003e bool\n    def validate_fixtures(code: str) -\u003e bool\n    def validate_async_await(code: str) -\u003e bool\n    def validate_complexity(code: str) -\u003e bool\n    def validate_code(code: str) -\u003e ValidationResult\n```\n\n### 4. CLI (`cli.py`)\n\nInterfaz de línea de comandos profesional con:\n- Múltiples modos de input\n- Progress bars\n- Colores y formato\n- Validación integrada\n- Generación automática de nombres de archivo\n\n## 🎯 Ejemplo Completo\n\n### Input (User Story):\n```\nAs a user\nI want to search on Google\nSo that I can find information\n\nAcceptance Criteria:\n- Navigate to https://www.google.com\n- Enter search query \"Playwright\"\n- Press Enter\n- Verify results appear\n```\n\n### Output (Test Generado):\n```python\nimport pytest\nfrom playwright.async_api import async_playwright, Page\n\n@pytest.fixture\nasync def browser():\n    async with async_playwright() as p:\n        browser = await p.chromium.launch(headless=False)\n        yield browser\n        await browser.close()\n\n@pytest.fixture\nasync def page(browser):\n    page = await browser.new_page()\n    yield page\n    await page.close()\n\n@pytest.mark.asyncio\nasync def test_user_searches_on_google(page: Page):\n    # Given I navigate to Google\n    await page.goto(\"https://www.google.com\")\n    \n    # When I search for \"Playwright\"\n    await page.fill('[name=\"q\"]', \"Playwright\")\n    await page.press('[name=\"q\"]', \"Enter\")\n    \n    # Then I should see search results\n    await page.wait_for_selector(\"#search\")\n    assert await page.locator(\"#search\").is_visible()\n```\n\n## 💰 Costos\n\n**Claude Sonnet 4 (claude-sonnet-4-20250514):**\n- Input: $3 por millón de tokens\n- Output: $15 por millón de tokens\n\n**Estimado por test:** ~$0.003-0.005 USD\n\n**100 tests:** ~$0.30-0.50 USD\n\n## 🛠️ Tecnologías\n\n- **Python 3.8+** - Lenguaje base\n- **Playwright** - Automatización de navegador\n- **Pytest** - Framework de testing\n- **Claude API (Anthropic)** - Generación de código con IA\n- **pytest-asyncio** - Soporte para tests asíncronos\n- **Click** - Framework para CLI\n- **python-dotenv** - Manejo de variables de entorno\n\n## 📚 Documentación\n\nEste proyecto incluye documentación exhaustiva:\n\n### 📄 [README.md](README.md) (Este archivo)\n- Overview del proyecto\n- Instalación y configuración\n- Uso básico con ejemplos\n\n### 📘 [USAGE.md](USAGE.md)\nGuía de uso completa con:\n- Diferentes formas de generar tests\n- Workflows comunes\n- Ejemplos paso a paso\n- Troubleshooting\n- Tips y mejores prácticas\n\n### 📖 [CONCEPTOS.md](CONCEPTOS.md)\nDocumentación técnica profunda (60 páginas):\n- LLMs y Claude API\n- Prompt Engineering\n- Arquitectura de Sistemas AI\n- Async/Await en Python\n- Validación de Código AI\n- Testing con Playwright\n- CLI y UX\n- Patrones de Diseño\n- Mejores Prácticas\n\n## 📈 Aprendizajes Clave\n\n1. **Prompt Engineering es iterativo** - Mejoré los prompts 4-5 veces hasta obtener código simple\n2. **LLMs no son perfectos** - La validación automática es esencial\n3. **Arquitectura modular** - Separar prompts, generación y validación facilita mantenimiento\n4. **Workflow de 2 pasos** - User Story → Gherkin → Code da mejor calidad que generación directa\n5. **Async/Await** - Dentro de un test es secuencial, entre tests es paralelo\n\n## 🔄 Workflow de Desarrollo\n```bash\n# 1. Activar entorno\nsource venv/bin/activate\n\n# 2. Crear/editar user story\ncode user_stories/mi_feature.txt\n\n# 3. Generar test\npython cli.py generate --file user_stories/mi_feature.txt\n\n# 4. Revisar código generado\ncode tests/test_mi_feature.py\n\n# 5. Ejecutar test\npython -m pytest tests/test_mi_feature.py -v -s\n\n# 6. Iterar si es necesario\n```\n\n## 🧪 Testing del Sistema\n\nVerifica que todo funciona correctamente:\n```bash\npython test_complete_workflow.py\n```\n\nEsto ejecuta 5 tests:\n1. ✅ Inicialización del generador\n2. ✅ Validador detecta errores\n3. ✅ Generación completa funciona\n4. ✅ CLI existe y es válido\n5. ✅ Estructura del proyecto correcta\n\n## ⚠️ Limitaciones Conocidas\n\n- Claude a veces genera código más complejo de lo necesario (se controla con prompts específicos)\n- La validación no cubre todos los casos edge posibles\n- Costos de API se acumulan con uso frecuente\n- Selectores CSS pueden requerir ajustes manuales según el sitio\n\n## 🚧 Próximos Pasos\n\n- [ ] Agregar modo interactivo (`--interactive`)\n- [ ] Auto-corrección de problemas simples\n- [ ] Soporte para más frameworks (Selenium, Cypress)\n- [ ] Dashboard web para visualizar tests\n- [ ] Integración con CI/CD\n- [ ] Sistema de templates personalizables\n\n## 🤝 Contribuciones\n\nEste es un proyecto de aprendizaje. Mejoras y sugerencias son bienvenidas.\n\nPara contribuir:\n1. Fork el proyecto\n2. Crea una rama para tu feature (`git checkout -b feature/AmazingFeature`)\n3. Commit tus cambios (`git commit -m 'Add some AmazingFeature'`)\n4. Push a la rama (`git push origin feature/AmazingFeature`)\n5. Abre un Pull Request\n\n## 📄 Licencia\n\nMIT License - Uso educativo y personal\n\n## 👤 Autor\n\n**[Bryan Rodriguez]**\n- GitHub: [https://github.com/bryan0422]\n- LinkedIn: [www.linkedin.com/in/bryan-rodriguez-32a9a8211]\n\n## 🙏 Agradecimientos\n\n- [Anthropic](https://www.anthropic.com/) por Claude AI\n- [Playwright](https://playwright.dev/) por el excelente framework de testing\n- Comunidad de Python y testing\n\n---\n\n**⭐ Si este proyecto te fue útil, considera darle una estrella en GitHub**\n\n**Creado como parte del aprendizaje de AI Engineering y Test Automation** 🤖✨","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbryan0422%2Fai-test-generator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbryan0422%2Fai-test-generator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbryan0422%2Fai-test-generator/lists"}