Primer caso y varios requests¶
Guarda este ejemplo como tests/distributor.robot. Sustituye la URL ficticia por
la de tu servicio, o utiliza el ejemplo ejecutable con API local.
*** Settings ***
Library RequestsLibrary
Library RequestReporter
*** Variables ***
${BASE_URL} https://api.qa.example.test
*** Test Cases ***
Consultar distribuidor
Set Case Metadata case_id=DIST-001 environment=QA
${response}= GET ${BASE_URL}/distribuidores/1042 expected_status=anything
${id}= Capture Response Consultar distribuidor ${response} # (1)!
Assert ${id} Código HTTP
... Should Be Equal As Integers ${response.status_code} 200
VAR ${body} ${response.json()} # (2)!
Verificar datos del distribuidor ${id} ${body}
*** Keywords ***
Verificar datos del distribuidor
[Arguments] ${id} ${body}
[Tags] robot:continue-on-failure
Assert ${id} Tipo de distribuidor
... Should Be Equal As Strings ${body}[tipoDistribuidor] AGENTE
Assert ${id} RFC con contenido
... Should Not Be Empty ${body}[rfc]
- Captura antes de verificar el status o interpretar el body. Así una respuesta HTTP inesperada conserva su evidencia. Cada captura devuelve un ID del caso.
VARy el acceso${body}[clave]permiten trabajar con los datos sinSet VariableniGet From Dictionarypara estas operaciones.
El archivo queda en results/cases/Consultar_distribuidor.html.
El título corresponde al nombre del test. Los nombres repetidos reciben sufijos
_2, _3, etc.; los nombres de archivo se sanitizan y limitan en longitud.
Asociar varias requests¶
Si primero obtienes un token y luego consultas un distribuidor, captura cada
response y conserva ambos IDs. Usa el ID correspondiente en cada Assert.
No se asume un “último request” para asociar las assertions.
*** Keywords ***
Obtener token
VAR &{form} grant_type=client_credentials client_secret=${CLIENT_SECRET}
${response}= POST ${BASE_URL}/oauth/token
... data=${form} expected_status=anything
${id}= Capture Response Obtener token ${response}
Assert ${id} Código HTTP
... Should Be Equal As Integers ${response.status_code} 200
VAR ${body} ${response.json()}
Assert ${id} Token presente Should Not Be Empty ${body}[access_token]
RETURN ${body}[access_token]
Este fragmento requiere ${BASE_URL}, ${CLIENT_SECRET} y las imports del primer
bloque. Consulta la configuración de datos sensibles.
Continuación ante fallos
Assert registra el resultado y propaga el fallo normal de Robot. La etiqueta
robot:continue-on-failure permite ejecutar comprobaciones independientes
en una keyword de negocio. Evita aplicarla a pasos dependientes, como obtener
un token requerido para la siguiente petición.
Keywords propias¶
Assert puede ejecutar assertions BuiltIn o keywords tuyas. Para las igualdades
habituales muestra Expected/Actual; para una keyword personalizada muestra sus
argumentos y error. Las comprobaciones no ejecutadas no se cuentan como SKIP.
Consultar keywords Usar DataDriver
Intentos sin response¶
El listener genera el HTML incluso si el test falla antes de Capture Response. Para asociar explícitamente un timeout o error de conexión con su operación, captura el intento dentro de una keyword de servicio. Esta keyword no ejecuta HTTP ni cambia el resultado del test: propaga el fallo después de registrar la evidencia.
*** Settings ***
Library RequestsLibrary
Library RequestReporter
*** Test Cases ***
Consultar servicio
VAR ${url} http://localhost:8000/health
TRY
${response}= GET ${url} timeout=10 expected_status=anything
EXCEPT AS ${error}
Capture Request Error Health GET ${url} ${error}
Fail ${error}
END
${id}= Capture Response Health ${response}
Assert ${id} HTTP status
... Should Be Equal As Integers ${response.status_code} 200
Failed HTTP attempts muestra método, URL protegida y mensaje. No fabrica status, headers ni bodies. Un HTTP 4xx/5xx sí tiene response: usa Capture Response normalmente. Los errores de ejecución de Robot y el mensaje final se conservan por separado. Una terminación abrupta del proceso puede impedir que se cierre el reporte.
[{"name": "English", "lang": "en", "link": "/robotframework-request-reporter/usage/", "fragments": {"primer-caso-y-varios-requests": "first-case-and-multiple-requests", "asociar-varias-requests": "associate-multiple-requests", "keywords-propias": "custom-keywords", "intentos-sin-response": "attempts-without-a-response"}, "current": false}, {"name": "Espa\u00f1ol", "lang": "es", "link": "/robotframework-request-reporter/es/usage/", "fragments": {"primer-caso-y-varios-requests": "primer-caso-y-varios-requests", "asociar-varias-requests": "asociar-varias-requests", "keywords-propias": "keywords-propias", "intentos-sin-response": "intentos-sin-response"}, "current": true}]