脚本断言获取令牌并将其设置为http标头以进行下一个测试步骤

时间:2016-05-24 11:29:05

标签: json groovy soapui

如何编写脚本(断言)以便从给定代码中获取randomAccessToken输出。代码为json格式。

{
  "status": "Success",
  "code": 1000,
  "message": "Random access token generated",
  "randomAccessToken": "ef12286f-3263-4c3b-949a-3a43497254e2-20162124112138-1722093936686484240"
}
来自评论的

更新

我需要标题名称为“randomAccesstoken”,但是对于下一个TestStep,因为要运行我需要此信息。

2 个答案:

答案 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)
}