将获取请求中的令牌传递到SoapUI中的标头



我在PassToken测试套件中的测试用例get_Admin_Token中有一个getToken请求,其中我有以下JSON:作为响应

{
"access_token": "5701f536-0bd5-441f-a490-21aafeasdasdd",
"token_type": "bearer",
"refresh_token": "c53af657-8292-4aff-xxxx-xxxf0ffed310",
"expires_in": 80208,
"scope": "read write trust"
}

我需要在uploadFile方法中使用access_token值,但我需要在标头中传递它。我有一个值为Bearer: $(access_token)的字段Authorization

使用一些谷歌,我发现:https://community.smartbear.com/t5/SoapUI-Open-Source/How-do-I-do-a-property-transfer-with-multiple-source-responses/td-p/106456问题,看起来很相似。我开始创建GroovyScript测试步骤,在那里我使用代码将其传递到Properties表,但没有成功。我还试图将其用于get_Admin_Token的断言,但我收到了一条关于不正确对象类型的消息。我也尝试过使用def accessToken = jsonSlurper.access_token.toString()来使用字符串,但现在我得到了一个错误`

No signature of method: 
com.eviware.soapui.impl.wsdl.testcase.WsdlTestCase.setProperty() is 
applicable for argument types: (java.lang.String, java.lang.String) values: 
[AUTH_KEY, Bearer 5701f536-0bd5-441f-a490-21aafeasdasdd] Possible solutions: 
getProperty(java.lang.String), addProperty(java.lang.String), 
hasProperty(java.lang.String), hasProperty(java.lang.String), getProject(), 
getProperties()

我的groovy代码:

import groovy.json.JsonSlurper
def response = messageExchange.response.responseContent
def jsonSlurper = new JsonSlurper().parseText(response)
assert !(jsonSlurper.isEmpty())
def accessToken = jsonSlurper.access_token.toString()
assert null != accessToken, "access_token does not have a value"
def authorizationKey = "${accessToken}"
context.testCase.setProperty('AUTH_KEY',"Bearer " + authorizationKey)

这个代码有效吗?我不确定下一个方法应该放什么作为头中的授权值,我尝试了${#get_Admin_Token#AUTH_KEY},但它不起的作用

编辑:更简单的方法只需使用传输操作将Token传递到属性,并在标头Bearer ${Properties#AdminToken}中设置即可。这都是

===================

旧版本

如果有人在寻找Groovy脚本,下面的答案是正确的:

好吧,我想我找到了一个变通办法。Groovy代码如下:

import groovy.json.JsonSlurper
def response = messageExchange.response.responseContent
def jsonSlurper = new JsonSlurper().parseText(response)
assert !(jsonSlurper.isEmpty())
def accessToken = jsonSlurper.access_token.toString()
assert null != accessToken, "access_token does not have a value"
def authorizationKey = "${accessToken}"
context.testCase.testSuite.setPropertyValue("AUTH_KEY","Bearer " + authorizationKey)
log.info context.testCase.testSuite.getPropertyValue( "AUTH_KEY" )

使用这里给出的答案:如何在所有请求中传输动态身份验证值,而不是在每个请求中更改值';我在SOAPUI中创建了一个新的GroovyScript测试用例:

testRunner.testCase.testSteps.each{ name, testStep ->
log.info name
if(testStep.metaClass.getMetaMethod("getTestRequest")){
if(name=="UploadScreenshot"){
def request = testStep.getTestRequest()
def headers = request.getRequestHeaders()
headers.add('Authoritzation',context.testCase.testSuite.getPropertyValue( "AUTH_KEY" ))
request.setRequestHeaders(headers)
log.info "Added header to $name"
}
}
}

我知道如果删除循环,将if放在循环中不是一个好主意,但我还不知道如何做,我需要继续的工作

最新更新