2

我正在尝试读取传入的请求并根据请求中的值设置模拟响应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对象为空:

com.eviware.soapui.impl.wsdl.mock.DispatchException:使用脚本调度失败;java.lang.NullPointerException:无法在空对象上调用方法 getContentElement()

但我已经使用了类似的soapUI 2.0版本代码并且成功了。我怎样才能解决这个问题?

4

3 回答 3

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
于 2010-08-25T08:18:30.883 回答
2

同样,我很欣赏这是旧的,但 Sinnerinc 上面的回答并没有解决原来的问题,因为他的解决方案仍然会受到 NPE 的影响,因为 mockRequest 为空。

我有一个相关的问题,发现这篇文章表明如果模拟服务从未服务过请求并且您单击绿色三角形按钮运行脚本,则 mockResponse 将为空!

于 2012-09-27T14:19:45.553 回答
0

SmartBear 论坛解决方案代码中,绿色的“播放”按钮弹出“mockRequest is Null”警告,因为模拟请求对象未定义。

mockRequest 对象是在“真实”测试执行 MockService 端点时定义的。

要测试代码,我输入以下测试代码并单击“播放”,直到我对我的覆盖范围感到满意为止。

然后我发送一个测试步骤来调用 MockService 端点

这是代码:

def mockRequestrequestContent = "" 
if (mockRequest != null) 
    mockRequestrequestContent = mockRequest.requestContent
else 
    mockRequestrequestContent = "<testRequestXmlOrJson/>" 
log.info(mockRequestrequestContent) 

//begin script like @sinnerinc's above

注意:当前版本的 SoapUI 5.50 底部没有日志窗口,尝试收集信息具有挑战性。

于 2019-02-19T08:18:04.297 回答