Using Swagger And Excel Sheets for Validating REST APIs

Written by dheeraj.aggarwal | Published 2020/01/13
Tech Story Tags: swagger | data-driven-testing | openapi | productivity | api-testing | test-automation | testing | programming

TLDR vREST NG (An enterprise ready application for Automated API Testing) combines the power of both to make your API Testing experience more seamless. The approach is also known as Data Driven Testing. The process uses swagger files to generate all of the test logic and sample test data CSV files. The generated CSV files are also linked as shown in the following image. We will look at the following in detail:How you may generate the test cases by using the swagger file. How you may feed the test data to those generated test cases through an excel sheet.via the TL;DR App

Swagger Files (aka OpenAPI Specification) is the most popular way for documenting API specifications and Excel sheet provides an easy and simple way of writing structured data. Anybody can write data in excel sheet irrespective of their programming skills. Introducing vREST NG (An enterprise ready application for Automated API Testing), which combines the power of both to make your API Testing experience more seamless. The approach is also known as Data Driven Testing.
Data Driven testing is an approach in which test data is written separately from the test logic or script.
So, this is how the process looks like:
vREST NG uses swagger files to generate all of the test logic and sample test data CSV files. vREST NG reads test data from the CSV files and iterate over the rows available in the CSV files and run the iterations one by one. Today in this post, we will look at the following in detail:
  1. How you may generate the test cases by using the swagger files.
  2. How you may feed the test data to those generated test cases through an excel sheet.

How to perform Data Driven API Testing in vREST NG

To elaborate the process, I will take a sample test application named as contacts application which provides the CRUD APIs. I will guide you through the following steps:
  1. Setup the test application
  2. Download and Install vREST NG Application
  3. Perform Data Driven API Testing in vREST NG

Setup the Test Application

You may skip this step if you want to follow the instructions for your own test application.
Otherwise, just download the sample Test Application from this repository link. This application is a NodeJS based application and tested with NodeJS v10.16.2.
To setup this application, simply follow the instructions mentioned in the README file of the repository.

Download and Install vREST NG Application

Now, simply download the application through vREST NG website and install it. Installation is simple but if you need OS specific instructions, then you may follow this guide link.
After installation, start the vREST NG Application and use vREST NG Pro version when prompted in order to proceed further.
Now first setup a project by dragging any empty directory from your file system in the vREST NG workspace area. vREST NG will treat it as a project and store all the tests in that directory. For more information on setting up project, please read this guide link.
For quick start, if you don't want to follow the whole process and just want to see the end result. They may download and add this project directory in vREST NG application directly.

Performing Data Driven API Testing in vREST NG

vREST NG provides a quick 3 step process to perform data driven API Testing:
  • A) Import the Swagger File A
  • B) Write Test Data in CSV Files
  • C) Setup Environment
Now, let's see these steps in detail.

A) Import the Swagger File

To import the Swagger file, simply click on the Importer button available in the top left corner of the vREST NG Application.
An import dialog window will open. In this dialog window:
  1. Select
    Swagger
    as Import Source
  2. Tick the option
    Generate Data Driven Tests
    . If this option is ticked then vREST NG Importer will generate the data driven test cases for each API spec available in the swagger file.
  3. Provide the swagger file. For this demonstration, I will use the swagger file from the test application repository. Download Swagger File
The dialog window will look something like this. Now, click on the Import button to proceed further.
The import process has done the following things so far:
1. It has generated a test case for each API spec available in the Swagger or OpenAPI file. And test suites will be generated against each tag available in the swagger file.
2. It has automatically created the sample CSV files against each test case with desired columns according to your swagger file as shown in the following image.
I will discuss in detail on how you may fill this excel sheet later in this post.
3. The generated CSV files are also automatically linked as shown in the following image.
So, before every test case execution, the test case will read the data from the linked CSV file and converts it into JSON format and store it in a variable named as data. Now the test case will iterate over the data received and run the iterations. So, if you make a change in CSV file, just run the test case again. Test Case will always pick up the latest state of the CSV file. No need to import again and again.
4. It has automatically inserted some variables in the API request params as per the API definitions available in the swagger file. These variables value will picked up from the linked CSV file automatically.
5. It has automatically added the response validation logic as well. In the following image, status code assertion is used to validate the status code of the API response. Text Body with Default Validator assertion compares the expected response body with the actual response body of the executed API test case. Text body with Default Schema Validator assertion validates the API response structure through the JSON schema.

The expected status code will be picked up from the linked CSV file.
And the expected response body will also be picked up from the linked CSV file.
And the expected schema name is also picked up from the linked CSV file.
6. It has imported all the swagger schema definitions in the
Schemas
section available in the
Configuration tab
.
You may refer these schema definitions in the Expected Schema tab as discussed earlier. And in the CSV file, you will need to just specify the respective schema name for the test iterations in the expectedSchema column.

B) Write Test Data in CSV Files

As we have already seen the data file generated from the import process. Let me show you the generated file again for the Create Contact API:
In this sample file, you may add test data related to various iterations for the Create Contact API. In the iterationSummary column, simply provide the meaningful summary for your iterations. This iteration summary will show up in the Results tab of the vREST NG Application. You will need to fill this test data by yourself. You may even generate this test data through any external script.
Now, let's add some test iterations in the linked CSV file.
With the above CSV file, I am checking two test conditions of the Create Contact API:
  1. When the name field is empty
  2. And when the name field length is greater than the limit of 35 characters.
In the above CSV file, I have intentionally left the expectedBody column blank. I don't need to fill this column. I can generate this column's value via the vREST NG Application itself.
Before executing the test case, I need to configure the baseURL variable of your test application in the Configuration tab like this:
In this section, you can configure your various environments like prod, dev, staging etc. and their configurations using variables.
Now, let's execute this test in vREST NG Application. Both the iterations are failed because expected response body doesn't match with the actual response body as shown in the following image:
Now, click on button "
Copy Actual to Expected
" for each iteration. vREST NG will directly copy the actual response body to expectedBody column in the linked CSV file.
Now after this operation, if you look at the CSV file again. You can see that vREST NG has filled the expectedBody column for you as shown in the following image.
Note: If you have opened this CSV file in Microsoft Excel then you will need to close the file and open it again in order to reflect the changes. But some code editors e.g. VS Code automatically detect the changes on the file system and reflect it in real time.
Now, if you execute the test again, you can see that the test iterations are now passing.
You may also see the
expected vs actual response
for the selected test iteration:
And you may see the execution details of the selected iteration by going to Execution Tab:
So, in this way, you may execute test iterations for an API via CSV file. Just add iterations in your CSV file and run it in the vREST NG Application directly. No need to import again and again. It all just work seamlessly. So, it increases your test efficiency and productivity drastically.

C) Setup Environment

For the generated steps, you may also need to set the initial application state or DB state before executing your tests. So that you can perform the regressions in an automated way. Some use cases of setting up initial state can be:
  1. Restoring the database state from the backups
  2. Execute an external command or script
  3. Invoke a REST API to setup the initial state
In this section, Let's see, how you may execute an external command before the execution of our tests. As our sample test application is simple and built for demonstrating vREST NG. It stores all the contacts data in a JSON file. So, I already have the initial data in a JSON file which I can copy to our test application project directory before executing the test cases.
You may specify the command as shown in the following image:
The above command will restore the application state from the initial data which is already there in vREST NG Project directory >> dump.json file.
Note: You will also need to specify the
cpCmd
variable in the
Environments
section because in Linux/MacOS the command name is
cp
and for Windows OS, the command name is
copy
. So, for Windows OS, you may create another environment in vREST NG application. So that your API tests can run on any machine by just switching the environment.
I would like everybody to have your feedback on this approach whether you find it useful or not for your API testing needs. Do like if you find this post helpful. Feel free to contact me in case if you need any help or if you want to use the vREST NG Pro version for free. Your feedback is essential for me to improve further.

Written by dheeraj.aggarwal | * Creator of vREST NG * API Automation Expert * Passionate about Yoga and Kalaripayattu
Published by HackerNoon on 2020/01/13