Users can now write JavaScript code to perform math operations, string operations using API’s response.
The idea here is to provide math operations and string operations functionalities under pre-requisite and assertions as a form of javascript code where users can use Json paths of current API response or normal hardcoded values to perform operations.
JavaScript code examples :
Note: Please follow ES5.1 syntax, Rules, and Functions for writing javascript code.
Contents
Execute JavaScript
Math Operations
String Operations
Steps to test Execute JavaScript:
Related topics
Math operation
This supports all Arithmetic operations such as + , - , * , / , % . Code for all operations will remain the same except symbols. Examples listed below
Input :
var executeJs = function(response,headers){
var x = 10;
var y = 20;
var z = x * y;
return z;
}
Output :
200.0
Note 1: In order to get integer response of above operation use “toFixed(0)” in above code like below -
var executeJs = function(response,headers){
var x = 10;
var y = 20;
var z = x * y;
return z.toFixed(0);
}
Output :
200
Note 2: Users are not allowed to change line 1, They can only add respective JavaScript code in between {} example given below.
Good :
var executeJs = function(response,headers){
//your JavaScript code here
}
Bad :
var testing= function(test1, test2, test3){
//your JavaScript code here
}
var myJsFunction= function(){
//your JavaScript code here
}
String operation
This operation support all String operations like concat, substring, equals etc. Code for all operation will remain same except mode of operations. Examples listed below
Input :
Output :
Input :
Output :
Input :
Output :
RegEx example : my API response is having this string in it “code%test_user_1234%”
Input :
Output :
Using Json paths
This operation used to fetch Json path values and perform math or string opertaions.
For this example took reference of this post API from petstore
API : “https://petstore.swagger.io/v2/pet”
Verb Type : POST
Math operation input :
In my case id & category.id contains value “10” respectively.
Output :
String operation input :
In my case photoUrls[0] & tags[0].name contains value “String” respectively.
Output :
Say response is having multiple index of same value then follow below example :
Input : In my case both values are different.
Output :
Note : Current JavaScript implementation does not support any import Node.js of liberates such as console, window etc.
Example input :
Output :
Steps to test Execute JavaScript:
Step-1: Navigate to Functional Testing.
Step-2: Step-2: Build a Test Script.
Click on to getting started with building a Test Script
Step-3: Click on Assertion tab then click on Json Path Assertion.
Step-4: Select javascript as type and enter your code.
var executeJs = function(response,headers){
var mySrting = "this is my string example";
var substring = mySrting .substr(19, 7);
return substring;
}
example
var executeJs = function(response,headers){
var mySrting1 = "My name is ";
var mySrting2 = mySrting1.concat("Alpha");
return mySrting2;
}
My name is Alpha
var executeJs = function(response,headers){
var mySrting1 = "My name is";
var mySrting2 = "This is second string";
if(mySrting1.equals(mySrting2)){
return "both string are same";
}
else{
return "different strings";
}
}
different strings
var executeJs = function(response,headers){
var str = response.toString();
//this pattern is used to find first occurance of string which is present in the form like this %My_string% in the response
var regExp = /(code%[\\w\\d\\W]+%)/g
var match = regExp.exec(str);
var sub = match[1];
return sub.substr(5,14);//this can be alterd based on use case
}
test_user_1234
var executeJs = function(response,headers){
var x = JSON.parse(response);
var response2 = x.id;
var response1 = x.category.id;
var result = response2 * response1;
return result;
}
100.0
var executeJs = function(response,headers){
var x = JSON.parse(response);
var response2 = x.photoUrls[0];
var response1 = x.tags[0].name;
var result = response2.contains(response1);
return result;
}
TRUE
var executeJs = function(response,headers){
var x = JSON.parse(response);
var response = x[10].photoUrls[0];
var response1 = x[5].tags[0].name;
var result = response.contains(response1);
return result;
}
FALSE
var executeJs = function(response,headers){
var x = 5;
var y = 2;
var z = x + y;
console.log(z);
}
"Exception in thread "main" javax.script.ScriptException: ReferenceError: "console" is not defined in <eval> at line number 5"