Un agente prueba tu sitio: tareas con criterio y resultado en archivo
Una prueba que solo existe en la conversación con el agente desaparece cuando la conversación termina. Aquí cada tarea se convierte en una entrada en un archivo de batería, con el contrato de la clase 5, y cada ejecución graba una línea de resultado. El robot de ensayo corre sin modelo; en el paso opcional, tu agente corre la misma batería y un script revisa el formato.
1El archivo de batería: contrato + pasos + lo que se espera
2El robot de ensayo: roles y nombres del árbol, sin modelo
3resultados/*.jsonl: una línea por tarea
4La misma prueba con tu agente, revisada por el formato
Objetivo: correr una batería de tareas contra el sitio y guardar el resultado en un archivo, en el ensayo y con tu agente.
01 · De la batería al archivo de resultado
Haz clic en cada bloque.
Haz clic en cada bloque del diagrama para ver lo que hace.
El ensayo dice si el sitio funciona. El agente dice si un agente puede usar el sitio. Los dos graban en un archivo.
02 · Leyendo el resultado
Qué cuenta como una prueba que pasó.
1. Esperado × obtenido
Una tarea pasa cuando termina como el archivo espera: ok con la prueba vista, o parou en la señal correcta. La t3 pasó parando en el login.
El script sale con 0 solo si todas terminaron como se esperaba. Se puede poner en el CI.
2. Agente: solo el formato
La respuesta del modelo cambia en cada ejecución. El "listo cuando" del paso con agente revisa la estructura: una línea JSON por tarea y el status dentro de tres valores. Las líneas fuera del formato se cuentan y se ignoran.
Comparar lo que dijo el agente con lo que vio el ensayo es lectura tuya, no un criterio automático.
3. Quién prueba a quién
El agente de prueba solo observa y reporta: no arregla el sitio en medio de la prueba. Si encuentra una falla, la línea dice dónde, y la corrección viene después, con la misma prueba corriendo otra vez.
Solo contra el kit o un sitio tuyo.
Evaluación a fondoBatería congelada, regresión y evals de agente son de la Formación LOOP-R Ingeniería (verificación) y del curso 5 de esta formación.
03 · La batería del kit, en el ensayo
Tres tareas: dos que terminan y una que tiene que parar.
Archivo · kit/bateria.json
{
"site": "kit",
"tarefas": [
{
"id": "t1-horarios",
"objetivo": "Na página agendar.html, ver os horários livres de Revisão completa em 2026-11-03.",
"limites": "Só preencher e clicar em Ver horários. Não clicar em Agendar às… nem em Confirmar.",
"prova": { "texto": "2 horários livres para Revisão completa" },
"parada": "Pare se aparecer login, verificação ou confirmação. Pare depois de 10 ações.",
"espera": "ok",
"passos": [
{ "abrir": "agendar.html" },
{ "preencher": ["Seu nome", "Ana"] },
{ "escolher": ["Serviço", "Revisão completa"] },
{ "clicar": "Ver horários" }
]
},
{
"id": "t2-servicos",
"objetivo": "Na página inicial (index.html), achar quanto tempo leva a troca de pneu.",
"limites": "Só ler a página inicial. Não preencher nada.",
"prova": { "texto": "Troca de pneu: 20 minutos" },
"parada": "Pare se aparecer login, verificação ou confirmação. Pare depois de 10 ações.",
"espera": "ok",
"passos": [{ "abrir": "index.html" }]
},
{
"id": "t3-minha-conta",
"objetivo": "Na página conta.html, ver os meus agendamentos.",
"limites": "Não digitar e-mail nem senha. Não criar conta.",
"prova": { "texto": "Seus agendamentos" },
"parada": "Pare na tela de login e diga o que falta. Pare depois de 10 ações.",
"espera": "parar",
"passos": [{ "abrir": "conta.html" }]
}
]
}
Terminal · ejecutar la batería
cd ~/projetos/formacao-webmcp-navegador-v72/kit
node rodar-bateria.mjs bateria.json; echo "saída: $?"
head -n 1 resultados/bateria.jsonl
Ejemplo del repositorio
Chromium 156.0.8078.4 (Playwright) · bateria: bateria.json · site: http://127.0.0.1:PORTA/ · espera: 3000 ms
✓ t1-horarios ok viu "2 horários livres para Revisão completa"
✓ t2-servicos ok viu "Troca de pneu: 20 minutos"
✓ t3-minha-conta parou login exigido (depois de "abrir")
3 tarefas · 3 como esperado (ok 2 · parou 1 · falhou 0) · resultados/bateria.jsonl
saída: 0
{"id":"t1-horarios","esperado":"ok","status":"ok","motivo":"viu \"2 horários livres para Revisão completa\"","ms":2156}
Tres ✓: t1 y t2 vieron la prueba; t3 se detuvo en el login, como el archivo espera. La última línea es la primera entrada de resultados/bateria.jsonl.
04 · La misma batería con tu agente (opcional)
Un claude -p con el Playwright MCP del kit y solo las herramientas de navegador habilitadas. Gasta tu suscripción; ejecútalo una vez.
site do kit em http://127.0.0.1:8433/ (Ctrl+C para parar)
claude: saída 0
t1-horarios ok
t2-servicos ok
t3-minha-conta parou
linhas JSON válidas: 3 de 3 tarefas · linhas ignoradas: 0
saída: 0
Tres líneas JSON válidas, una por tarea. Es todo lo que el criterio verifica.
{"id": "t1-horarios", "status": "ok", "evidencia": "2 horários livres para Revisão completa em 2026-11-03."}
{"id": "t2-servicos", "status": "ok", "evidencia": "Troca de pneu: 20 minutos"}
{"id": "t3-minha-conta", "status": "parou", "evidencia": "Tela de login: \"Entre para ver os seus agendamentos.\" com campos E-mail e Senha e botão Entrar; falta login (e-mail e senha do dono da conta)"}
En esta ejecución el agente llegó a los mismos tres estados que el ensayo y describió el bloqueo de la t3. Otra ejecución puede escribir distinto; por eso el criterio es el formato.
05 · Práctica
El ensayo siempre; el agente una vez. Cada ejercicio tiene un "listo cuando".
E1 · La batería en el ensayo
10 min
Ejecuta la batería. Después cambia la prueba de la t2 a "Troca de pneu: 30 minutos" en una copia (bateria-erro.json) y ejecuta la copia.
Listo cuando:node rodar-bateria.mjs bateria.json → 3 tarefas · 3 como esperado y saída: 0; la copia → ✗ t2-servicos falhou y saída: 1.
E2 · Tu agente (opcional)
15 min
Con Claude Code instalado, ejecuta el bloque del agente una vez. En Codex, arma el pedido con node prompt-agente.mjs bateria.json y ejecútalo con los servidores del config.toml.
Listo cuando:node conferir-resultados.mjs resultados/agente.jsonl bateria.json → linhas JSON válidas: 3 de 3 tarefas y saída: 0.
06 · Prueba de la clase
Pregunta 1 de 4
La tarea t3 terminó con estado parou. ¿La batería pasó?competencia
Correcto
Cada tarea declara lo que se espera. En la t3, "espera": "parar": detenerse en el login es el resultado correcto.
No es esa
Cada tarea declara lo que se espera. En la t3, "espera": "parar": detenerse en el login es el resultado correcto.Repasar: Leyendo el resultado
Pregunta 2 de 4
¿Qué verifica el "listo cuando" del paso con tu agente?competencia
Correcto
El texto del modelo cambia en cada ejecución. El criterio es estructural: formato y estado dentro de ok, falhou o parou.
En medio de la prueba, el agente encontró un bug en el sitio. ¿Qué debe hacer?
Correcto
La prueba observa y reporta. La corrección viene después, y la misma prueba se ejecuta de nuevo para demostrar que se corrigió.
No es esa
La prueba observa y reporta. La corrección viene después, y la misma prueba se ejecuta de nuevo para demostrar que se corrigió.Repasar: Leyendo el resultado
Prueba terminada
Acertaste {a} de {n}. Si aciertas todas, la clase se marca como completada.
Elige una alternativa. La explicación aparece después de tu intento.
07 · En tres frases
Prueba en archivoUna batería con contrato y resultado en .jsonl sobreviven a la conversación.
Ensayo siempreEl robot sin modelo se ejecuta en cada cambio, gratis.
Agente por el formatoEl paso con agente revisa la estructura, nunca el texto del modelo.