我正在尝试阅读传入的请求&根据{{1}}中请求中的值来设置模拟响应。我使用以下groovy脚本。
soapUI 3.0
但它不起作用,抱怨def typeElement = mockRequest.getContentElement().execQuery("//ProductType");
def records = new XmlParser().parseText(typeElement[0].xmlText())
if (records.text()=="15"){
mockOperation.setDefaultResponse("Response 2");
} else {
mockOperation.setDefaultResponse("Response 1");
}
对象为空:
com.eviware.soapui.impl.wsdl.mock.DispatchException:无法使用脚本进行调度; java.lang.NullPointerException:无法在null对象上调用方法getContentElement()
但是我使用了mockRequest
版本的类似代码并且成功了。我该如何解决这个问题?
答案 0 :(得分:2)
我知道这个问题很老了,但我昨天遇到了同样的问题,这里是我如何设法使用groovy脚本发送响应(请注意,这是我第一次使用soapUI和groovy,因此可能会有做更好的方法)。
// define request
def request = new XmlSlurper().parseText(mockRequest.requestContent);
def resultingResponse = "none"
//when missing password
def Password = request.Body.CreateUser.user.Password
if(Password == '') {
resultingResponse = 'MissingPassword'
}
//when missing firstname
def Firstname = request.Body.CreateUser.user.FirstName
if(Firstname == '') {
resultingResponse = 'MissingFirstname'
}
context.ResultResponse = resultingResponse
答案 1 :(得分:2)
同样,我很欣赏这是旧的,但上面的Sinnerinc的答案并没有解决原来的问题,因为他的解决方案仍然会受到NPE的影响,因为mockRequest是空的。
我有一个相关问题,并发现this post表示如果模拟服务从未提供过请求并且您点击绿色三角形按钮来运行脚本,则mockResponse将为null!
答案 2 :(得分:0)
在SmartBear Forum解决方案代码中,绿色的“播放”按钮弹出“ mockRequest is Null”警告,因为模拟请求对象未定义。
当“真实”测试执行MockService端点时,定义了ockRequest对象。
要测试代码,请输入以下测试代码,然后单击“播放”,直到对覆盖范围感到满意为止。
然后我发送一个测试步骤来调用MockService端点
代码如下:
def mockRequestrequestContent = ""
if (mockRequest != null)
mockRequestrequestContent = mockRequest.requestContent
else
mockRequestrequestContent = "<testRequestXmlOrJson/>"
log.info(mockRequestrequestContent)
//begin script like @sinnerinc's above
注意:当前版本的SoapUI 5.50在底部没有一个日志窗口,试图收集信息具有挑战性。