如何基于WSDL生成服务器桩用于集成测试(模拟超时场景)
基于WSDL生成超时测试用WebService Stub服务器的简便方法
需求背景
我有一份实现了若干WebService的服务器提供的WSDL文件,已经用Axis2生成了客户端代码,现在要构建针对服务器超时场景的集成测试。为此,我希望创建一个server-stub,让其中的方法执行sleep的时长超过客户端配置的超时时间。请问有没有简便方法基于该WSDL生成可运行服务的脚手架式服务器?
可行方案
1. 用Axis2自带工具生成服务端脚手架
- 执行
wsdl2java命令时添加-ss参数(指定生成服务端代码):wsdl2java -ss -uri your-service.wsdl - 生成的代码中会包含对应WebService方法的骨架实现类(通常类名带
Skeleton后缀),在目标方法内添加睡眠逻辑:public YourResponse yourServiceMethod(YourRequest request) { // 睡眠时长设置为超过客户端超时时间(示例为6秒,假设客户端超时5秒) try { Thread.sleep(6000); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } // 原有返回逻辑(或直接返回空/测试用响应) return new YourResponse(); } - 将生成的代码打包成
.aar文件,放到Axis2服务器的services目录下启动,或使用Axis2的嵌入式服务器快速运行。
2. 用Apache CXF生成嵌入式服务端(更快捷)
- 使用CXF的
wsdl2java工具,添加-server参数生成带嵌入式服务器的脚手架:wsdl2java -server -uri your-service.wsdl - 在生成的服务实现类中,给需要模拟超时的方法添加睡眠逻辑:
public YourResponse yourServiceMethod(YourRequest request) { try { // 设置睡眠时长超过客户端超时 Thread.sleep(7000); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } return new YourResponse(); } - 直接运行生成的带
Server后缀的主类,即可启动一个嵌入式WebService服务器,无需额外部署。
3. 用SoapUI创建Mock Service(无代码方案)
- 将WSDL导入SoapUI,右键选择New MockService创建Mock服务
- 选中需要模拟超时的方法,在响应配置中设置Delay值(单位毫秒),确保该值大于客户端的超时时间
- 启动Mock Service后,将客户端的请求地址指向Mock服务的地址,即可触发超时场景测试
内容的提问来源于stack exchange,提问作者Rob Audenaerde
相关产品推荐
相关产品推荐

