Json 在SOAPUI中参数化期间,如何在单个标头中传递多个值

Json 在SOAPUI中参数化期间,如何在单个标头中传递多个值,json,rest,groovy,soapui,parameterized,Json,Rest,Groovy,Soapui,Parameterized,我需要从json响应中获取多个值,并将这些值作为参数传递到下一个请求测试步骤的头部 就像我得到了下面的回答一样: { "access_token": "tokenvalue", "token_type": "bearer", "expires_in": 7200, "refresh_token": "" } { “访问令牌”:“令牌值”, “令牌类型”:“承载者”, “expires_in”:7200, “刷新\u令牌”:” } 现在,我需要获取token\u type和

我需要从json响应中获取多个值,并将这些值作为参数传递到下一个请求测试步骤的头部

就像我得到了下面的回答一样:
{ "access_token": "tokenvalue", "token_type": "bearer", "expires_in": 7200, "refresh_token": "" } { “访问令牌”:“令牌值”, “令牌类型”:“承载者”, “expires_in”:7200, “刷新\u令牌”:” }

现在,我需要获取
token\u type
accesstoken
的值,并将其作为头键“Authorization”和值作为
“bearer tokenvalue”
传递到下一个测试步骤

请告诉我怎么做。

给你

使用下面的代码(获取访问令牌和令牌类型的代码)将脚本断言添加到第一个测试步骤中

注意:如果变量与您的值不同,请在脚本中为nextStepName、headerName变量提供适当的值。当前设置的值分别为REST测试请求、授权。如果具有相同的值,则可以忽略编辑

/**
*下面是第一步和第二步的脚本断言
*将在中为给定的测试步骤设置http头
*同一测试用例用户需要通过测试步骤名称,
*和标题名称(如果有任何更改)
**/
//根据您的案例需要修改测试步骤的名称
def nextStepName='REST测试请求'
def headerName=‘授权’
//不需要超出此范围进行编辑
def setHttpHeaders(字符串步骤名,def标题){
def nextRequest=context.testCase.testSteps[stepName].httpRequest
def existingHeaders=nextRequest.requestHeaders
标题。每个{
existingHeaders[it.key]=it.value
}
nextRequest.requestHeaders=现有Headers
}
def jsonResponse=new net.sf.json.groovy.JsonSlurper().parseText(messageExchange.response.contentAsString)
断言jsonResponse.access_令牌,“访问令牌为空或空”
assert jsonResponse.token_type,“token type为空或null”
//创建以空格分隔的标题值
字符串headerValue=“${jsonResponse.token\u type}${jsonResponse.access\u token}”
def headers=[(headerName):[(headerValue)]]
setHttpHeaders(下一步名称,标题)

这是一个非常简单的过程,完全不需要脚本就可以完成

在需要头参数的资源中,创建名为“Authorization”的头参数。关于创建标题参数的官方信息可用


要传输数据,对于值,使用一个简单的参数扩展:
${previous_step_name#ResponseAsXml#/*:token_type}+${previous_step_name#ResponseAsXml#/*:access_token}
。另外,还可以使用groovy脚本传输参数。

您也可以使用groovy脚本

import groovy.json.JsonSlurper
import com.eviware.soapui.support.types.StringToStringMap 


responseContent = testRunner.testCase.getTestStepByName("Name of the test   step token is included in the responce ").getPropertyValue("response")
slurperresponse = new JsonSlurper().parseText(responseContent)

access_tok = slurperresponse.data.token
//为下一个请求设置参数值

def headers = new StringToStringMap()
headers.put("x-auth-token",access_tok)
headers.put("Content-Type","application/json")
headers.put("X-Requested-With","XMLHttpRequest")
testRunner.testCase.getTestStepByName("Name of the test step which need to set the header section with access   token").testRequest.setRequestHeaders(headers)

嗨,你可以用java来做。 下面是示例代码

String name = "username";
            String password = "Simple4u!";
            String authString = name + ":" + password;
            String authStringEnc = new BASE64Encoder().encode(authString.getBytes());
            System.out.println("Base64 encoded auth string: " + authStringEnc);

        ClientRequest request = new ClientRequest(
                "http://localhost:8080/rest123/rest/message/abc?param=Hello");
        request.accept("text/plain").header("Authorization", "Basic " + authStringEnc);
        ClientResponse<String> response = request.get(String.class);
String name=“username”;
字符串password=“Simple4u!”;
字符串authString=name+“:”+密码;
字符串authStringEnc=newBase64Encoder().encode(authString.getBytes());
System.out.println(“Base64编码的身份验证字符串:“+authStringEnc”);
ClientRequest=newclientrequest(
"http://localhost:8080/rest123/rest/message/abc?param=Hello");
request.accept(“text/plain”).header(“Authorization”、“Basic”+authringenc);
ClientResponse-response=request.get(String.class);
然后这些用户名和密码会自动映射到@HeaderParam
希望这对你有帮助

您可以添加上一步和下一步请求的原始响应吗?Hi Rao,这是上一步{“访问令牌”:“245634534rggdfg”,“令牌类型”:“承载者”,“过期令牌”:7200,“刷新令牌”:“34534WRGG4G”}的响应。现在,我需要在名为“授权”的头中传递令牌类型和访问令牌“令牌类型+访问令牌”“下一个请求。我需要将两个值都传递到那里。您的意思是,从前面的响应中提取
access\u token
token\u type
,并在下一步的标题中发送它们?标题的名称是什么?你好Rao,谢谢你的回复。。除了groovy脚本之外,还有其他方法连接这两个值并在头中传递它吗?我希望您能告诉我-当您运行上述解决方案时,您发现了什么?您甚至没有在问题中提到您更喜欢的方法是什么?希望你至少试过!