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

时间:2018-10-26 08:33:38

标签: groovy soapui

我在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}尝试将下一个方法中的什么作为标头中的授权值放入,但它不起作用

1 个答案:

答案 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放入循环中,但是我还不知道该怎么做,因此我需要继续工作