我正在尝试读取传入的请求并根据soapUI 3.0
中请求中的值来设置模拟响应。我使用以下groovy脚本。
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");
}
但它不起作用,抱怨mockRequest
对象为null:
com.eviware.soapui.impl.wsdl.mock.DispatchException:无法使用脚本进行调度; java.lang.NullPointerException:无法在null对象上调用方法getContentElement()
但我在soapUI 2.0
版本中使用了类似的代码并且成功了。我怎样才能解决这个问题?
我知道这个问题很老了,但我昨天遇到了同样的问题,这里是我如何设法使用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
同样,我很欣赏这是旧的,但Sinnerinc上面的回答并没有解决原来的问题,因为他的解决方案仍然会受到NPE的影响,因为mockRequest是null。
我有一个相关的问题,并发现this post暗示如果模拟服务从未提供过请求并且您单击绿色三角形按钮来运行脚本,则mockResponse将为null!
在SmartBear Forum解决方案代码中,绿色的“播放”按钮会弹出“mockRequest is Null”警告,因为模拟请求对象未被修改。
当“真实”测试执行MockService端点时,将定义mockRequest对象。
为了测试代码,我输入以下测试代码并点击“播放”,直到我对我的报道感到满意为止。
然后我发送一个测试步骤来调用MockService端点
这是代码:
def mockRequestrequestContent = ""
if (mockRequest != null)
mockRequestrequestContent = mockRequest.requestContent
else
mockRequestrequestContent = "<testRequestXmlOrJson/>"
log.info(mockRequestrequestContent)
//begin script like @sinnerinc's above
注意:当前版本的SoapUI 5.50底部没有日志窗口,尝试收集信息具有挑战性。