How to update local variable at runtime

Hi,

During runtime I want to replace a local variable with another value. In other words, I want to replace the request variable called ${Id} at runtime.
I’ve tried the following code but it fails to use the value 222222, instead it’s still pulling the Id value from the “Variables” tab. Please help.
Thanks

RequestObject request = WSResponseManager.getInstance().getCurrentRequest()

requestBody = request.getSoapBody()
requestBody.replace(’${Id}’, “222222”)

request.setSoapBody(requestBody)
System.out.println("request body = " + request.getSoapBody())
response = WS.sendRequest(request)

//Request

        <FName>${FirstName}</FName>
        <AId>${Id}</AId>

I have published a GitHub repository

This project is a working example, which shows

  1. hoow to define a parameterised TestObject
  2. Test Case turns a parameterised TestObject to a RequestObject
  3. using that RequestObject, Test Case makes multiple times of request&response interaction to (https://petstore.swagger.io/v2/pet/findByStatus?status=${status})
    while interpolating the parameter with values as wanted

Please read the source of Test Cases/multiple_searches_for_pets_by_status and study it to find out how it works.

This example may not be an immediate answer to your problem. But hopefully it will give you some idea.


The TestObject looks like this:

The Test Case script looks like this:

import static com.kms.katalon.core.testobject.ObjectRepository.findTestObject

import com.kms.katalon.core.testobject.RequestObject
import com.kms.katalon.core.testobject.ResponseObject
import com.kms.katalon.core.testobject.TestObject
import com.kms.katalon.core.webservice.keyword.WSBuiltInKeywords as WS

def statusList = ["available", "pending", "sold"]

for (status in statusList) {
	println "-------------------- ${status} pets --------------------"
	String doc = retrievePetsByStatus(status)
	println doc
}

def retrievePetsByStatus(String status) {
	TestObject tObj = findTestObject("Object Repository/my/petstore_findByStatus_parameterized", ["status": status])
	RequestObject req = (RequestObject)tObj
	ResponseObject res = WS.sendRequest(req)
	return res.getResponseBodyContent()
}

When I rant it I saw outputs like this:

-------------------- available pets --------------------
[{"id":9222968140497154442,"category":{"id":0,"name":"string"},"name":"fish","photoUrls":["string"],"tags":[{"id":0,"name":"string"}],"status":"available"},{"id":9222968140497154443,"category":{"id":0,"name":"string"},"name":"doggie","photoUrls":["string"],"tags":[{"id":0,"name":"string"}],"status":"available"},{"id":9222968140497154444,"category":{"id":0,"name":"string"},"name":"doggie","photoUrls":["string"],"tags":[{"id":0,"name":"string"}],"status":"available"},{"id":9222968140497154445,"category":{"id":0,"name":"string"},"name":"doggie","photoUrls":["string"],"tags":[{"id":0,"name":"string"}],"status":"available"},{"id":9222968140497154446,"category":{"id":0,"name":"string"},"name":"doggie","photoUrls":["string"],"tags":[{"id":0,"name":"string"}],"status":"available"},{"id":9222968140497154447,"category":{"id":0,"name":"string"},"name":"fish","photoUrls":["string"],"tags":[{"id":0,"name":"string"}],"status":"available"},{"id":9222968140497154448,"category":{"id":0,"name":"string"},"name":"doggie","photoUrls":["string"],"tags":[{"id":0,"name":"string"}],"status":"available"},{"id":9222968140497154449,"category":{"id":0,"name":"string"},"name":"doggie","photoUrls":["string"],"tags":[{"id":0,"name":"string"}],"status":"available"},{"id":9222968140497154450,"category":{"id":0,"name":"string"},"name":"doggie","photoUrls":["string"],"tags":[{"id":0,"name":"string"}],"status":"available"},{"id":9222968140497154458,"category":{"id":0,"name":"string"},"name":"test","photoUrls":["string"],"tags":[{"id":0,"name":"string"}],"status":"available"},{"id":1245,"category":{"id":1245,"name":"xyz"},"name":"xyz","photoUrls":["test"],"tags":[],"status":"available"},{"id":9222968140497154462,"category":{"id":0,"name":"string"},"name":"fish","photoUrls":["string"],"tags":[{"id":0,"name":"string"}],"status":"available"},{"id":9222968140497154463,"category":{"id":0,"name":"string"},"name":"fish","photoUrls":["string"],"tags":[{"id":0,"name":"string"}],"status":"available"},{"id":9222968140497154464,"category":{"id":0,"name":"string"},"name":"fish","photoUrls":["string"],"tags":[{"id":0,"name":"string"}],"status":"available"},{"id":9222968140497154465,"category":{"id":0,"name":"string"},"name":"fish","photoUrls":["string"],"tags":[{"id":0,"name":"string"}],"status":"available"},{"id":9222968140497154466,"category":{"id":0,"name":"string"},"name":"fish","photoUrls":["string"],"tags":[{"id":0,"name":"string"}],"status":"available"},{"id":9222968140497154467,"category":{"id":0,"name":"string"},"name":"fish","photoUrls":["string"],"tags":[{"id":0,"name":"string"}],"status":"available"},{"id":9222968140497154468,"name":"test_name","photoUrls":[],"tags":[],"status":"available"},{"id":9222968140497154469,"category":{"id":0,"name":"string"},"name":"fish","photoUrls":["string"],"tags":[{"id":0,"name":"string"}],"status":"available"},{"id":9222968140497154470,"category":{"id":0,"name":"string"},"name":"doggie","photoUrls":["string"],"tags":[{"id":0,"name":"string"}],"status":"available"},{"id":9222968140497154471,"category":{"id":0,"name":"string"},"name":"doggie","photoUrls":["string"],"tags":[{"id":0,"name":"string"}],"status":"available"},{"id":9222968140497154472,"category":{"id":0,"name":"string"},"name":"doggie","photoUrls":["string"],"tags":[{"id":0,"name":"string"}],"status":"available"},{"id":9222968140497154473,"category":{"id":0,"name":"string"},"name":"fish","photoUrls":["string"],"tags":[{"id":0,"name":"string"}],"status":"available"},{"id":9222968140497154474,"category":{"id":0,"name":"string"},"name":"fish","photoUrls":["string"],"tags":[{"id":0,"name":"string"}],"status":"available"},{"id":9222968140497154475,"category":{"id":0,"name":"string"},"name":"doggie","photoUrls":["string"],"tags":[{"id":0,"name":"string"}],"status":"available"},{"id":9222968140497154476,"category":{"id":0,"name":"string"},"name":"doggie","photoUrls":["string"],"tags":[{"id":0,"name":"string"}],"status":"available"},{"id":9222968140497154477,"category":{"id":0,"name":"string"},"name":"doggie","photoUrls":["string"],"tags":[{"id":0,"name":"string"}],"status":"available"},{"id":9222968140497154478,"category":{"id":0,"name":"string"},"name":"doggie","photoUrls":["string"],"tags":[{"id":0,"name":"string"}],"status":"available"},{"id":9222968140497154479,"category":{"id":0,"name":"string"},"name":"doggie","photoUrls":["string"],"tags":[{"id":0,"name":"string"}],"status":"available"},{"id":9222968140497154480,"category":{"id":0,"name":"string"},"name":"doggie","photoUrls":["string"],"tags":[{"id":0,"name":"string"}],"status":"available"},{"id":9222968140497154481,"category":{"id":0,"name":"string"},"name":"doggie","photoUrls":["string"],"tags":[{"id":0,"name":"string"}],"status":"available"},{"id":9222968140497154491,"category":{"id":0,"name":"string"},"name":"test","photoUrls":["string"],"tags":[{"id":0,"name":"string"}],"status":"available"},{"id":9222968140497154492,"category":{"id":0,"name":"string"},"name":"test","photoUrls":["string"],"tags":[{"id":0,"name":"string"}],"status":"available"},{"id":9222968140497154497,"name":"test_name","photoUrls":[],"tags":[],"status":"available"},{"id":9222968140497154498,"category":{"id":0,"name":"string"},"name":"fish","photoUrls":["string"],"tags":[{"id":0,"name":"string"}],"status":"available"},{"id":9222968140497154499,"category":{"id":0,"name":"string"},"name":"fish","photoUrls":["string"],"tags":[{"id":0,"name":"string"}],"status":"available"},{"id":9222968140497154500,"category":{"id":0,"name":"string"},"name":"fish","photoUrls":["string"],"tags":[{"id":0,"name":"string"}],"status":"available"},{"id":9222968140497154501,"category":{"id":0,"name":"string"},"name":"fish","photoUrls":["string"],"tags":
.... trimmed
-------------------- pending pets --------------------
[{"id":1716,"category":{"id":101,"name":"testcategory"},"name":"getcat","photoUrls":["a.png","b.png"],"tags":[{"id":102,"name":"testtag1"},{"id":103,"name":"testtag2"}],"status":"pending"},{"id":1980,"category":{"id":101,"name":"testcategory"},"name":"getcat","photoUrls":["a.png","b.png"],"tags":[{"id":102,"name":"testtag1"},{"id":103,"name":"testtag2"}],"status":"pending"},{"id":1777,"category":{"id":101,"name":"testcategory"},"name":"getcat","photoUrls":["a.png","b.png"],"tags":[{"id":102,"name":"testtag1"},{"id":103,"name":"testtag2"}],"status":"pending"},{"id":1175,"category":{"id":101,"name":"testcategory"},"name":"getcat","photoUrls":["a.png","b.png"],"tags":[{"id":102,"name":"testtag1"},{"id":103,"name":"testtag2"}],"status":"pending"},{"id":5,"category":{"id":5,"name":"jimmy"},"name":"jimmy","photoUrls":[],"tags":[{"id":5,"name":"jimmy"}],"status":"pending"}]
-------------------- sold pets --------------------
[{"id":1117,"category":{"id":101,"name":"testcategory"},"name":"valueimplcat","photoUrls":["a.png","b.png"],"tags":[{"id":102,"name":"testtag1"},{"id":103,"name":"testtag2"}],"status":"sold"},{"id":1622,"category":{"id":101,"name":"testcategory"},"name":"valueimplcat","photoUrls":["a.png","b.png"],"tags":[{"id":102,"name":"testtag1"},{"id":103,"name":"testtag2"}],"status":"sold"}]

@ThanhTo

I reviewed the document

and found that this document is not enough for @zaraaq9.

This document describe how to define a TestObject (=WS RequestObject), and just that. The document does not describe how to use it. Especially it should cover how to make multiple times of request/response interactions with different parameter values.

@zaraaq9 why don’t you bind the needed value when calling the webservice from the testcase, instead of re-building the body?

@kazurayam the usage of parametrized webservice objects is explained here:

quote:

def response = WS.sendRequest(findTestObject([the ID of Web Service object], ["variable1": value1, "variable2": value2, ... , "variableN": valueN]))
1 Like

@kazurayam, Running from test is not a problem, I have been doing what you’ve described here. I wanted to learn how to do this from the object repository.