【SoapUI】2、SoapUI进行API Mock测试分析

来源:互联网 发布:数据录入兼职平台 编辑:程序博客网 时间:2024/05/17 23:31

SoapUI是一个方便进行HTTP/SOAP/REST服务进行测试的软件,可视化的测试数据管理和自动化测试脚本是其亮点。在前文《API白盒测试的利器SoapUI详细教程》进行API测试有详细的说明。其实SoapUI还有一个Mock功能,并不太为人所知。其实依托于SoapUI的可视化数据管理能力,基于Groovy脚本的强大能力,能够很方便地对API的Mock数据进行管理。
 
一、Mock说明
SoapUI的MockService大体上讲具有如下能力:

支持通过WSDL导入Web service的能力
支持Rest service的能力
支持一个mock动作包含多个mockResponse
支持请求顺序返回mockResponse
支持通过脚本编程控制返回mockResponse
支持各种日志的输出 
通过启动mockservice就能够实现一个简单的web输出能力

 
 

访问http://localhost:8080/hello就能够看到顺序的结果。
 
关于Mock更详细的脚本编程说明,请参考文档
https://www.soapui.org/soap-mocking/creating-dynamic-mockservices.html
 
二、解密Mock实现内幕
在内部SoapUI使用Jetty作为内置的web容器使用,可以将SoapUI的project导出成war部署在web容器中。通过查看war中的web.xml可以看到,统一使用一个MockAsWarServlet作为入口。
      <servlet>        <description></description>        <display-name>SoapUIMockServlet</display-name>        <servlet-name>SoapUIMockServlet</servlet-name>        <servlet-class>com.eviware.soapui.mockaswar.MockAsWarServlet</servlet-class>        <init-param>            <description>project file path</description>            <param-name>projectFile</param-name>            <param-value>WEB-INF/soapui/Project 1-soapui-project.xml</param-value>        </init-param>        <init-param>            <description>enable Web UI</description>            <param-name>enableWebUI</param-name>            <param-value>false</param-value>        </init-param>        <init-param>            <description>global settings file</description>            <param-name>soapUISettings</param-name>            <param-value>false</param-value>        </init-param>        <init-param>            <description>set listeners directory</description>            <param-name>listeners</param-name>            <param-value></param-value>        </init-param>        <init-param>            <description>set actions directory</description>            <param-name>actions</param-name>            <param-value></param-value>        </init-param>        <init-param>            <description>set scripts directory</description>            <param-name>scripts</param-name>            <param-value>WEB-INF/scripts</param-value>        </init-param>        <init-param>            <description>set MockService endpoint used in generated WSDLs and schemas</description>            <param-name>mockServiceEndpoint</param-name>            <param-value>/mock1</param-value>        </init-param>    </servlet>    <servlet-mapping>        <servlet-name>SoapUIMockServlet</servlet-name>        <url-pattern>/*</url-pattern>    </servlet-mapping>

然后,在WEB-INFO/soapui下有脚本和页面描述,是统一使用一个xml进行描述的。
Groovy脚本的执行调用栈如下:

SoapUIGroovyScriptEngine.run() line: 84
ScriptMockOperationDispatcher.selectMockResponse(MockRequest, MockResult) line: 87
RestMockAction.dispatchRequest(RestMockRequest) line: 135
RestMockDispatcher.getMockResult(RestMockRequest) line: 74
RestMockDispatcher.dispatchRequest(HttpServletRequest, HttpServletResponse) line: 49
WsdlMockRunner.dispatchRequest(HttpServletRequest, HttpServletResponse) line: 142
MockAsWarServlet$MockServletSoapUICore.dispatchRequest(HttpServletRequest, HttpServletResponse) line: 247


三、总结
总体SoapUI使用了web开发作为mock框架,通过加载groovy脚本实现的脚本执行。利用好SoapUI的可视化数据组织能大大降低mock的难度,同时对于有基本web开发能力的测试人员,上手mockservice还是比较容易的,mockRequest类似于HttpRequest。从细节上感觉要从头写一个groovy脚本还是有一定困难,主要的难度是各种对象的属性和方法的说明,调试以及mock场景的整体组织。



原创粉丝点击