如何编写脚本(断言)以便从给定代码中获取randomAccessToken
输出。代码为json格式。
{
"status": "Success",
"code": 1000,
"message": "Random access token generated",
"randomAccessToken": "ef12286f-3263-4c3b-949a-3a43497254e2-20162124112138-1722093936686484240"
}
来自评论的更新:
我需要标题名称为“randomAccesstoken”,但是对于下一个TestStep,因为要运行我需要此信息。
答案 0 :(得分:0)
有grrovy脚本断言并粘贴下面的代码。
import groovy.json.JsonSlurper
def jsponresponse = messageExchange.responseContent
def jsonSlurper = new JsonSlurper()
jsonParsed = jsonSlurper.parseText(jsponresponse)
actualValue = jsonParsed.randomAccessToken
log.info actualValue
assert 12 < actualValue.length
//here you need to use groovy regx or string length grater than as assert i used srting length
希望这有帮助!!不要忘记点击回答..如果它不起作用提供你的发现我们解决。
现在精炼的脚本断言会将randomacesskey存储到属性中,该属性可以在下一个HTTP REQUEST头中使用
import groovy.json.JsonSlurper
def jsponresponse = messageExchange.responseContent
def jsonSlurper = new JsonSlurper()
jsonParsed = jsonSlurper.parseText(jsponresponse)
actualValue = jsonParsed.randomAccessToken
log.info actualValue
assert 12 < actualValue.length
context.testCase.testSteps["requestProps"].setPropertyValue( "Tokenkey", actualValue )
这是什么意思?新行
context.testCase.testSteps["requestProps"].setPropertyValue( "Tokenkey", actualValue )
为了使上面的行得到执行,你需要添加testStep属性并将其重命名为“requestProps”并添加一个条目“Tokenkey”
当脚本断言成功执行时,脚本已经提取并将randomAccessToken值存储到Tokenkey引用中,对于成功执行第一个请求后的交叉引用打开属性步骤,您会看到从randomAccessToken中提取的值 即,你在执行firt请求后看到了这个,
requestProps
Tokenkey = yettqutt-ajsfugau-uyatwdua
现在在另一个同一测试用例的请求中,需要在头部分中提取这个提取的Randomaccess令牌? 怎么做?
打开httpRequest - &gt;标题 - &gt;添加服务器接受的条目
如果在您的情况下服务器接受randomaccess密钥的名称是“access-key”
然后添加条目
access-key = ${requestProps#Tokenkey}
现在触发第二个或第三个第n个请求,您已在请求中设置此标头参数。
答案 1 :(得分:0)
在这里,您可以使用script assertion
,在线注释,解释它在每个语句中的作用:
此脚本将从json中获取值,并将其自动设置为http标头到下一个测试步骤。
从评论中更新:将标题添加到下一个请求
确保您拥有headerName
变量的正确值,默认情况下,我已根据要求将其设置为randomAccesstoken
。
import net.sf.json.groovy.JsonSlurper
//Please edit the header name you wanted
def headerName = 'randomAccesstoken'
// get the next test step name automatically, set the name if you want it for different step which is not the immediate next step
def nStepName = context.testCase.testStepList[context.currentStepIndex + 1].name
//a method which sets the headers
def setHttpHeaders(String nextStepName, def headers) {
def nextRequest = context.testCase.testSteps[nextStepName].httpRequest
def existingHeaders = nextRequest.requestHeaders
headers.each {
existingHeaders[it.key] = it.value
}
nextRequest.requestHeaders = existingHeaders
}
//create parser and pass the response that you received
def json = new JsonSlurper().parseText(messageExchange.responseContent)
//read the token
def token = json.randomAccessToken
//assert the value of token if null or empty
assert token, "Response does not contain Token or null"
//UPDATE from the comment to add the header to next request
if (token) {
log.info "next test step name is : ${nStepName}"
def headerValue = [(token)]
def headers = [(headerName) : (headerValue)]
setHttpHeaders(nStepName, headers)
}