我在getToken
测试套件中的一个测试用例get_Admin_Token
中有一个PassToken
请求,我在其中以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"
}
我需要在access_token
方法中使用uploadFile
值,但需要在标头中传递它。我有一个Authorization
值的字段Bearer: $(access_token)
。
使用我发现的一些Google:
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()
我的常规代码:
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}
尝试将下一个方法中的什么作为标头中的授权值放入,但它不起作用
答案 0 :(得分:1)
编辑:更简单的方法
只需使用传输操作将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" )
并使用此处给出的答案:How to transfer dynamic auth value in all requests instead of changing the value in every request's header in 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
放入循环中,但是我还不知道该怎么做,因此我需要继续工作