首页 > 解决方案 > 制作一个可以返回 429 状态码的 soapui 模拟 REST 服务

问题描述

我有 SoapUI(免费)v5.4.0。

我需要实现一个返回 429(请求太多)状态代码的模拟服务。看来 mockservice 允许我设置响应状态代码,但我只能从下拉列表中选择它,并且 429 不是选项之一。如何自定义模拟服务以返回真正自定义的值而不是下拉列表中的值之一?

更新

我尝试将模拟动作从“序列”更改为“脚本”。然后我尝试了一个非常简单的脚本,如下所示:

mockRequest.httpResponse.status = 429

然后我单击“播放”按钮,当我使用“序列”时,这只会启动侦听器并等待请求进入。相反,当我单击“播放”按钮时,它立即失败:

com.eviware.soapui.impl.wsdl.mock.DispatchException: Failed to dispatch
using script; java.lang.NullPointerException: Cannot get property 
'httpResponse' on null object

然后我在此行之前添加了如下一行:

log.info("mockRequest[" + mockRequest + "]")

当我再次单击播放时,它会在脚本日志中打印:

Sat Jan 18 08:53:24 PST 2020:INFO:mockRequest[null]

我显然在这个设置中遗漏了一些基本细节。

标签: soapui

解决方案


向模拟服务添加响应以返回 429 错误代码。我将响应命名为“响应 429”。在“响应 429”的脚本部分中设置 http 状态。

mockResponse.setResponseHttpStatus(429)

我有其他模拟场景来测试 HTTP 状态代码为 200 和 500 的响应。我使用查询参数“returnCode”来获得不同的响应。mockService GET 方法的以下脚本完成了这项工作。

def returnCode = mockRequest.getRequest().getParameter("returnCode")
 
if( returnCode.equals("429"))
{   
    return "Response 429"
}
else if( returnCode.equals("500"))
{   
    return "Response 500"
}    
else {
    return "Response 200"
}

即使这是一个老问题,我也会发布回复。它可能对其他人有用。


推荐阅读