Stack de Pruebas API
Bruno, Hoppscotch, Hurl, k6, Artillery, Locust — reemplazos open-source de Postman + JMeter, sin atadura SaaS.
Qué incluye este pack
Este pack reúne las seis herramientas open-source que han reemplazado Postman y JMeter en equipos de ingeniería modernos. Los cambios de precios de Postman y la sincronización forzada en la nube desde 2023 empujaron a muchos equipos fuera; JMeter sigue funcionando pero sus scripts XML y ecosistema solo-Java son dolorosos al lado de alternativas JavaScript-nativas. El pack divide la superficie en tres problemas: exploración interactiva, aserciones CI y generación de carga.
| # | Recurso | Rol | Característica notable |
|---|---|---|---|
| 1 | Bruno | Cliente interactivo | Archivos .bru texto plano, colecciones versionables en git |
| 2 | Hoppscotch | Cliente interactivo | Browser-first, auto-alojable, colaboración en tiempo real |
| 3 | Hurl | Runner CI | DSL texto plano, binario único, perfecto para Makefiles |
| 4 | k6 | Pruebas de carga | Scripting JavaScript, dashboards Grafana-nativos |
| 5 | Artillery | Pruebas de carga | Escenarios YAML, carga browser via Playwright |
| 6 | Locust | Pruebas de carga | Tests Python puros, modelo distribuido master-worker |
La triada cliente interactivo + runner CI + generador de carga cubre el ciclo completo. Bruno o Hoppscotch es donde clicas mientras escribes endpoints. Hurl es lo que corre en CI para confirmar que el contrato no derivó. k6 / Artillery / Locust es lo que corre contra staging antes de cada release.
Por qué dejar Postman y JMeter
Tres fuerzas convergieron. Postman fue cloud-only por defecto en 2023 — colecciones sincronizan a sus servidores, compartir requiere cuentas, el tier gratis se redujo. La UX de JMeter es de 2005 — configs XML, GUI-first, sin historia de scripting agradable. CI demanda diffabilidad — Postman exporta blobs JSON que producen diffs PR ilegibles; el .bru de Bruno y el texto plano de Hurl producen diffs legibles que los reviewers pueden auditar.
Más allá de la migración, el pack open-source añade capacidades que Postman nunca tuvo:
- Correr la misma prueba de carga en tres motores para triangular (k6 para HTTP-heavy, Artillery para flujos browser, Locust cuando tu equipo Python quiere quedarse en Python).
- Los archivos Hurl son documentación — pega un
.hurlen un runbook y cualquier ingeniero con curl puede leerlo. - Auto-aloja Hoppscotch para mantener datos enterprise en tu red — el tier enterprise de Postman cobra por asiento.
Instala en un comando
# Instala el pack completo en el proyecto actual
tokrepo install pack/api-testing-stack
# O elige recursos individuales
tokrepo install hurl
tokrepo install k6
El TokRepo CLI escribe esqueletos de colección Bruno, un directorio tests/api/*.hurl, y una carpeta loadtest/ con plantillas para k6, Artillery y Locust. Snippets CI para GitHub Actions y GitLab CI incluidos por recurso.
Errores comunes
- Tratar resultados k6 como realistas sin warm-up. k6 escala rápido por defecto; si arrancas en 1000 VUs, tu servicio pasa los primeros 30 segundos llenando cachés y tu p99 se ve peor de lo que es. Usa
stagescon rampa de 30-60s. - Aserciones Hurl sobre texto del body. Aserta sobre paths JSON (
jsonpath "$.user.id"), no substrings. Comparaciones de texto fallan espuriamente cuando tu serializador cambia espacios u orden de keys. - Compartir colecciones Bruno sin estrategia de
environments/. Bruno soporta variables por entorno; si commiteas credenciales directo en archivos.bru, filtraste secretos a git. Usa patronesbru envy.env.local. - Locust en RPS muy alto en una máquina. El GIL de Locust significa que un proceso Python topa cerca de 1k-2k RPS; usa
--master+ múltiples--worker, o cambia a k6 para escenarios >5k RPS. - Olvidar registrar p99 junto con throughput. Un test que pega 10k RPS con p50=20ms es nada si p99=8s. Exporta siempre el histograma de latencia, no solo la media.
Flujo de trabajo recomendado
Una vez instalado, el día a día se ve así. El ingeniero draftea un endpoint y lo explora en Bruno contra un server local, commiteando los archivos .bru resultantes. Traduce el happy path y dos casos de fallo a tests/api/users.hurl — los tests Hurl son ahora el contrato. CI corre la suite Hurl en cada PR; fallos bloquean el merge. Una vez el endpoint llega a staging, un job programado de Prefect corre el baseline k6 (200 VUs por 5 minutos) y compara p95/p99 contra el checkpoint del deploy previo. Regresiones disparan alerta Slack con link al dashboard Grafana.
Antes de cada release mayor, el equipo corre Artillery contra staging con un escenario Playwright que imita navegación real, luego Locust con un escenario 10x para encontrar el cliff. Los tres motores discrepan 10-20% en RPS crudo pero siempre concuerdan en la forma de la curva — confías en el punto de inflexión aunque los números individuales diverjan.
Relación con otros packs
Este pack se empareja con Orquestación de Flujos (corre pruebas de carga nocturnas via cron Inngest o Prefect) y Generadores de Sitios Estáticos & Docs (publica docs OpenAPI que coincidan con lo que tus tests Hurl asertan — fuente única de verdad entre docs y tests). Para observabilidad completa, añade Charts & Visualización para renderizar el output CSV de k6 vía Apache ECharts o Grafana.
6 recursos listos para instalar
Preguntas frecuentes
¿Es gratis correr todo el pack?
Sí. Cada herramienta es open source bajo licencias permisivas (MIT, Apache 2.0, AGPL para auto-host de Hoppscotch). k6 tiene un servicio Grafana Cloud k6 pago para almacén gestionado de resultados, pero el binario OSS corre tests ilimitados local o en tu CI. Artillery tiene tier pro pago con reporte gestionado; el CLI core es gratis. Locust y Hurl son incondicionalmente gratis.
¿Cómo se compara con Postman?
Postman sigue siendo la experiencia más fluida para exploración API por primera vez gracias a su UX madura. El pack open-source iguala paridad de features para colecciones, entornos y scripts de test, con dos grandes ventajas: archivos texto que difen limpio en code review, y auto-host para que los secretos no salgan de tu red. Trade-off: UX de colaboración menos madura, sin monitoreo API integrado (usa Workflow Orchestration en su lugar).
¿Funcionará con Claude Code o Cursor?
Sí. Claude Code puede crear colecciones Bruno, tests Hurl y scripts k6 desde una spec OpenAPI — las páginas de recurso TokRepo incluyen prompts subagente. Flujo común: dale a Claude un openapi.yaml, pídele generar tests/api/*.hurl cubriendo cada endpoint, luego corre hurl --test tests/api/*.hurl en CI. Cursor obtiene reglas equivalentes en .cursor/rules/.
¿Qué diferencia a Bruno de Hoppscotch?
Bruno es desktop-first, basado en archivos — las colecciones viven en tu disco como .bru texto. Mejor para equipos pequeños que ya usan git como fuente de verdad. Hoppscotch es browser-first con auto-host opcional, con modelo de colaboración tiempo real más rico — mejor cuando product managers y QA también necesitan ver resultados de requests. La mayoría elige uno, pero coexisten bien si migras gradualmente.
¿Trampa operativa al correr k6 en CI?
k6 emite exit code 0 incluso cuando thresholds fallan a menos que pongas --quiet=false y mires stderr — o mejor, usa thresholds con abortOnFail: true por check. Muchos equipos envían CI verde que secretamente violó SLOs p99 porque confiaron en el exit code. También: canaliza el --out de k6 a JSON y archívalo como artefacto CI para comparar runs en el tiempo.
12 packs · 80+ recursos seleccionados
Explora todos los packs curados en la página principal
Volver a todos los packs