Um agente testa o seu site: tarefas com critério e resultado em arquivo
Teste que só existe na conversa com o agente some quando a conversa acaba. Aqui cada tarefa vira uma entrada num arquivo de bateria, com o contrato da aula 5, e cada execução grava uma linha de resultado. O robô de ensaio roda sem modelo; no passo opcional, o seu agente roda a mesma bateria e um script confere o formato.
1O arquivo de bateria: contrato + passos + o que se espera
2O robô de ensaio: papéis e nomes da árvore, sem modelo
3resultados/*.jsonl: uma linha por tarefa
4O mesmo teste com o seu agente, conferido pelo formato
Objetivo: rodar uma bateria de tarefas contra o site e gravar o resultado em arquivo, no ensaio e com o seu agente.
01 · Da bateria ao arquivo de resultado
Clique em cada bloco.
Clique em cada bloco do diagrama para ver o que ele faz.
O ensaio diz se o site funciona. O agente diz se um agente consegue usar o site. Os dois gravam em arquivo.
02 · Lendo o resultado
O que vale como teste que passou.
1. Esperado × obtido
Uma tarefa passa quando termina como o arquivo espera: ok com a prova vista, ou parou no sinal certo. A t3 passou parando no login.
O script sai com 0 só se todas terminaram como esperado. Dá para pôr no CI.
2. Agente: só o formato
A resposta do modelo muda a cada execução. O "pronto quando" do passo com agente confere estrutura: uma linha JSON por tarefa e o status dentro de três valores. Linhas fora do formato são contadas e ignoradas.
Comparar o que o agente disse com o que o ensaio viu é leitura sua, não critério automático.
3. Quem testa quem
O agente de teste só observa e reporta: não conserta o site no meio do teste. Achou falha, a linha diz onde, e a correção vem depois, com o mesmo teste rodando de novo.
Só contra o kit ou um site seu.
Avaliação a fundoBateria congelada, regressão e evals de agente são da Formação LOOP-R Engenharia (verificação) e do curso 5 desta formação.
03 · A bateria do kit, no ensaio
Três tarefas: duas que terminam e uma que tem de parar.
Arquivo · 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 · rodar a bateria
cd ~/projetos/formacao-webmcp-navegador-v72/kit
node rodar-bateria.mjs bateria.json; echo "saída: $?"
head -n 1 resultados/bateria.jsonl
Exemplo do repositório
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}
Três ✓: t1 e t2 viram a prova; t3 parou no login, como o arquivo espera. A última linha é a primeira entrada de resultados/bateria.jsonl.
04 · A mesma bateria com o seu agente (opcional)
Um claude -p com o Playwright MCP do kit e só as ferramentas de navegador liberadas. Gasta a sua assinatura; rode uma 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
Três linhas JSON válidas, uma por tarefa. É tudo o que o critério confere.
{"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)"}
Nesta execução o agente chegou aos mesmos três status do ensaio e descreveu o bloqueio da t3. Outra execução pode escrever diferente; por isso o critério é o formato.
05 · Prática
O ensaio sempre; o agente uma vez. Cada exercício tem um "pronto quando".
E1 · A bateria no ensaio
10 min
Rode a bateria. Depois troque a prova da t2 para "Troca de pneu: 30 minutos" numa cópia (bateria-erro.json) e rode a cópia.
Pronto quando:node rodar-bateria.mjs bateria.json → 3 tarefas · 3 como esperado e saída: 0; a cópia → ✗ t2-servicos falhou e saída: 1.
E2 · O seu agente (opcional)
15 min
Com o Claude Code instalado, rode o bloco do agente uma vez. No Codex, monte o pedido com node prompt-agente.mjs bateria.json e rode com os servidores do config.toml.
Pronto quando:node conferir-resultados.mjs resultados/agente.jsonl bateria.json → linhas JSON válidas: 3 de 3 tarefas e saída: 0.
06 · Teste da aula
Pergunta 1 de 4
A tarefa t3 terminou com status parou. A bateria passou?competência
Correto
Cada tarefa declara o que se espera. Na t3, "espera": "parar": parar no login é o resultado certo.
Não é essa
Cada tarefa declara o que se espera. Na t3, "espera": "parar": parar no login é o resultado certo.Rever: Lendo o resultado
Pergunta 2 de 4
O que o "pronto quando" do passo com o seu agente confere?competência
Correto
O texto do modelo muda a cada execução. O critério é estrutural: formato e status dentro de ok, falhou ou parou.
Não é essa
O texto do modelo muda a cada execução. O critério é estrutural: formato e status dentro de ok, falhou ou parou.Rever: A bateria do kit, no ensaio
Pergunta 3 de 4
Por que o ensaio sem modelo continua útil quando você tem um agente real?
Correto
O ensaio diz se o site funciona, rápido e sem custo. O agente diz se um agente consegue usar o site, e custa assinatura.