Testcase specification reference
- This page should be use as reference for testcase specification files.
- This page is subject to change. It is requested to check this page frequently.
- Currently JSON response is only supported type for assertions.
The Testcase specification format is how anyone express one or more test case(s) for a given Http specification. Following is the full reference to write Testcase specification file.
Testcase specification
Testcase specification document is a versioned document, meaning there MUST be a version: key on the document.
It's also an exposable document meaning you can expose local data using expose: key in the document. More on this in variable spec. reference
Reference as example
There are only 2 things we define in a testcase spec. doc.
- How to make the API request
- What to expect from the response that got returned as API response
There are 2 ways anyone can define how to do an API request.
- with an in-file request
- requestin separate http spec. doc.
In the testcase spec. doc. spec.asserts section defines what to expect from the response that got returned as API response. It is a list of assertions that one can make against response.
1. With in-file request
1st way is to write a request (that defines the http request) and spec (that defines what to assert) in same file. E.g:
---
version: "default:testcase:0.7.2"
variables:
  Name: "Morpheus"
  Job: "leader"
  Server: https://reqres.in/api/v1
request:
  url: "{$Server}/users"
  method: POST
  body[json]: { "name": "{$Name}", "job": "{$Job}" }
spec:
  asserts:
    - { type: AssertEqual, actual: "{$_response.code}", expected: 201 }
    - { type: AssertIsMap, actual: "{$_response.body}" }
expose:
  - "{$_assertion_results}"
  - "{$_response}"
2. request in separate http spec. doc
# file: some-request.chk
---
version: "default:http:0.7.2"
variables:
  Name: "Morpheus"
  Job: "leader"
  Server: https://reqres.in/api/v1
request:
  url: "{$Server}/users"
  method: POST
  body[json]: { "name": "{$Name}", "job": "{$Job}" }
and a separate testcase file referencing the some-request.chk http spec. doc. in spec.execute.file.
# file: some-testcase.chk
---
version: "default:testcase:0.7.2"
spec:
  execute:
    file: some-request.chk
    with:
      Name: "Neo"
      Job: "The chosen one"
  asserts:
    - { type: AssertEqual, actual: "{$_response.code}", expected: 201 }
    - { type: AssertIsMap, actual: "{$_response.body}" }
expose: ~
version (required)
version is a top-level block that defines a document version. How to write a version: block, is already defined here.
request
- requiredif no external http spec. doc to be linked
- must notif- spec.execute.fileif a http specification doc is linked
request is a top-level block that defines a http request. How to write a request: block, is already defined here.
request block, and spec.execute.file MUST NOT stay on same file. System will throw an error on that case.
variables
variables is a top-level block that defines local variables. These variables are file scoped. How to write a variables: block, is already defined here.
spec (required)
spec is a top-level block that defines a testcase specification.
spec: ...
spec.execute (required)
spec.execute is a sub-block that defines a testcase spec's pre-requisite http request execution before making assertion(s). It has following components:
- spec.execute.fileis used to point the file that contains http specification to run before assertion. If unavailable, or set to null, then system executes any- requestblock from current file.
- spec.execute.withis used to pass local scoped variables to external linked file on- spec.execute.filebefore execution happen. Not supported for locally linked- requestblock.
- spec.execute.resultis used to store result(s) of the execution. Here we can put a locally scoped variable to receive data to store after request is done. If a testcase spec. contains an in-file request, then this section is not allowed.
---
variables:
  Response: ~
spec:
  execute:
    file: some-request.chk
    with:
      Name: "Neo"
      Job: "The chosen one"
    result: "{@Response}"
spec.assertions (required)
spec.assertions is a sub-block that defines a testcase spec's post http request execution assertion(s). It supports a list of assertions to be supplied. Each of the list item consists of assertion object. Assertion object have following components:
{ type: AssertEqual, actual: "{$Response.code}", expected: 201 }
- typeof assertion to be executed.
- actualwhat to assert, usually a local variable or one of it's node.
- expectedwhat is expect value
---
spec:
  asserts:
    - { type: AssertEqual, actual: "{$Response.code}", expected: 201 }
    - type: assertIsMap
      actual: "{$Response}"
More about assertions can be found here.
expose
expose is a sub-block, that can be used to expose local variable of this file to outer scope.
For testcase specification document local variable called _assertion_results which holds after assertion output, and _response which holds response after request execute, are available.
See docs on expose node