How to do API testing using Typicode json-server
by ljunggren | June 24, 2020
In this example, we use the great json-server from Typicode to demonstrate the API testing functionality of Boozang.
Installing Typicode json server
Start by setting up an mock API by following the instructions here: https://github.com/typicode/json-server.
In brief, make sure to install NodeJS and use npm to install json-server globally.
npm install -g json-server
Create an empty data file “db.json” containing some JSON data i.e.
{
"posts": [
{ "id": 1, "title": "json-server", "author": "typicode" }
],
"comments": [
{ "id": 1, "body": "some comment", "postId": 1 }
],
"profile": { "name": "typicode" }
}
and start the mock API server locally
json-server --watch db.json
The server will be started on “http://localhost:3000”
Creating the API tests in Boozang
Now, go to “https://ai.boozang.com” (or https://eu.boozang.com” for Europe / Asia) and create a Boozang project called “API example” and add “http://localhost:3000” as application URL.
Now to get started we want to create the module “Posts” and create the following API tests
- Validate blog exists
- Add post
- Validate post
- Delete post
- Validate post doesn’t exist
We will later tie them together using a Cucumber test.
Overview of the API tests
Here is a brief overview of the API tests and things to keep in mind.
Validate blog available
Simple validation that check if blog is up and running
Add post
Adds a post using the REST API. Here we use the parameter
{
"author": "Mats Ljunggren",
"title": "A banana must rest"
}
Note: Remember to send this in the body of the POST request.
Validate post exists
Here we also use the parameter, but in this case we use a GET request to fetch the post and the script section to validate the post content
{
"author": "Mats Ljunggren",
"title": "A banana must rest"
}
Note how we use the parameter in the URL, and also in the validation section
vr = v[0].title=== $parameter.title && v[0].author=== $parameter.author;
We also save the post ID as project-level data
$project.currentId = v[0].id;
Delete post
The delete post simply uses the post id that was saved previously and deletes it using the DELETE operation.
Note: As you can see I add a validation to make sure $project.currentId is set.
Validate post doesn’t exist
A simple validation that the post is no longer there. As you can see from the validation section I make sure a status code 404 are being returned.
let vr = $result.status == 404;
The Cucumber test
Now it’s time to tie it all together using a Cucumber test. By going to the Features tab from the root, I create the following feature “Posts Management”, where I create the following scenario
Scenario Outline: Add and delete
Given I have a blog with posts
When I add a post with <title> and <author>
Then the post with <author> and <title> should exist
When I delete the post with <author> and <title>
Then the post with <author> and <title> should not exist
Examples:
|author|title|
|Mats Ljunggren|Some title|
|Wensheng Li|Some other title|
This looks the following way in Boozang
After linking all the tests appropriately the test map looks as follows:
This was a very brief overview that only scratches the surface of what can be done in Boozang for API testing. For instance, this did not cover the following capabilities:
- Load testing
- Automated generation of API tests from regular tests
- Automated authorization token retrieval
- Auto-mapping of variables
We will try to cover these topics more substantially at some point in the near future. Let us know if you have any comments or suggestions!