✅
Teste de Login API
/app/tests/meu-primeiro-test.yaml
high
2 Steps
Duration: 5ms
Success Rate: 100%
✅
Successful Steps
2
100% success rate
❌
Failed Steps
0
0% of total
⏭️
Skipped Steps
0
0% of total
🔗
HTTP Requests
2
100% requests
🔄
Iterações
0
0 steps com iterações
📊 Execution Timeline
| # | Status | Step Name | Type | Duration | Started At | Details |
|---|---|---|---|---|---|---|
| 1 | ✅ | Fazer login POST /post | request | 3ms | 19/10/2025, 10:28:37 |
✅ Request completed successfully
|
| 2 | ✅ | Buscar perfil do usuário GET /anything?username=test_user@flowtest.com&admin=true&name=John Doe | request | 2ms | 19/10/2025, 10:28:37 |
✅ Request completed successfully
|
🌐 HTTP Requests Debug Info
✅
Fazer login
Step #1
3ms
cURL Command
curl -X POST -H 'Content-Type: application/json' -H 'X-Auth-Token: {{auth_token}}' -d '{"username":"test_user@flowtest.com","password":"test_password_123","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.KMUFsIDTnFmyG3nMiGM6H9FNFUROf3wh7SmqJp-QV30"}' "http://httpbin/post"📤 Request
Method: POST
URL:
http://httpbin/post Base URL:
http://httpbin Request Headers
Content-Type: application/json
X-Auth-Token: {{auth_token}}Request Body
{
"username": "test_user@flowtest.com",
"password": "test_password_123",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.KMUFsIDTnFmyG3nMiGM6H9FNFUROf3wh7SmqJp-QV30"
}📥 Response
Status Code: 200
Duration: 3ms
Size: 879 bytes
Response Headers
server: gunicorn/19.9.0
date: Sun, 19 Oct 2025 10:28:37 GMT
connection: keep-alive
content-type: application/json
content-length: 1001
access-control-allow-origin: *
access-control-allow-credentials: trueResponse Body
{
"args": {},
"data": "{\"username\":\"test_user@flowtest.com\",\"password\":\"test_password_123\",\"token\":\"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.KMUFsIDTnFmyG3nMiGM6H9FNFUROf3wh7SmqJp-QV30\"}",
"files": {},
"form": {},
"headers": {
"Accept": "application/json, text/plain, */*",
"Accept-Encoding": "gzip, compress, deflate, br",
"Connection": "keep-alive",
"Content-Length": "251",
"Content-Type": "application/json",
"Host": "httpbin",
"User-Agent": "axios/1.12.1",
"X-Auth-Token": "{{auth_token}}"
},
"json": {
"password": "test_password_123",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.KMUFsIDTnFmyG3nMiGM6H9FNFUROf3wh7SmqJp-QV30",
"username": "test_user@flowtest.com"
},
"origin": "172.18.0.3",
"url": "http://httpbin/post"
} 📊
Total
9
assertions
✅
Passed
9
assertions
📈
Success Rate
100%
success
✓
status_code
PASSED
✓ Match
Condição
status_code equals 200
Assertion passou conforme esperado
Valor recebido: 200
✓
body.json.token.type
PASSED
✓ Match
Condição
body.json.token.type equals string
Assertion passou conforme esperado
Valor recebido: string
✓
body.json.token.pattern
PASSED
Condição
body.json.token.pattern equals ^[A-Za-z0-9-_.]+$
Comparação de Valores
Esperado expected
^[A-Za-z0-9-_.]+$
Recebido actual
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.KMUFsIDTnFmyG3nMiGM6H9FNFUROf3wh7SmqJp-QV30
✓
body.json.token.minLength
PASSED
Condição
body.json.token.minLength equals >= 10
Comparação de Valores
Esperado expected
>= 10
Recebido actual
172
✓
body.json.token.notEmpty
PASSED
✓ Match
Condição
body.json.token.notEmpty equals true
Assertion passou conforme esperado
Valor recebido: true
✓
custom.jwt_token_format
PASSED
✓ Match
Condição
custom.jwt_token_format equals true
Assertion passou conforme esperado
Valor recebido: true
✓
custom.token_not_empty
PASSED
✓ Match
Condição
custom.token_not_empty equals true
Assertion passou conforme esperado
Valor recebido: true
✓
custom.token_length_valid
PASSED
✓ Match
Condição
custom.token_length_valid equals true
Assertion passou conforme esperado
Valor recebido: true
✓
custom.response_time_reasonable
PASSED
✓ Match
Condição
custom.response_time_reasonable equals true
Assertion passou conforme esperado
Valor recebido: true
Captured Variables
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.KMUFsIDTnFmyG3nMiGM6H9FNFUROf3wh7SmqJp-QV30"
}Available Variables
{
"api_base_url": "http://localhost:8080",
"test_credentials": {
"username": "test_user@flowtest.com",
"password": "test_password_123"
},
"auth_endpoints": {
"login": "/post",
"user_profile": "/anything"
},
"auth_flows_test.jwt_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.mock_payload",
"auth_flows_test.oauth2_access_token": "oauth2_access_token_xyz",
"auth_flows_test.user_permissions": [
"read",
"write"
],
"auth_flows_test.auth_flow_results": {
"jwt_authentication": {
"status": "{{jwt_login_success && jwt_valid && jwt_refresh_success ? 'success' : 'partial'}}",
"tokens_issued": 2,
"profile_access": "{{js: Boolean(variables.profile_fetch_success)}}"
},
"oauth2_authentication": {
"status": "{{oauth2_token_exchange_success && oauth2_resource_access ? 'success' : 'partial'}}",
"authorization_code_flow": "{{js: Boolean(variables.oauth2_auth_started)}}",
"token_management": "{{js: Boolean(variables.oauth2_token_revoked)}}"
},
"security_validation": {
"expired_tokens": "{{js: Boolean(variables.jwt_expired_handled)}}",
"revoked_tokens": "{{js: Boolean(variables.revoked_token_rejected)}}",
"permissions": "{{js: Boolean(variables.admin_permission_granted || variables.admin_permission_denied)}}"
},
"session_management": {
"logout_success": "{{js: Boolean(variables.complete_logout)}}",
"cleanup_complete": "{{js: Boolean(variables.all_tokens_revoked)}}"
}
},
"complex-workflows-test.workflow_results": {
"api_contract_validations": {
"order_service": null,
"payment_service": null,
"user_service": null
},
"business_outcomes": {
"customer_id": "{{customer_id}}",
"items_purchased": 3,
"order_id": null,
"total_revenue": 594.96,
"transaction_id": null,
"workflow_completion": null
},
"ecommerce_workflow_results": {
"cart_management": "success",
"catalog_browsing": null,
"customer_registration": null,
"fulfillment_initiated": null,
"order_created": null,
"payment_processed": null,
"product_details": null,
"promotions_applied": null,
"shipping_calculated": null
},
"end_to_end_success": true,
"microservices_communication": {
"inventory_service": null,
"notification_service": null
},
"test_summary": "complex_workflows_ecommerce_contracts",
"total_complex_workflow_tests": 13,
"workflow_patterns_tested": [
"customer_lifecycle_management",
"product_catalog_interaction",
"cart_and_checkout_process",
"payment_transaction_flow",
"order_fulfillment_pipeline",
"api_contract_validation",
"microservices_integration",
"end_to_end_business_process",
"workflow_analytics_tracking"
],
"workflow_test_id": "workflow-ce7a02af-3257-4a3b-b77e-2dad7569115e"
},
"complex-workflows-test.ecommerce_data": {
"cart_management": "success",
"catalog_browsing": null,
"customer_registration": null,
"fulfillment_initiated": null,
"order_created": null,
"payment_processed": null,
"product_details": null,
"promotions_applied": null,
"shipping_calculated": null
},
"complex-workflows-test.contract_validation_results": {
"order_service": null,
"payment_service": null,
"user_service": null
}
} ✅
Buscar perfil do usuário
Step #2
2ms
cURL Command
curl -X GET -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.KMUFsIDTnFmyG3nMiGM6H9FNFUROf3wh7SmqJp-QV30' "http://httpbin/anything?username=test_user@flowtest.com&admin=true&name=John Doe"📤 Request
Method: GET
URL:
http://httpbin/anything?username=test_user@flowtest.com&admin=true&name=John Doe Base URL:
http://httpbin Request Headers
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.KMUFsIDTnFmyG3nMiGM6H9FNFUROf3wh7SmqJp-QV30📥 Response
Status Code: 200
Duration: 2ms
Size: 624 bytes
Response Headers
server: gunicorn/19.9.0
date: Sun, 19 Oct 2025 10:28:37 GMT
connection: keep-alive
content-type: application/json
content-length: 737
access-control-allow-origin: *
access-control-allow-credentials: trueResponse Body
{
"args": {
"admin": "true",
"name": "John Doe",
"username": "test_user@flowtest.com"
},
"data": "",
"files": {},
"form": {},
"headers": {
"Accept": "application/json, text/plain, */*",
"Accept-Encoding": "gzip, compress, deflate, br",
"Authorization": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.KMUFsIDTnFmyG3nMiGM6H9FNFUROf3wh7SmqJp-QV30",
"Connection": "keep-alive",
"Host": "httpbin",
"User-Agent": "axios/1.12.1"
},
"json": null,
"method": "GET",
"origin": "172.18.0.3",
"url": "http://httpbin/anything?username=test_user%40flowtest.com&admin=true&name=John Doe"
} 📊
Total
12
assertions
✅
Passed
12
assertions
📈
Success Rate
100%
success
✓
status_code
PASSED
✓ Match
Condição
status_code equals 200
Assertion passou conforme esperado
Valor recebido: 200
✓
body.args.admin.equals
PASSED
Condição
body.args.admin.equals equals true
Comparação de Valores
Esperado expected
true
Recebido actual
true
✓
body.args.name.equals
PASSED
✓ Match
Condição
body.args.name.equals equals John Doe
Assertion passou conforme esperado
Valor recebido: John Doe
✓
body.args.name.type
PASSED
✓ Match
Condição
body.args.name.type equals string
Assertion passou conforme esperado
Valor recebido: string
✓
body.args.name.minLength
PASSED
Condição
body.args.name.minLength equals >= 1
Comparação de Valores
Esperado expected
>= 1
Recebido actual
8
✓
custom.admin_privileges_check
PASSED
✓ Match
Condição
custom.admin_privileges_check equals true
Assertion passou conforme esperado
Valor recebido: true
✓
custom.name_not_empty
PASSED
✓ Match
Condição
custom.name_not_empty equals true
Assertion passou conforme esperado
Valor recebido: true
✓
custom.name_format_valid
PASSED
✓ Match
Condição
custom.name_format_valid equals true
Assertion passou conforme esperado
Valor recebido: true
✓
custom.username_in_query
PASSED
✓ Match
Condição
custom.username_in_query equals true
Assertion passou conforme esperado
Valor recebido: true
✓
custom.authorization_header_present
PASSED
✓ Match
Condição
custom.authorization_header_present equals true
Assertion passou conforme esperado
Valor recebido: true
✓
custom.response_contains_expected_data
PASSED
✓ Match
Condição
custom.response_contains_expected_data equals true
Assertion passou conforme esperado
Valor recebido: true
✓
custom.token_in_authorization
PASSED
✓ Match
Condição
custom.token_in_authorization equals true
Assertion passou conforme esperado
Valor recebido: true
Captured Variables
{
"user_name": "John Doe",
"is_admin": "true"
}Available Variables
{
"api_base_url": "http://localhost:8080",
"test_credentials": {
"username": "test_user@flowtest.com",
"password": "test_password_123"
},
"auth_endpoints": {
"login": "/post",
"user_profile": "/anything"
},
"auth_flows_test.jwt_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.mock_payload",
"auth_flows_test.oauth2_access_token": "oauth2_access_token_xyz",
"auth_flows_test.user_permissions": [
"read",
"write"
],
"auth_flows_test.auth_flow_results": {
"jwt_authentication": {
"status": "{{jwt_login_success && jwt_valid && jwt_refresh_success ? 'success' : 'partial'}}",
"tokens_issued": 2,
"profile_access": "{{js: Boolean(variables.profile_fetch_success)}}"
},
"oauth2_authentication": {
"status": "{{oauth2_token_exchange_success && oauth2_resource_access ? 'success' : 'partial'}}",
"authorization_code_flow": "{{js: Boolean(variables.oauth2_auth_started)}}",
"token_management": "{{js: Boolean(variables.oauth2_token_revoked)}}"
},
"security_validation": {
"expired_tokens": "{{js: Boolean(variables.jwt_expired_handled)}}",
"revoked_tokens": "{{js: Boolean(variables.revoked_token_rejected)}}",
"permissions": "{{js: Boolean(variables.admin_permission_granted || variables.admin_permission_denied)}}"
},
"session_management": {
"logout_success": "{{js: Boolean(variables.complete_logout)}}",
"cleanup_complete": "{{js: Boolean(variables.all_tokens_revoked)}}"
}
},
"complex-workflows-test.workflow_results": {
"api_contract_validations": {
"order_service": null,
"payment_service": null,
"user_service": null
},
"business_outcomes": {
"customer_id": "{{customer_id}}",
"items_purchased": 3,
"order_id": null,
"total_revenue": 594.96,
"transaction_id": null,
"workflow_completion": null
},
"ecommerce_workflow_results": {
"cart_management": "success",
"catalog_browsing": null,
"customer_registration": null,
"fulfillment_initiated": null,
"order_created": null,
"payment_processed": null,
"product_details": null,
"promotions_applied": null,
"shipping_calculated": null
},
"end_to_end_success": true,
"microservices_communication": {
"inventory_service": null,
"notification_service": null
},
"test_summary": "complex_workflows_ecommerce_contracts",
"total_complex_workflow_tests": 13,
"workflow_patterns_tested": [
"customer_lifecycle_management",
"product_catalog_interaction",
"cart_and_checkout_process",
"payment_transaction_flow",
"order_fulfillment_pipeline",
"api_contract_validation",
"microservices_integration",
"end_to_end_business_process",
"workflow_analytics_tracking"
],
"workflow_test_id": "workflow-ce7a02af-3257-4a3b-b77e-2dad7569115e"
},
"complex-workflows-test.ecommerce_data": {
"cart_management": "success",
"catalog_browsing": null,
"customer_registration": null,
"fulfillment_initiated": null,
"order_created": null,
"payment_processed": null,
"product_details": null,
"promotions_applied": null,
"shipping_calculated": null
},
"complex-workflows-test.contract_validation_results": {
"order_service": null,
"payment_service": null,
"user_service": null
}
}📄 Raw Suite Data
Complete Suite Data
{
"node_id": "auth",
"suite_name": "Teste de Login API",
"file_path": "/app/tests/meu-primeiro-test.yaml",
"priority": "high",
"start_time": "2025-10-19T10:28:37.597Z",
"end_time": "2025-10-19T10:28:37.602Z",
"duration_ms": 5,
"status": "success",
"steps_executed": 2,
"steps_successful": 2,
"steps_failed": 0,
"success_rate": 100,
"steps_results": [
{
"step_id": "step-1-fazer-login",
"qualified_step_id": "auth::step-1-fazer-login",
"step_name": "Fazer login",
"status": "success",
"duration_ms": 3,
"request_details": {
"method": "POST",
"url": "/post",
"headers": {
"Content-Type": "application/json",
"X-Auth-Token": "{{auth_token}}"
},
"body": {
"username": "test_user@flowtest.com",
"password": "test_password_123",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.KMUFsIDTnFmyG3nMiGM6H9FNFUROf3wh7SmqJp-QV30"
},
"base_url": "http://httpbin",
"full_url": "http://httpbin/post",
"curl_command": "curl -X POST -H 'Content-Type: application/json' -H 'X-Auth-Token: {{auth_token}}' -d '{\"username\":\"test_user@flowtest.com\",\"password\":\"test_password_123\",\"token\":\"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.KMUFsIDTnFmyG3nMiGM6H9FNFUROf3wh7SmqJp-QV30\"}' \"http://httpbin/post\"",
"raw_request": "POST /post HTTP/1.1\r\nHost: httpbin\r\nContent-Type: application/json\r\nX-Auth-Token: {{auth_token}}\r\nContent-Length: 251\r\n\r\n{\"username\":\"test_user@flowtest.com\",\"password\":\"test_password_123\",\"token\":\"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.KMUFsIDTnFmyG3nMiGM6H9FNFUROf3wh7SmqJp-QV30\"}",
"raw_url": "{{base_url}}/{{auth_endpoints.login}}"
},
"response_details": {
"status_code": 200,
"headers": {
"server": "gunicorn/19.9.0",
"date": "Sun, 19 Oct 2025 10:28:37 GMT",
"connection": "keep-alive",
"content-type": "application/json",
"content-length": "1001",
"access-control-allow-origin": "*",
"access-control-allow-credentials": "true"
},
"body": {
"args": {},
"data": "{\"username\":\"test_user@flowtest.com\",\"password\":\"test_password_123\",\"token\":\"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.KMUFsIDTnFmyG3nMiGM6H9FNFUROf3wh7SmqJp-QV30\"}",
"files": {},
"form": {},
"headers": {
"Accept": "application/json, text/plain, */*",
"Accept-Encoding": "gzip, compress, deflate, br",
"Connection": "keep-alive",
"Content-Length": "251",
"Content-Type": "application/json",
"Host": "httpbin",
"User-Agent": "axios/1.12.1",
"X-Auth-Token": "{{auth_token}}"
},
"json": {
"password": "test_password_123",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.KMUFsIDTnFmyG3nMiGM6H9FNFUROf3wh7SmqJp-QV30",
"username": "test_user@flowtest.com"
},
"origin": "172.18.0.3",
"url": "http://httpbin/post"
},
"size_bytes": 879,
"raw_response": "HTTP/1.1 200 OK\r\nserver: gunicorn/19.9.0\r\ndate: Sun, 19 Oct 2025 10:28:37 GMT\r\nconnection: keep-alive\r\ncontent-type: application/json\r\ncontent-length: 1001\r\naccess-control-allow-origin: *\r\naccess-control-allow-credentials: true\r\n\r\n{\n \"args\": {},\n \"data\": \"{\\\"username\\\":\\\"test_user@flowtest.com\\\",\\\"password\\\":\\\"test_password_123\\\",\\\"token\\\":\\\"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.KMUFsIDTnFmyG3nMiGM6H9FNFUROf3wh7SmqJp-QV30\\\"}\",\n \"files\": {},\n \"form\": {},\n \"headers\": {\n \"Accept\": \"application/json, text/plain, */*\",\n \"Accept-Encoding\": \"gzip, compress, deflate, br\",\n \"Connection\": \"keep-alive\",\n \"Content-Length\": \"251\",\n \"Content-Type\": \"application/json\",\n \"Host\": \"httpbin\",\n \"User-Agent\": \"axios/1.12.1\",\n \"X-Auth-Token\": \"{{auth_token}}\"\n },\n \"json\": {\n \"password\": \"test_password_123\",\n \"token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.KMUFsIDTnFmyG3nMiGM6H9FNFUROf3wh7SmqJp-QV30\",\n \"username\": \"test_user@flowtest.com\"\n },\n \"origin\": \"172.18.0.3\",\n \"url\": \"http://httpbin/post\"\n}"
},
"assertions_results": [
{
"field": "status_code",
"expected": 200,
"actual": 200,
"passed": true,
"message": "OK"
},
{
"field": "body.json.token.type",
"expected": "string",
"actual": "string",
"passed": true,
"message": "OK"
},
{
"field": "body.json.token.pattern",
"expected": "^[A-Za-z0-9-_.]+$",
"actual": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.KMUFsIDTnFmyG3nMiGM6H9FNFUROf3wh7SmqJp-QV30",
"passed": true,
"message": "OK"
},
{
"field": "body.json.token.minLength",
"expected": ">= 10",
"actual": 172,
"passed": true,
"message": "OK"
},
{
"field": "body.json.token.notEmpty",
"expected": true,
"actual": true,
"passed": true,
"message": "OK"
},
{
"field": "custom.jwt_token_format",
"expected": true,
"actual": true,
"passed": true,
"message": "Token JWT deve ter 3 partes separadas por ponto"
},
{
"field": "custom.token_not_empty",
"expected": true,
"actual": true,
"passed": true,
"message": "Token não pode ser vazio ou apenas espaços"
},
{
"field": "custom.token_length_valid",
"expected": true,
"actual": true,
"passed": true,
"message": "Token deve ter comprimento adequado para JWT"
},
{
"field": "custom.response_time_reasonable",
"expected": true,
"actual": true,
"passed": true,
"message": "Tempo de resposta deve ser menor que 5 segundos"
}
],
"captured_variables": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.KMUFsIDTnFmyG3nMiGM6H9FNFUROf3wh7SmqJp-QV30"
},
"available_variables": {
"api_base_url": "http://localhost:8080",
"test_credentials": {
"username": "test_user@flowtest.com",
"password": "test_password_123"
},
"auth_endpoints": {
"login": "/post",
"user_profile": "/anything"
},
"auth_flows_test.jwt_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.mock_payload",
"auth_flows_test.oauth2_access_token": "oauth2_access_token_xyz",
"auth_flows_test.user_permissions": [
"read",
"write"
],
"auth_flows_test.auth_flow_results": {
"jwt_authentication": {
"status": "{{jwt_login_success && jwt_valid && jwt_refresh_success ? 'success' : 'partial'}}",
"tokens_issued": 2,
"profile_access": "{{js: Boolean(variables.profile_fetch_success)}}"
},
"oauth2_authentication": {
"status": "{{oauth2_token_exchange_success && oauth2_resource_access ? 'success' : 'partial'}}",
"authorization_code_flow": "{{js: Boolean(variables.oauth2_auth_started)}}",
"token_management": "{{js: Boolean(variables.oauth2_token_revoked)}}"
},
"security_validation": {
"expired_tokens": "{{js: Boolean(variables.jwt_expired_handled)}}",
"revoked_tokens": "{{js: Boolean(variables.revoked_token_rejected)}}",
"permissions": "{{js: Boolean(variables.admin_permission_granted || variables.admin_permission_denied)}}"
},
"session_management": {
"logout_success": "{{js: Boolean(variables.complete_logout)}}",
"cleanup_complete": "{{js: Boolean(variables.all_tokens_revoked)}}"
}
},
"complex-workflows-test.workflow_results": {
"api_contract_validations": {
"order_service": null,
"payment_service": null,
"user_service": null
},
"business_outcomes": {
"customer_id": "{{customer_id}}",
"items_purchased": 3,
"order_id": null,
"total_revenue": 594.96,
"transaction_id": null,
"workflow_completion": null
},
"ecommerce_workflow_results": {
"cart_management": "success",
"catalog_browsing": null,
"customer_registration": null,
"fulfillment_initiated": null,
"order_created": null,
"payment_processed": null,
"product_details": null,
"promotions_applied": null,
"shipping_calculated": null
},
"end_to_end_success": true,
"microservices_communication": {
"inventory_service": null,
"notification_service": null
},
"test_summary": "complex_workflows_ecommerce_contracts",
"total_complex_workflow_tests": 13,
"workflow_patterns_tested": [
"customer_lifecycle_management",
"product_catalog_interaction",
"cart_and_checkout_process",
"payment_transaction_flow",
"order_fulfillment_pipeline",
"api_contract_validation",
"microservices_integration",
"end_to_end_business_process",
"workflow_analytics_tracking"
],
"workflow_test_id": "workflow-ce7a02af-3257-4a3b-b77e-2dad7569115e"
},
"complex-workflows-test.ecommerce_data": {
"cart_management": "success",
"catalog_browsing": null,
"customer_registration": null,
"fulfillment_initiated": null,
"order_created": null,
"payment_processed": null,
"product_details": null,
"promotions_applied": null,
"shipping_calculated": null
},
"complex-workflows-test.contract_validation_results": {
"order_service": null,
"payment_service": null,
"user_service": null
}
}
},
{
"step_id": "step-2-buscar-perfil-do-usu-rio",
"qualified_step_id": "auth::step-2-buscar-perfil-do-usu-rio",
"step_name": "Buscar perfil do usuário",
"status": "success",
"duration_ms": 2,
"request_details": {
"method": "GET",
"url": "/anything?username=test_user@flowtest.com&admin=true&name=John Doe",
"headers": {
"Authorization": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.KMUFsIDTnFmyG3nMiGM6H9FNFUROf3wh7SmqJp-QV30"
},
"base_url": "http://httpbin",
"full_url": "http://httpbin/anything?username=test_user@flowtest.com&admin=true&name=John Doe",
"curl_command": "curl -X GET -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.KMUFsIDTnFmyG3nMiGM6H9FNFUROf3wh7SmqJp-QV30' \"http://httpbin/anything?username=test_user@flowtest.com&admin=true&name=John Doe\"",
"raw_request": "GET /anything?username=test_user@flowtest.com&admin=true&name=John%20Doe HTTP/1.1\r\nHost: httpbin\r\nAuthorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.KMUFsIDTnFmyG3nMiGM6H9FNFUROf3wh7SmqJp-QV30\r\n\r\n",
"raw_url": "{{base_url}}/{{auth_endpoints.user_profile}}?username={{test_credentials.username}}&admin=true&name={{mock_responses.user_profile.name}}"
},
"response_details": {
"status_code": 200,
"headers": {
"server": "gunicorn/19.9.0",
"date": "Sun, 19 Oct 2025 10:28:37 GMT",
"connection": "keep-alive",
"content-type": "application/json",
"content-length": "737",
"access-control-allow-origin": "*",
"access-control-allow-credentials": "true"
},
"body": {
"args": {
"admin": "true",
"name": "John Doe",
"username": "test_user@flowtest.com"
},
"data": "",
"files": {},
"form": {},
"headers": {
"Accept": "application/json, text/plain, */*",
"Accept-Encoding": "gzip, compress, deflate, br",
"Authorization": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.KMUFsIDTnFmyG3nMiGM6H9FNFUROf3wh7SmqJp-QV30",
"Connection": "keep-alive",
"Host": "httpbin",
"User-Agent": "axios/1.12.1"
},
"json": null,
"method": "GET",
"origin": "172.18.0.3",
"url": "http://httpbin/anything?username=test_user%40flowtest.com&admin=true&name=John Doe"
},
"size_bytes": 624,
"raw_response": "HTTP/1.1 200 OK\r\nserver: gunicorn/19.9.0\r\ndate: Sun, 19 Oct 2025 10:28:37 GMT\r\nconnection: keep-alive\r\ncontent-type: application/json\r\ncontent-length: 737\r\naccess-control-allow-origin: *\r\naccess-control-allow-credentials: true\r\n\r\n{\n \"args\": {\n \"admin\": \"true\",\n \"name\": \"John Doe\",\n \"username\": \"test_user@flowtest.com\"\n },\n \"data\": \"\",\n \"files\": {},\n \"form\": {},\n \"headers\": {\n \"Accept\": \"application/json, text/plain, */*\",\n \"Accept-Encoding\": \"gzip, compress, deflate, br\",\n \"Authorization\": \"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.KMUFsIDTnFmyG3nMiGM6H9FNFUROf3wh7SmqJp-QV30\",\n \"Connection\": \"keep-alive\",\n \"Host\": \"httpbin\",\n \"User-Agent\": \"axios/1.12.1\"\n },\n \"json\": null,\n \"method\": \"GET\",\n \"origin\": \"172.18.0.3\",\n \"url\": \"http://httpbin/anything?username=test_user%40flowtest.com&admin=true&name=John Doe\"\n}"
},
"assertions_results": [
{
"field": "status_code",
"expected": 200,
"actual": 200,
"passed": true,
"message": "OK"
},
{
"field": "body.args.admin.equals",
"expected": true,
"actual": "true",
"passed": true,
"message": "OK"
},
{
"field": "body.args.name.equals",
"expected": "John Doe",
"actual": "John Doe",
"passed": true,
"message": "OK"
},
{
"field": "body.args.name.type",
"expected": "string",
"actual": "string",
"passed": true,
"message": "OK"
},
{
"field": "body.args.name.minLength",
"expected": ">= 1",
"actual": 8,
"passed": true,
"message": "OK"
},
{
"field": "custom.admin_privileges_check",
"expected": true,
"actual": true,
"passed": true,
"message": "Usuário deve ter privilégios de administrador"
},
{
"field": "custom.name_not_empty",
"expected": true,
"actual": true,
"passed": true,
"message": "Nome do usuário não pode ser vazio"
},
{
"field": "custom.name_format_valid",
"expected": true,
"actual": true,
"passed": true,
"message": "Nome deve ter pelo menos nome e sobrenome"
},
{
"field": "custom.username_in_query",
"expected": true,
"actual": true,
"passed": true,
"message": "Username deve ser um email válido"
},
{
"field": "custom.authorization_header_present",
"expected": true,
"actual": true,
"passed": true,
"message": "Header Authorization deve estar presente e começar com 'Bearer '"
},
{
"field": "custom.response_contains_expected_data",
"expected": true,
"actual": true,
"passed": true,
"message": "Response deve conter pelo menos 3 parâmetros"
},
{
"field": "custom.token_in_authorization",
"expected": true,
"actual": true,
"passed": true,
"message": "Header Authorization deve conter o token JWT"
}
],
"captured_variables": {
"user_name": "John Doe",
"is_admin": "true"
},
"available_variables": {
"api_base_url": "http://localhost:8080",
"test_credentials": {
"username": "test_user@flowtest.com",
"password": "test_password_123"
},
"auth_endpoints": {
"login": "/post",
"user_profile": "/anything"
},
"auth_flows_test.jwt_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.mock_payload",
"auth_flows_test.oauth2_access_token": "oauth2_access_token_xyz",
"auth_flows_test.user_permissions": [
"read",
"write"
],
"auth_flows_test.auth_flow_results": {
"jwt_authentication": {
"status": "{{jwt_login_success && jwt_valid && jwt_refresh_success ? 'success' : 'partial'}}",
"tokens_issued": 2,
"profile_access": "{{js: Boolean(variables.profile_fetch_success)}}"
},
"oauth2_authentication": {
"status": "{{oauth2_token_exchange_success && oauth2_resource_access ? 'success' : 'partial'}}",
"authorization_code_flow": "{{js: Boolean(variables.oauth2_auth_started)}}",
"token_management": "{{js: Boolean(variables.oauth2_token_revoked)}}"
},
"security_validation": {
"expired_tokens": "{{js: Boolean(variables.jwt_expired_handled)}}",
"revoked_tokens": "{{js: Boolean(variables.revoked_token_rejected)}}",
"permissions": "{{js: Boolean(variables.admin_permission_granted || variables.admin_permission_denied)}}"
},
"session_management": {
"logout_success": "{{js: Boolean(variables.complete_logout)}}",
"cleanup_complete": "{{js: Boolean(variables.all_tokens_revoked)}}"
}
},
"complex-workflows-test.workflow_results": {
"api_contract_validations": {
"order_service": null,
"payment_service": null,
"user_service": null
},
"business_outcomes": {
"customer_id": "{{customer_id}}",
"items_purchased": 3,
"order_id": null,
"total_revenue": 594.96,
"transaction_id": null,
"workflow_completion": null
},
"ecommerce_workflow_results": {
"cart_management": "success",
"catalog_browsing": null,
"customer_registration": null,
"fulfillment_initiated": null,
"order_created": null,
"payment_processed": null,
"product_details": null,
"promotions_applied": null,
"shipping_calculated": null
},
"end_to_end_success": true,
"microservices_communication": {
"inventory_service": null,
"notification_service": null
},
"test_summary": "complex_workflows_ecommerce_contracts",
"total_complex_workflow_tests": 13,
"workflow_patterns_tested": [
"customer_lifecycle_management",
"product_catalog_interaction",
"cart_and_checkout_process",
"payment_transaction_flow",
"order_fulfillment_pipeline",
"api_contract_validation",
"microservices_integration",
"end_to_end_business_process",
"workflow_analytics_tracking"
],
"workflow_test_id": "workflow-ce7a02af-3257-4a3b-b77e-2dad7569115e"
},
"complex-workflows-test.ecommerce_data": {
"cart_management": "success",
"catalog_browsing": null,
"customer_registration": null,
"fulfillment_initiated": null,
"order_created": null,
"payment_processed": null,
"product_details": null,
"promotions_applied": null,
"shipping_calculated": null
},
"complex-workflows-test.contract_validation_results": {
"order_service": null,
"payment_service": null,
"user_service": null
}
}
}
],
"variables_captured": {},
"available_variables": {
"api_base_url": "http://localhost:8080",
"test_credentials": {
"username": "test_user@flowtest.com",
"password": "test_password_123"
},
"auth_endpoints": {
"login": "/post",
"user_profile": "/anything"
},
"auth_flows_test.jwt_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.mock_payload",
"auth_flows_test.oauth2_access_token": "oauth2_access_token_xyz",
"auth_flows_test.user_permissions": [
"read",
"write"
],
"auth_flows_test.auth_flow_results": {
"jwt_authentication": {
"status": "{{jwt_login_success && jwt_valid && jwt_refresh_success ? 'success' : 'partial'}}",
"tokens_issued": 2,
"profile_access": "{{js: Boolean(variables.profile_fetch_success)}}"
},
"oauth2_authentication": {
"status": "{{oauth2_token_exchange_success && oauth2_resource_access ? 'success' : 'partial'}}",
"authorization_code_flow": "{{js: Boolean(variables.oauth2_auth_started)}}",
"token_management": "{{js: Boolean(variables.oauth2_token_revoked)}}"
},
"security_validation": {
"expired_tokens": "{{js: Boolean(variables.jwt_expired_handled)}}",
"revoked_tokens": "{{js: Boolean(variables.revoked_token_rejected)}}",
"permissions": "{{js: Boolean(variables.admin_permission_granted || variables.admin_permission_denied)}}"
},
"session_management": {
"logout_success": "{{js: Boolean(variables.complete_logout)}}",
"cleanup_complete": "{{js: Boolean(variables.all_tokens_revoked)}}"
}
},
"complex-workflows-test.workflow_results": {
"api_contract_validations": {
"order_service": null,
"payment_service": null,
"user_service": null
},
"business_outcomes": {
"customer_id": "{{customer_id}}",
"items_purchased": 3,
"order_id": null,
"total_revenue": 594.96,
"transaction_id": null,
"workflow_completion": null
},
"ecommerce_workflow_results": {
"cart_management": "success",
"catalog_browsing": null,
"customer_registration": null,
"fulfillment_initiated": null,
"order_created": null,
"payment_processed": null,
"product_details": null,
"promotions_applied": null,
"shipping_calculated": null
},
"end_to_end_success": true,
"microservices_communication": {
"inventory_service": null,
"notification_service": null
},
"test_summary": "complex_workflows_ecommerce_contracts",
"total_complex_workflow_tests": 13,
"workflow_patterns_tested": [
"customer_lifecycle_management",
"product_catalog_interaction",
"cart_and_checkout_process",
"payment_transaction_flow",
"order_fulfillment_pipeline",
"api_contract_validation",
"microservices_integration",
"end_to_end_business_process",
"workflow_analytics_tracking"
],
"workflow_test_id": "workflow-ce7a02af-3257-4a3b-b77e-2dad7569115e"
},
"complex-workflows-test.ecommerce_data": {
"cart_management": "success",
"catalog_browsing": null,
"customer_registration": null,
"fulfillment_initiated": null,
"order_created": null,
"payment_processed": null,
"product_details": null,
"promotions_applied": null,
"shipping_calculated": null
},
"complex-workflows-test.contract_validation_results": {
"order_service": null,
"payment_service": null,
"user_service": null
}
},
"suite_yaml_content": "# tests/meu-primeiro-teste.yaml\nsuite_name: \"Teste de Login API\"\nnode_id: \"auth\"\nbase_url: \"{{httpbin_url}}\"\n\nvariables:\n secure_signing_key: \"NTNv7j0TuYARvmNMmWXo6fKvM4o6nv/aUi9ryX38ZH+L1bkrnD1ObOQ8JAUmHCBq7Iy7otZcyAagBLHVKvvYaIpmMuxmARQ97jUVG16Jkpkp1wXOPsrF9zwew6TpczyHkHgX5EuLg2MeBuiT/qJACs1J0apruOOJCg/gOtkjB4c=\"\n # Credenciais de teste\n test_credentials:\n username: \"test_user@flowtest.com\"\n password: \"test_password_123\"\n\n # URLs simuladas de autenticação\n auth_endpoints:\n login: \"/post\"\n user_profile: \"/anything\"\n\n # Tokens simulados para testes\n mock_responses:\n jwt_login_success:\n # Acess Token valido (exemplo fictício) jwt.io\n access_token: \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.KMUFsIDTnFmyG3nMiGM6H9FNFUROf3wh7SmqJp-QV30\"\n\n user_profile:\n name: \"John Doe\"\n admin: true\n username: \"test_user@flowtest.com\"\n\n# Exports para que possa utilizar em outras suits\n# Será exportada como {{auth.token}} \"node_id.variavelName\"\nexports:\n - token\n\nsteps:\n # Step 1\n - name: \"Fazer login\"\n request:\n method: POST\n url: \"{{auth_endpoints.login}}\"\n headers:\n Content-Type: \"application/json\"\n X-Auth-Token: \"{{auth_token}}\"\n body:\n username: \"{{test_credentials.username}}\"\n password: \"{{test_credentials.password}}\"\n # Simula para o httpbin.org/post retorne o token no response\n token: \"{{mock_responses.jwt_login_success.access_token}}\"\n assert:\n status_code: 200\n body:\n json:\n token:\n type: \"string\"\n pattern: \"^[A-Za-z0-9-_.]+$\"\n minLength: 10\n notEmpty: true\n # Custom assertions com JavaScript\n custom:\n - name: \"jwt_token_format\"\n condition: \"body.json.token.split('.').length === 3\"\n message: \"Token JWT deve ter 3 partes separadas por ponto\"\n\n - name: \"token_not_empty\"\n condition: \"body.json.token && body.json.token.trim().length > 0\"\n message: \"Token não pode ser vazio ou apenas espaços\"\n\n - name: \"token_length_valid\"\n condition: \"body.json.token.length > 50\"\n message: \"Token deve ter comprimento adequado para JWT\"\n\n - name: \"response_time_reasonable\"\n condition: \"response_time < 5000\"\n message: \"Tempo de resposta deve ser menor que 5 segundos\"\n capture:\n token: \"body.json.token\"\n\n # Step 2\n - name: \"Buscar perfil do usuário\"\n request:\n method: GET\n url: \"{{auth_endpoints.user_profile}}?username={{test_credentials.username}}&admin=true&name={{mock_responses.user_profile.name}}\"\n headers:\n # Variaveis de mesma suite não precisa de prefixo.\n Authorization: \"Bearer {{token}}\"\n assert:\n status_code: 200\n body:\n args:\n admin:\n equals: true\n name:\n type: \"string\"\n equals: \"{{mock_responses.user_profile.name}}\"\n minLength: 1\n # Custom assertions para validação avançada\n custom:\n - name: \"admin_privileges_check\"\n condition: \"body.args.admin === 'true' || body.args.admin === true\"\n message: \"Usuário deve ter privilégios de administrador\"\n\n - name: \"name_not_empty\"\n condition: \"body.args.name && body.args.name.trim().length > 0\"\n message: \"Nome do usuário não pode ser vazio\"\n\n - name: \"name_format_valid\"\n condition: \"body.args.name.split(' ').length >= 2\"\n message: \"Nome deve ter pelo menos nome e sobrenome\"\n\n - name: \"username_in_query\"\n condition: \"body.args.username && body.args.username.includes('@')\"\n message: \"Username deve ser um email válido\"\n\n - name: \"authorization_header_present\"\n condition: \"body.headers.Authorization && body.headers.Authorization.startsWith('Bearer ')\"\n message: \"Header Authorization deve estar presente e começar com 'Bearer '\"\n\n - name: \"response_contains_expected_data\"\n condition: \"Object.keys(body.args).length >= 3\"\n message: \"Response deve conter pelo menos 3 parâmetros\"\n\n - name: \"token_in_authorization\"\n condition: \"body.headers.Authorization && body.headers.Authorization.includes('eyJ')\"\n message: \"Header Authorization deve conter o token JWT\"\n\n capture:\n user_name: \"body.args.name\"\n is_admin: \"body.args.admin\""
}