-
-
Notifications
You must be signed in to change notification settings - Fork 397
YAML DSL For Test Scenarios
- Introduction
- A Test Scenario in YAML DSL format
- Using JayWay JSON Path in The YAML Steps
- Using Array in YAML
- Conclusion
- JSON to YAML and YAML to JSON Conversion
YAML is a human-readable format to configure/declare the outcome of a system. Many projects orchestrate their automation scenarios using YAML due to its easy readable/manageable format(e.g. Kubernetes/Docker provides declarative/configurable .yml
files to manage the containers). Zerocode provides the super-easy way to achieve this using YAML.
For example, if we have an GET
API /api/v1/search/persons
which returns the Http status as 200
and the below response payload,
{
"exactMatches": true,
"name": "Mr Bean",
"city": "Lon"
}
then we can write the automation Test-case as below.
---
scenarioName: Validate a GET API
steps:
- name: find_match
url: "/api/v1/search/persons"
method: GET
request:
queryParams:
city: Lon
char: Funny
verify:
status: 200
body:
exactMatches: true
name: Mr Bean
Where
-
scenarioName
: Unique Free text string describing precisely what is being tested -
name
: Unique name of this step wrt this scenario -
url
: Relative URL path or FQDN of the API end points -
method
: An http method e.g. GET, POST, PUT, DELETE, HEAD etc -
request
: The requestpayload
with httpheaders
and/orquery parameters
-
queryParams
: Http query-parameters to pass and filter the result -
verify
: The expected http status and response payload -
status
: An http status code e.g. 200 is OK, 201 is CREATED etc.
The JSON Path can be used to pick an element/field and reuse it in subsequent steps.
In the below test scenario, please have a look at the 2nd step's verifications
block where various JSON Paths are used to pick/reuse the desired fields rather than hard-coded values.
---
scenarioName: As simple GET request response Multi STep
steps:
- name: find_match
url: "/api/v1/search/persons"
method: GET
request:
queryParams:
char: Funny
city: Lon
verify:
status: 200
body:
exactMatches: true
name: Mr Bean
- name: find_match2
url: "/api/v1/search/persons"
method: GET
request:
queryParams:
char: Kids
city: Lon
verify:
status: "$EQ.${$.find_match.response.status}"
body:
exactMatches: true
name: "$CONTAINS.STRING:Bean"
city: "${$.find_match2.request.queryParams.city}"
e.g. the API responds with a person
payload with array of addresses
.
In an YAML file if the line starts with a
-
mark, then the containing element is anarray
.
---
scenarioName: "A simple GET API Scenario" #comments allowed
steps:
- name: "find_match"
url: "/api/v1/persons/p001"
method: "GET"
request:
headers:
x-api-key: "Ama-zing-key"
x-api-secret: "Sec-ret-stuff"
verify:
status: 200 #comment - a http status code as int value
body:
exactMatches: true
name: "Mr Bean"
addresses:
- type: "office"
line1: "10 Random St"
- type: "home"
line1: "300 Random St"
Here addresses
in the response body
is a collection of individual address.
The equivalent JSON looks like below.
{
"addresses": [
{
"type": "office",
"line1": "10 Random St"
},
{
"type": "home",
"line1": "300 Random St"
}
]
}
We can find the examples in the HelloWorld GitHub repo under yaml
folder.
- JSON to YAML : https://www.json2yaml.com/
- YAML to JSON : https://codebeautify.org/yaml-to-json-xml-csv
- JSON to YAML(another) : https://codebeautify.org/json-to-yaml
Visit the Zerocode Documentation Site for all things.
-
User's Guide
-
Matchers
-
Zerocode Value Tokens
-
YAML DSL
-
Http Testing
-
Kafka Testing
- Introduction
- Produce, consume proto message
- Produce raw message
- Consume raw message
- Produce JSON message
- Consume JSON message
- Produce and consume XML message
- Kafka - consume the latest message or n latest messages
- Produce avro message
- Consume avro message
- KSQL in action
- Produce multiple records
- Produce from file
- Produce to a partition
- Produce and consume records with headers
- Produce n assert partition ack
- Comsume and dump to file
- commitSync vs commitAsync
- Overriding config inside a test
- Chosing String or Int or Avro Serializer
- Chosing String or Int or Avro Deserializer
- Attaching timestamp during load
- Default timestamp provided by Kafka
- Consume and assert avro schema metadata
- Error handling - produce via avro schema
- Sorting Kafka records consumed
-
DB Testing
-
Kotlin Testing
-
Performance Testing - Load and Stress
- Performance Testing - via awesome JUnit runners
- Load Vs Stress generation on target application
- Run a single test or a scenario in parallel
- Run multiple test scenarios in parallel - Production load simulation
- Dynamically change the payload for every request
- Analytics - Useful report(s) or statistics
-
Parameterized Testing
-
Docker
-
More+
-
Extensions
-
JUnit5 Jupiter Test
-
Questions And Answers(FAQ)
- What is Zerocode testing?
- SSL http https connections supported?
- How to assert array size Greater-Than Lesser-Than etc?
- How to invoke POST api?
- How to assert custom headers of the response?
- How to pass custom security token into the request header?
- When to use JUnit Suite runner and when Zerocode Package runner?
- How to execute DB SQL and assert?
- How to handle Http response other than utf-8 e.g. utf-16 or utf-32 ?
- Random Number Generator Placeholders Usages and Limits
- Automation tests for Zerocode lib itself
- Picking a leaf value from the array matching JSON Path
- Array assertions made easy, incl. size and element finder
-
Read Our Blogs
- Top 16 Open Source API Testing Tools For REST & SOAP Services - joecolantonio (Lists popular tools - Globally)
- OAuth2 Test Automation - DZone 2min Read
- Zero defect APIs - Build Pipe Line - Medium 10 min Read
- Develop ZeroDefect API's with ZeroCode! - Extreme Portal ( A must read for all developers and test engineers) 10min Read
- Performance testing using JUnit and maven - Codeproject 10 min Read
- REST API or SOAP End Point Testing - Codeproject 10min Read
- DZone- MuleSoft API Testing With Zerocode Test Framework - DZone 5min Read
- Testing need not be harder or slower, it should be easier and faster - DZone 5 min Read
- Kotlin Integration Testing simplified via Zerocode - Extreme portal 10 min Read
- and More...