为运行REST请求创建groovy脚本

Val*_*tyn 1 rest groovy soapui

我有一个任务是创建groovy脚本,它将运行REST请求和安装属性.我通过脚本设置属性:

testRunner.testCase.setPropertyValue( "ScriptProFrom", "BIF" )
testRunner.testCase.setPropertyValue( "ScriptProTo", "STD" )
Run Code Online (Sandbox Code Playgroud)

但我找不到如何运行REST请求.我试着这样做:

myInterface = (RestService) testRunner.testCase.testSuite.project.getInterfaceByName("http://www.webservicex.net")
myOperation = myInterface.getOperationByName("ConversionRate")
myRequest = myOperation.getRequestByName("Request 1")
Run Code Online (Sandbox Code Playgroud)

"Script-result: com.eviware.soapui.impl.RestRequest@6a80901"如果我的要求,它会变得很酷,但如何运行呢?请帮忙...

alb*_*iff 5

通常,如果你有一个testStep,你可以得到它然后只是运行它,但是你是以另一种方式这样做,所以你可以使用class 的submit方法com.eviware.soapui.impl.rest.RestRequest.此方法有两个参数,上下文是com.eviware.soapui.model.iface.SubmitContext接口的实例boolean,指示操作是否是异步的.在您的代码中,这可能是:

myInterface = testRunner.testCase.testSuite.project.getInterfaceByName("http://www.webservicex.net")
myOperation = myInterface.getOperationByName("ConversionRate")
myRequest = myOperation.getRequestByName("Request 1")
// get the context
def context = testRunner.getRunContext()
// send the request synchronous
myRequest.submit(context,false)
Run Code Online (Sandbox Code Playgroud)

基于OP评论的编辑:

submit方法返回一个对象,该对象是实例com.eviware.soapui.impl.wsdl.WsdlSubmit<T>,然后你可以getResponse()在这个对象上调用另一个对象,com.eviware.soapui.model.iface.Response然后从这个对象中可以getContentAsString()用来检查响应内容或getContentType()检查内容类型等等.请注意,如果你调用在异步方式提交您必须验证getStatus()返回 com.eviware.soapui.model.iface.Submit.Status.FINISHED之前getResponse().我举个例子:

myInterface = testRunner.testCase.testSuite.project.getInterfaceByName("http://www.webservicex.net")
myOperation = myInterface.getOperationByName("ConversionRate")
myRequest = myOperation.getRequestByName("Request 1")
// get the context
def context = testRunner.getRunContext()
// send the request synchronous
def submitted = myRequest.submit(context,false)
// get the response
def response = submitted.getResponse()
// get the response content as string 
def content = response.getContentAsString()
// i.e check that the response contains literal 'OK'
assert content.contains('OK'),"Response not contains OK literal"
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助,