How to set HTTP header with variable?

Here are a couple of keyword functions to get a token and set the property in the request.

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

import com.kms.katalon.core.annotation.Keyword
import com.kms.katalon.core.testobject.ConditionType
import com.kms.katalon.core.testobject.RequestObject
import com.kms.katalon.core.testobject.ResponseObject
import com.kms.katalon.core.testobject.TestObjectProperty
import com.kms.katalon.core.webservice.keyword.WSBuiltInKeywords as WS

@Keyword
def String getToken(){
	def authResponse = WS.sendRequestAndVerify(findTestObject('Auth/AuthenticateUser'))
	def slurper = new groovy.json.JsonSlurper()
	def result = slurper.parseText(authResponse.getResponseBodyContent())
	return result.token
}


@Keyword
def ResponseObject sendAuthorizedRequest(RequestObject restRequest, String access_token){

	// Build the authentication header
	def authRequest = restRequest
	ArrayList<TestObjectProperty> httpHeader = new ArrayList<TestObjectProperty>()
	httpHeader.add(new TestObjectProperty('Authorization', ConditionType.EQUALS, "Bearer " + access_token))

	// Set the header property and pass it back out
	authRequest.setHttpHeaderProperties(httpHeader)
	def response = WS.sendRequestAndVerify(authRequest)
	return response
}

And to use it in a test case, I call it like this:

import static com.kms.katalon.core.testobject.ObjectRepository.findTestObject
import com.kms.katalon.core.webservice.keyword.WSBuiltInKeywords as WS

def token = CustomKeywords.'tokens.TokenUtilities.getToken'()
def secureResponse = CustomKeywords.'tokens.TokenUtilities.sendAuthorizedRequest'(findTestObject('SystemUser/GetSystemUsers'), token)

WS.verifyResponseStatusCode(secureResponse, 200)
WS.verifyElementPropertyValue(secureResponse, 'data[0].registeredEmailAddress', 'samplename@samplemail.com')

This approach has worked for me so far…I hope it helps.

1 Like