You can write tests for your endpoints in a simple YAML based DSL. These tests
can be run using either the CLI or inside Metlo’s UI.
Creating a New Test
To create a new test make a new yaml file (i.e. user_endpoint_test.yaml
).
The first step is to define some metadata for your test:
id: www-example-com-user-test
meta:
name: www.example.com/user Test Auth
severity: LOW
tags:
- BROKEN_AUTHENTICATION
- id - A unique id for your test. This can be any string that matches the
pattern
[A-Za-z0-9-_]+
- meta.name [optional] - A name for your test
- meta.severity [optional] -
LOW | MEDIUM | HIGH | CRITICAL
- meta.tags [optional] - A list of tags for your test
2. Add your Test
A test is a set of steps, where each step has an HTTP request and a set of
assertions. Heres an example of a test that sends a GET
request to
https://example.com and verifies that the response status
is 200
and the content length header is "648"
.
All the fields in the resp
object are documented
here
test:
- request:
method: GET
url: https://example.com
assert:
- key: resp.status
value: 200
- key: resp.headers['content-length']
value: "648"
You can also specify query params, headers and data for a request.
test:
- request:
method: POST
url: https://test-payment-processor.metlo.com/user/billing
headers:
- name: Content-Type
value: application/json
- name: Authorization
value: ...
data: |-
{
"ccn": "...",
"cc_exp": "...",
"cc_code": "..."
}
assert:
- key: resp.status
value: 200
A complete test might look something like this:
id: test-payment-processor-metlo.com-user-billing
meta:
name: test-payment-processor.metlo.com/user/billing Test Auth
severity: CRITICAL
tags:
- BROKEN_AUTHENTICATION
test:
- request:
method: POST
url: https://test-payment-processor.metlo.com/user/billing
headers:
- name: Content-Type
value: application/json
- name: Authorization
value: ...
data: |-
{ "ccn": "...", "cc_exp": "...", "cc_code": "..." }
assert:
- key: resp.status
value: 200
- request:
method: POST
url: https://test-payment-processor.metlo.com/user/billing
headers:
- name: Content-Type
value: application/json
data: |-
{ "ccn": "...", "cc_exp": "...", "cc_code": "..." }
assert:
- key: resp.status
value:
- 401
- 403
Run a Test
You can run your test with the Metlo CLI:
$ metlo test run user_endpoint_test.yaml
Running test at path "user_endpoint_test.yaml":
✔ Done loading test...
✔ Done running test...
All Tests Succeeded!
Making a Test in Metlo’s UI
You can make a test in Metlo’s UI on the tests tab on the endpoint page.