【问题标题】:extract a value of token from a script groovy从脚本groovy中提取令牌值
【发布时间】:2018-07-09 12:30:29
【问题描述】:

我测试了来自 soapui 的请求 REST,我收到了一个响应 Json,其中包含一个令牌 (userToken):

{
   "status": 200,
   "entity":    {
      "status": "SUCCESS",
      "message":       {
         "defaultMsg": "Successfully logged in.",
         "msgId": "controller.authorization.success.log.in"
      },
      "data":       {
         "userToken": "b57796e3-d9e4-49f2-9d46-481a2048ab65",
         "userName": "operateur",
         "userId": "operateur",
        }
}

我在soapui中添加了这个断言,用于提取userToken的值并将其作为项目的变量:

import com.eviware.soapui.support.XmlHolder
import net.sf.*
import net.sf.json.*
import net.sf.json.groovy.*

//def ResponseMessage = testRunner.testCase.testSteps["Recuperation Jeton"].testRequest.response.contentAsString
def ResponseMessage = messageExchange.response.contentAsString
log.info("OAUTH TOCKEN :"+ResponseMessage)
def object = new JsonSlurper().parseText(ResponseMessage)
log.info ("userToken :"+object.data.userToken)



messageExchange.modelItem.testStep.testCase.testSuite.project.setPropertyValue( "X-AUTH-TOKEN",object.data.userToken) 

但它不起作用......你能给我你的建议吗?

提前致谢,

最好的问候,

【问题讨论】:

  • 请更正您问题中的代码示例 - 您粘贴的示例无法编译。
  • 我修改了编译代码

标签: rest groovy soapui access-token assertions


【解决方案1】:

您的代码存在几个问题。首先,您错过了JsonSlurper - groovy.json.JsonSlurper 的正确导入。其次,您通往 userToken 属性的路径不正确 - 一开始您错过了 entity。你的脚本应该或多或少像这样:

import groovy.json.JsonSlurper

def json = messageExchange.response.contentAsString
def root = new JsonSlurper().parseText(json)

log.info ("userToken: " + root.entity.data.userToken)

messageExchange.modelItem.testStep.testCase.testSuite.project.setPropertyValue("X-AUTH-TOKEN", root.entity.data.userToken)

【讨论】:

  • 我测试了你建议的代码,我收到了这个错误:没有方法签名:com.eviware.soapui.impl.wsdl.submit.transports.http.SinglePartHttpResponse.contentAsString() 适用于参数类型:() 值:[]可能的解决方案 :getContentAsString()
  • import com.eviware.soapui.support.XmlHolder import net.sf.* import net.sf.json.* import net.sf.json.groovy.* import groovy.json.JsonSlurper def json = messageExchange.response.contentAsString() def root = new JsonSlurper().parseText(json) log.info ("userToken: " + root.entity.data.userToken) messageExchange.modelItem.testStep.testCase.testSuite.project.setPropertyValue("X-AUTH-TOKEN", root.entity.data.userToken)
  • 我使用了:def json = messageExchange.response.getContentAsString()---> 好的。非常感谢 Szymon。我在linkedIn.Khalid 上向您发送了邀请
  • 没错 - response.contentAsString 相当于 response.getContentAsString()() 不是必需的。它对你有用吗?
【解决方案2】:

Script Assertion 似乎正在用于 REST 请求测试步骤

  • 为了得到响应,您可以简单地使用context.response

    log.info context.response

  • 要在项目级别设置属性,请使用context.testCase.testSuite.project.setPropertyValue('NAME', 'VALUE')

Script Assertion 的所有脚本将是:

//check if there is response
assert context.response, 'Response is empty or null'

def json = new groovy.json.JsonSlurper().parseText(context.response)
def token = json.data.userToken

//check if there is token
assert token, 'token is empty or null'
log.info token

//Set value at project level property
context.testCase.testSuite.project.setPropertyValue('X-AUTH-TOKEN', token)

【讨论】:

    猜你喜欢
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 2022-11-18
    • 1970-01-01
    • 2019-04-14
    • 2015-10-01
    • 2013-09-14
    • 1970-01-01
    相关资源
    最近更新 更多