Передача токена из запроса get в заголовок в SoapUI - PullRequest
0 голосов
/ 26 октября 2018

У меня есть 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).

Используя какой-то гугл, я нашел: https://community.smartbear.com/t5/SoapUI-Open-Source/How-do-I-do-a-property-transfer-with-multiple-source-responses/td-p/106456 вопрос, который выглядел похожим.Я начал создавать тестовый шаг GroovyScript, где использовал код для передачи его в таблицу свойств, но безуспешно.Я также пытался применить его к утверждениям для 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}, но он не работает

1 Ответ

0 голосов
/ 26 октября 2018

РЕДАКТИРОВАТЬ: более простой способ Просто передайте токен свойствам, используя действие переноса, и установите в заголовке 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 в цикл, если удалить цикл, но я пока не знаю, как это сделать иМне нужно приступить к работе

...