API Tester

Este servidor MCP acepta documentos swagger/postman como entrada. Luego genera escenarios de prueba de API y carga, ejecuta las pruebas y genera el informe de ejecución.

Documentación

Servidor MCP de API Tester

npm (scoped) npm downloads License: MIT

Un servidor integral del Protocolo de Contexto de Modelos (MCP) para ingenieros de QA/SDET que proporciona capacidades de prueba de API con soporte para Swagger/OpenAPI y colecciones de Postman.

🎉 ¡Ahora disponible en NPM! Instala con npx @kirti676/api-tester-mcp@latest

🆕 Novedades

  • ✅ Seguimiento de Progreso Mejorado - Progreso en tiempo real con porcentajes de finalización y ETA
  • ✅ Barras de Progreso Visuales - Barras de progreso ASCII con notificaciones de hitos
  • ✅ Métricas de Rendimiento - Cálculos de rendimiento y resúmenes de ejecución
  • ✅ Publicado en NPM - Instala al instante con NPX
  • ✅ Integración con VS Code - Botones de instalación con un clic
  • ✅ Configuración Simplificada - No se requiere instalación manual de Python
  • ✅ Multiplataforma - Funciona en Windows, macOS y Linux
  • ✅ Actualizaciones Automáticas - Siempre obtén la última versión con @latest

🚀 Primeros Pasos

📦 Instalación

El servidor MCP de API Tester se puede usar directamente con npx sin ninguna instalación:

npx @kirti676/api-tester-mcp@latest

⚡ Instalación Rápida:

Install in VS Code Install in VS Code Insiders

🤖 Claude Desktop

Sigue la guía de instalación de MCP, usa la configuración estándar a continuación:

{
  "mcpServers": {
    "api-tester": {
      "command": "npx",
      "args": ["@kirti676/api-tester-mcp@latest"]
    }
  }
}

🔗 Otros Clientes MCP

La configuración estándar funciona con la mayoría de los clientes MCP:

{
  "mcpServers": {
    "api-tester": {
      "command": "npx",
      "args": ["@kirti676/api-tester-mcp@latest"]
    }
  }
}

🖥️ Clientes Compatibles:

🐍 Instalación con Python (Alternativa)

pip install api-tester-mcp

💻 Desde el Código Fuente

git clone https://github.com/kirti676/api_tester_mcp.git
cd api_tester_mcp
npm install

⚡ Inicio Rápido

Prueba el servidor MCP de API Tester inmediatamente:

# Run the server
npx @kirti676/api-tester-mcp@latest

# Check version
npx @kirti676/api-tester-mcp@latest --version

# Get help
npx @kirti676/api-tester-mcp@latest --help

Para clientes MCP como Claude Desktop, usa esta configuración:

{
  "mcpServers": {
    "api-tester": {
      "command": "npx",
      "args": ["@kirti676/api-tester-mcp@latest"]
    }
  }
}

✨ Características

  • 📥 Soporte de Entrada: Documentos OpenAPI/Swagger, colecciones de Postman y esquemas GraphQL
  • 🔄 Generación de Pruebas: Generación automática de escenarios de prueba de API y de carga
  • 🌐 Soporte Multilenguaje: Genera pruebas en TypeScript/Playwright, JavaScript/Jest, Python/pytest y más
  • ⚡ Ejecución de Pruebas: Ejecuta pruebas generadas con informes detallados
  • 🔐 Detección Inteligente de Autenticación: Análisis automático de variables de entorno y guía de configuración
  • 🔐 Autenticación: Soporte de tokens Bearer y claves de API mediante set_env_vars
  • 📊 Informes HTML: Informes hermosos y accesibles a través de recursos MCP
  • 📈 Progreso en Tiempo Real: Actualizaciones en vivo con barras de progreso y porcentajes de finalización
  • ⏱️ Cálculos de ETA: Tiempo estimado de finalización para todas las operaciones
  • 🎯 Seguimiento de Hitos: Notificaciones especiales en hitos clave de progreso (25%, 50%, 75%, etc.)
  • 📊 Métricas de Rendimiento: Cálculos de rendimiento y resúmenes de ejecución
  • ✅ Validación de Esquemas: Generación de cuerpos de solicitud a partir de ejemplos de esquemas
  • 🎯 Aserciones: Aserciones de código de estado por punto final (2xx, 4xx, 5xx)
  • 📦 Generación de Proyectos: Andamiaje completo de proyectos con dependencias y configuración

🌐 Generación de Pruebas Multilenguaje

El MCP de API Tester ahora admite la generación de código de prueba en múltiples lenguajes de programación y marcos de prueba:

🔧 Combinaciones de Lenguaje/Marco Compatibles

LenguajeMarcoDescripciónCaso de Uso
📘 TypeScript🎭 PlaywrightPruebas E2E modernas con excelente soporte de API🏢 Aplicaciones web empresariales
📘 TypeScript🚀 SupertestPruebas de API enfocadas en Express.js🟢 Servicios backend de Node.js
📙 JavaScript🃏 JestMarco de pruebas popular con buen ecosistema🔧 Pruebas de API generales
📙 JavaScript🌲 CypressPruebas E2E con excelente experiencia de desarrollador🌐 Aplicaciones full-stack
🐍 Python🧪 pytestPruebas integrales con fixtures y complementos📊 APIs con muchos datos y servicios de ML
🐍 Python📡 requestsPruebas HTTP simples para validación rápida⚡ Prototipado rápido y scripts

🎯 Flujo de Trabajo de Selección de Lenguaje

// 1. Get available languages and frameworks
const languages = await mcp.call("get_supported_languages");

// 2. Choose your preferred combination
await mcp.call("ingest_spec", {
  spec_type: "openapi",
  file_path: "./path/to/your/api-spec.json",
  preferred_language: "typescript",    // python, typescript, javascript
  preferred_framework: "playwright"     // varies by language
});

// 3. Generate test cases with code
await mcp.call("generate_test_cases", {
  language: "typescript",
  framework: "playwright"
});

// 4. Get complete project setup
await mcp.call("generate_project_files", {
  language: "typescript",
  framework: "playwright",
  project_name: "my-api-tests",
  include_examples: true
});

📁 Estructura de Proyecto Generada

La herramienta generate_project_files crea un proyecto completo y listo para ejecutar:

📘 TypeScript + Playwright:

my-api-tests/
├── 📦 package.json          # Dependencies & scripts
├── ⚙️ playwright.config.ts  # Playwright configuration
├── 📂 tests/
│   └── 🧪 api.spec.ts      # Generated test code
└── 📖 README.md            # Setup instructions

🐍 Python + pytest:

my-api-tests/
├── 📋 requirements.txt     # Python dependencies
├── ⚙️ pytest.ini         # pytest configuration
├── 📂 tests/
│   └── 🧪 test_api.py    # Generated test code
└── 📖 README.md          # Setup instructions

📙 JavaScript + Jest:

my-api-tests/
├── 📦 package.json       # Dependencies & scripts
├── ⚙️ jest.config.js     # Jest configuration
├── 📂 tests/
│   └── 🧪 api.test.js   # Generated test code
└── 📖 README.md         # Setup instructions

🎯 Características Específicas del Marco

  • 🎭 Playwright: Automatización de navegador, ejecución paralela, informes detallados
  • 🃏 Jest: Pruebas de instantáneas, simulación, modo de observación para desarrollo
  • 🧪 pytest: Fixtures, pruebas parametrizadas, ecosistema extenso de complementos
  • 🌲 Cypress: Depuración interactiva, depuración de viaje en el tiempo, pruebas en navegador real
  • 🚀 Supertest: Integración con Express.js, pruebas de middleware
  • 📡 requests: Llamadas API simples, gestión de sesiones, ayudantes de autenticación

📈 Seguimiento de Progreso

El MCP de API Tester incluye seguimiento integral de progreso para todas las operaciones:

📊 Indicadores Visuales de Progreso

🎯 API Test Execution: [██████████░░░░░░░░░░] 50.0% (5/10) | ETA: 2.5s - GET /api/users ✅

🔥 Características:

  • 📊 Barras de Progreso: Barras de progreso ASCII con indicadores llenos/vacíos
  • 📈 Porcentajes de Finalización: Porcentaje de finalización en tiempo real
  • ⏰ Cálculos de ETA: Tiempo estimado de finalización basado en el rendimiento actual
  • 🎯 Notificaciones de Hitos: Resaltado especial en puntos clave de progreso
  • ⚡ Métricas de Rendimiento: Estadísticas de rendimiento y tiempo
  • 📋 Contexto de Operación: Información detallada sobre el paso actual que se está ejecutando

✅ Disponible para:

  • 🎬 Generación de escenarios
  • 🧪 Generación de casos de prueba
  • 🚀 Ejecución de pruebas de API
  • ⚡ Ejecución de pruebas de carga
  • 🔄 Todas las operaciones de larga duración

🛠️ Herramientas MCP

El servidor proporciona 11 herramientas MCP integrales con especificaciones detalladas de parámetros:

1. 📥 ingest_spec - Cargar Especificaciones de API

Carga colecciones de OpenAPI/Swagger, Postman o esquemas GraphQL con preferencias de lenguaje/marco

{
  "spec_type": "openapi",           // openapi, swagger, postman, graphql (optional, auto-detected)
  "file_path": "./api-spec.json",   // Path to JSON, YAML, or GraphQL schema file (required)
  "preferred_language": "python",   // python, typescript, javascript (optional, default: python)
  "preferred_framework": "requests" // pytest, requests, playwright, jest, cypress, supertest (optional, default: requests)
}

2. 🔧 set_env_vars - Configurar Autenticación y Entorno

Establece variables de entorno con validación automática y orientación

{
  "variables": {},                  // Dictionary of custom environment variables (optional)
  "baseUrl": null,                 // API base URL (optional)
  "auth_bearer": null,             // Bearer/JWT token (optional)
  "auth_apikey": null,             // API key (optional)
  "auth_basic": null,              // Base64 encoded credentials (optional)
  "auth_username": null,           // Username for basic auth (optional)
  "auth_password": null            // Password for basic auth (optional)
}

3. 🎬 generate_scenarios - Crear Escenarios de Prueba

Genera escenarios de prueba a partir de especificaciones ingeridas

{
  "include_negative_tests": true,   // Generate failure scenarios (default: true)
  "include_edge_cases": true        // Generate boundary conditions (default: true)
}

4. 🧪 generate_test_cases - Convertir a Pruebas Ejecutables

Convierte escenarios en casos de prueba ejecutables en el lenguaje/marco preferido

{
  "scenario_ids": null              // Array of scenario IDs or null for all (optional)
}

5. 🚀 run_api_tests - Ejecutar Pruebas de API

Ejecuta pruebas de API con resultados detallados e informes

{
  "test_case_ids": null,           // Array of test case IDs or null for all (optional)
  "max_concurrent": 10             // Number of concurrent requests 1-50 (default: 10)
}

6. ⚡ run_load_tests - Ejecutar Pruebas de Rendimiento

Ejecuta pruebas de carga/rendimiento con parámetros configurables

{
  "test_case_ids": null,           // Array of test case IDs or null for all (optional)
  "duration": 60,                  // Test duration in seconds (default: 60)
  "users": 10,                     // Number of concurrent virtual users (default: 10)
  "ramp_up": 10                    // Ramp up time in seconds (default: 10)
}

7. 🌐 get_supported_languages - Listar Opciones de Lenguaje/Marco

Obtén la lista de lenguajes de programación y marcos de prueba compatibles

// No parameters required
{}

8. 📦 generate_project_files - Generar Proyectos Completos

Genera la estructura completa del proyecto con dependencias y configuración

{
  "project_name": null,            // Project folder name (optional, auto-generated if null)
  "include_examples": true         // Include example test files (default: true)
}

9. 📁 get_workspace_info - Información del Espacio de Trabajo

Obtén información sobre el directorio del espacio de trabajo y las ubicaciones de generación de archivos

// No parameters required
{}

10. 🔍 debug_file_system - Diagnósticos del Sistema de Archivos

Obtén información integral del espacio de trabajo y diagnósticos del sistema de archivos

// No parameters required
{}

11. 📊 get_session_status - Estado de Sesión y Progreso

Recupera información de la sesión actual con detalles de progreso

// No parameters required
{}

📚 Recursos MCP

  • file://reports - Lista todos los informes de prueba disponibles
  • file://reports/{report_id} - Accede a informes de prueba HTML individuales

💡 Prompts MCP

  • create_api_test_plan - Genera planes integrales de prueba de API
  • analyze_test_failures - Analiza fallos de prueba y proporciona recomendaciones

🔍 Análisis Inteligente de Variables de Entorno

El MCP de API Tester ahora analiza automáticamente tus especificaciones de API para detectar variables de entorno requeridas y proporciona orientación útil de configuración:

🎯 Detección Automática

  • 🔐 Esquemas de Autenticación: Tokens Bearer, claves de API, autenticación básica, OAuth2
  • 🌐 URLs Base: Extraídas de servidores/hosts de especificaciones
  • 🔗 Variables de Plantilla: Variables de colección de Postman como {{baseUrl}}, {{authToken}}
  • 📍 Parámetros de Ruta: Valores dinámicos en rutas como /users/{userId}

💡 Sugerencias Inteligentes

// 1. Ingest specification - automatic analysis included
const result = await mcp.call("ingest_spec", {
  spec_type: "openapi",
  file_path: "./api-specification.json"
});

// Check the setup message for immediate guidance
console.log(result.setup_message);
// "⚠️ 2 required environment variable(s) detected..."

// 2. Get detailed setup instructions
const suggestions = await mcp.call("get_env_var_suggestions");
console.log(suggestions.setup_instructions);
// Provides copy-paste ready configuration examples

🎯 Claves de Parámetros Predeterminadas

Todas las herramientas MCP ahora proporcionan claves de parámetros predeterminadas útiles para guiar a los usuarios sobre qué valores pueden establecer:

🔧 Variables de Entorno (set_env_vars)

🔑 TODOS LOS PARÁMETROS SON OPCIONALES - Proporciona solo lo que necesites:

// Option 1: Just the base URL
await mcp.call("set_env_vars", {
  baseUrl: "https://api.example.com/v1"
});

// Option 2: Just authentication
await mcp.call("set_env_vars", {
  auth_bearer: "your-jwt-token-here"
});

// Option 3: Multiple parameters
await mcp.call("set_env_vars", {
  baseUrl: "https://api.example.com/v1",
  auth_bearer: "your-jwt-token",
  auth_apikey: "your-api-key"
});

// Option 4: Using variables dict for custom values
await mcp.call("set_env_vars", {
  variables: {
    "baseUrl": "https://api.example.com/v1",
    "custom_header": "custom-value"
  }
});

🌐 Selección de Lenguaje y Marco

Los valores predeterminados te ayudan a comprender las opciones disponibles:

// Ingest with defaults shown
await mcp.call("ingest_spec", {
  spec_type: "openapi",        // openapi, swagger, postman
  file_path: "./api-spec.json", // Path to JSON or YAML specification file
  preferred_language: "python", // python, typescript, javascript
  preferred_framework: "requests" // pytest, requests, playwright, jest, cypress, supertest
});

// Project generation with defaults
await mcp.call("generate_project_files", {
  language: "python",          // python, typescript, javascript
  framework: "requests",       // Framework matching the language
  project_name: "api-tests",   // Project folder name
  include_examples: true       // Include example test files
});

⚡ Parámetros de Ejecución de Pruebas

Valores predeterminados claros para el ajuste de rendimiento:

// API tests with concurrency control
await mcp.call("run_api_tests", {
  test_case_ids: null,        // ["test_1", "test_2"] or null for all
  max_concurrent: 10          // Number of concurrent requests (1-50)
});

// Load tests with performance parameters  
await mcp.call("run_load_tests", {
  test_case_ids: null,        // ["test_1", "test_2"] or null for all
  duration: 60,               // Test duration in seconds
  users: 10,                  // Number of concurrent virtual users
  ramp_up: 10                 // Ramp up time in seconds
});

🔧 Ejemplo de Configuración

// NEW: Check supported languages and frameworks
const languages = await mcp.call("get_supported_languages");
console.log(languages.supported_combinations);

// Ingest specification with language preferences
await mcp.call("ingest_spec", {
  spec_type: "openapi",
  file_path: "./openapi-specification.json",
  preferred_language: "typescript",
  preferred_framework: "playwright"
});

// Set environment variables for authentication
await mcp.call("set_env_vars", {
  variables: {
    "baseUrl": "https://api.example.com",
    "auth_bearer": "your-bearer-token",
    "auth_apikey": "your-api-key"
  }
});

// Generate test scenarios
await mcp.call("generate_scenarios", {
  include_negative_tests: true,
  include_edge_cases: true
});

// Generate test cases in TypeScript/Playwright
await mcp.call("generate_test_cases", {
  language: "typescript",
  framework: "playwright"
});

// Generate complete project files
await mcp.call("generate_project_files", {
  language: "typescript",
  framework: "playwright",
  project_name: "my-api-tests",
  include_examples: true
});

// Run API tests (still works with existing execution engine)
await mcp.call("run_api_tests", {
  max_concurrent: 5
});

🚀 Ejemplo Completo de Flujo de Trabajo

Aquí hay un ejemplo completo de prueba de la API de Petstore:

# 1. Start the MCP server
npx @kirti676/api-tester-mcp@latest

Luego en tu cliente MCP (como Claude Desktop):

// 1. Load the Petstore OpenAPI spec
await mcp.call("ingest_spec", {
  spec_type: "openapi",
  file_path: "./examples/petstore_openapi.json"
});

// 2. Set environment variables
await mcp.call("set_env_vars", {
  pairs: {
    "baseUrl": "https://petstore.swagger.io/v2",
    "auth_apikey": "special-key"
  }
});

// 3. Generate test cases
const tests = await mcp.call("get_generated_tests");

// 4. Run API tests
const result = await mcp.call("run_api_tests");

// 5. View results in HTML report
const reports = await mcp.call("list_resources", {
  uri: "file://reports"
});

📖 Ejemplos de Uso

🔄 Flujo de Trabajo Básico de Pruebas de API

  1. 📥 Ingerir Especificación de API

    {
      "tool": "ingest_spec",
      "params": {
        "spec_type": "openapi",
        "content": "{ ... your OpenAPI spec ... }"
      }
    }
    
  2. 🔐 Configurar Autenticación

    {
      "tool": "set_env_vars", 
      "params": {
        "variables": {
          "auth_bearer": "your-token",
          "baseUrl": "https://api.example.com"
        }
      }
    }
    
  3. 🚀 Generar y Ejecutar Pruebas

    {
      "tool": "generate_scenarios",
      "params": {
        "include_negative_tests": true
      }
    }
    
  4. 📊 Ver Resultados

    • 📄 Accede a informes HTML a través de recursos MCP
    • 📈 Obtén estado de sesión y estadísticas

🚀 Flujo de Trabajo de Pruebas de API GraphQL

  1. 📥 Ingerir Esquema GraphQL

    {
      "tool": "ingest_spec",
      "params": {
        "spec_type": "graphql",
        "file_path": "./schema.graphql"
      }
    }
    
  2. 🔐 Configurar Punto Final GraphQL

    {
      "tool": "set_env_vars", 
      "params": {
        "graphqlEndpoint": "https://api.example.com/graphql",
        "auth_bearer": "your-jwt-token"
      }
    }
    
  3. 🧪 Generar Pruebas GraphQL

    {
      "tool": "generate_test_cases",
      "params": {
        "preferred_language": "python",
        "preferred_framework": "pytest"
      }
    }
    
  4. 📊 Ejecutar Pruebas GraphQL

    {
      "tool": "run_api_tests",
      "params": {
        "max_concurrent": 5
      }
    }
    

⚡ Pruebas de Carga

{
  "tool": "run_load_tests",
  "params": {
    "users": 10,
    "duration": 60,
    "ramp_up": 10
  }
}

🔍 Características de Generación de Pruebas

  • ✅ Pruebas Positivas: Solicitudes válidas con respuestas 2xx esperadas
  • ❌ Pruebas Negativas: Autenticación inválida (401), métodos incorrectos (405)
  • 🎯 Casos Límite: Cargas útiles grandes, condiciones de frontera
  • 🏗️ Cuerpos Basados en Esquemas: Generación automática de cuerpos de solicitud a partir de esquemas OpenAPI
  • 🔍 Aserciones Integrales: Códigos de estado, tiempos de respuesta, validación de contenido

📊 Informes HTML

Los informes generados incluyen:

  • 📈 Resumen de ejecución de pruebas con estadísticas de aprobados/fallidos
  • ⏱️ Resultados detallados de pruebas con información de tiempo
  • 🔍 Desgloses de aserciones y detalles de errores
  • 👁️ Vistas previas de respuestas e información de depuración
  • 📱 Diseño receptivo compatible con dispositivos móviles

🔒 Soporte de Autenticación

  • 🎫 Tokens Bearer: Variable de entorno auth_bearer
  • 🔑 Claves de API: Variable de entorno auth_apikey (enviada como encabezado X-API-Key)
  • 👤 Autenticación Básica: Variable de entorno auth_basic

🔧 Requisitos

  • 🐍 Python: 3.8 o superior
  • 🟢 Node.js: 14 o superior (para instalación npm)

📦 Dependencias

🐍 Dependencias de Python

  • 🚀 fastmcp>=0.2.0
  • 📊 pydantic>=2.0.0
  • 🌐 requests>=2.28.0
  • ✅ jsonschema>=4.0.0
  • 📝 pyyaml>=6.0
  • 🎨 jinja2>=3.1.0
  • ⚡ aiohttp>=3.8.0
  • 🎭 faker>=19.0.0

🟢 Dependencias de Node.js

  • ✨ Ninguna (paquete autocontenido)

🔧 Solución de Problemas

❗ Problemas Comunes

📦 El Comando NPX No Funciona

# If npx command fails, try:
npm install -g @kirti676/api-tester-mcp@latest

# Or run directly:
node ./node_modules/@kirti676/api-tester-mcp/cli.js

🐍 Python No Encontrado

# Make sure Python 3.8+ is installed and in PATH
python --version

# Install Python dependencies manually if needed:
pip install fastmcp>=0.2.0 pydantic>=2.0.0 requests>=2.28.0

🔗 Problemas de Conexión del Cliente MCP

  • ✅ Asegúrate de que el servidor MCP se esté ejecutando en el transporte stdio (predeterminado)
  • 🔄 Verifica que tu cliente MCP admita la última versión del protocolo MCP
  • 📝 Verifica que la sintaxis JSON de configuración sea correcta

🆘 Obtener Ayuda

  1. 📖 Consulta el directorio de Ejemplos para configuraciones funcionales
  2. 🔍 Ejecuta con el indicador --verbose para registro detallado
  3. 🐛 Reporta problemas en GitHub Issues

🤝 Contribuciones

  1. Haz un fork del repositorio
  2. Crea tu rama de características (git checkout -b feature/amazing-feature)
  3. Realiza tus cambios (git commit -m 'Add some amazing feature')
  4. Empuja a la rama (git push origin feature/amazing-feature)
  5. Abre una Solicitud de Extracción

📄 Licencia

Este proyecto está licenciado bajo la Licencia MIT - consulta el archivo LICENSE para más detalles.

🐛 Problemas y Soporte

📈 Hoja de Ruta

  • Generación de pruebas multi-lenguaje - Soporte para TypeScript/Playwright, JavaScript/Jest, Python/pytest ✨ ¡NUEVO!
  • Generación completa de proyectos - Estructura completa del proyecto con dependencias y configuración ✨ ¡NUEVO!
  • Soporte para API GraphQL - Compatible con esquemas GraphQL ✨ ¡NUEVO!
  • Métodos de autenticación adicionales (OAuth2, JWT)
  • Generación de pruebas en Go/Golang (con testify/ginkgo)
  • Generación de pruebas en C#/.NET (con NUnit/xUnit)
  • Monitoreo de rendimiento y alertas
  • Integración con pipelines de CI/CD (GitHub Actions, Jenkins)
  • Generación avanzada de datos de prueba a partir de ejemplos y esquemas
  • Pruebas de contratos de API con soporte para Pact
  • Generación de servidores mock para desarrollo

📄 Derechos de autor y uso

© 2025 kirti676. Todos los derechos reservados.

Este repositorio y su contenido están protegidos por la ley de derechos de autor. Para obtener permiso para reutilizar, hacer referencia o redistribuir cualquier parte de este proyecto, comuníquese con el propietario en kirti676@outlook.com.

✅ Permitido sin permiso:

  • Aprendizaje personal y experimentación
  • Contribuir a este repositorio mediante Pull Requests

❓ Requiere permiso:

  • Uso comercial o integración
  • Redistribución en forma modificada
  • Publicación de trabajos derivados

Para consultas sobre licencias, oportunidades de colaboración o solicitudes de permiso, comuníquese con kirti676@outlook.com.


⭐ Star this repo 🍴 Fork this repo

🚀 Construido con ❤️ para ingenieros de QA/SDET en todo el mundo 🌍