Rest 从groovy脚本中提取token的值

Rest 从groovy脚本中提取token的值,rest,groovy,soapui,access-token,assertions,Rest,Groovy,Soapui,Access Token,Assertions,我从soapui测试一个REST请求,收到一个包含一个令牌userToken的Json响应: { "status": 200, "entity": { "status": "SUCCESS", "message": { "defaultMsg": "Successfully logged in.", "msgId": "controller.authorization.success.log.in"

我从soapui测试一个REST请求,收到一个包含一个令牌userToken的Json响应:

{
   "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) 
但它不起作用…你能给我你的建议吗

提前感谢,


祝您好运,

您的代码有几个问题。首先,您没有正确导入JsonSlurper-groovy.json.JsonSlurper。其次,您的userToken属性路径不正确-您在开始时缺少实体。您的脚本应该大致如下所示:

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)
脚本断言似乎正用于REST请求测试步骤

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

log.info context.response

为了在项目级别设置属性,请使用context.testCase.testSuite.project.setPropertyValue'NAME','VALUE'

脚本断言的总体脚本为:

//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)

请更正问题中的代码示例-您粘贴的代码示例不可编译。我更改了用于编译的代码我测试了您建议的代码,并收到以下错误:没有方法签名:com.eviware.soapui.impl.wsdl.submit.transports.http.SinglePartHttpResponse.contentAsString适用于参数类型:值:[]可能的解决方案:getContentAsStringimport 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.parseTextjson log.info userToken:+root.entity.data.userTokenmessageExchange.modelItem.testStep.testCase.testSuite.project.setPropertyValueX-AUTH-TOKEN,root.entity.data.UserToken我使用的:def json=messageExchange.response.getContentAsString-->好的。非常感谢Szymon。我在linkedIn.Khalid上向您发送了一份邀请。这是正确的-response.contentAsString相当于response.getContentAsString。没有必要。对你有用吗?