WireMock:Web Service测试桩和模拟
本资源由 伯乐在线 – 唐尤华 整理
WireMock是一个针对Web Service测试桩(stubbing)和模拟函数(mocking)开发库。与一般通用的模拟工具不同,WireMock会实际创建一个HTTP服务器,测试代码对其连接后进行测试。
WireMock支持HTTP响应桩,提供针对测试桩的请求验证、代理/拦截、记录/回放以及故障植入。既可以在单元测试中使用,也可以部署到一个独立的测试环境。
尽管WireMock采用Java编写,但你仍然使用多种编程语言通过JSON API调用。
视频:WireMock实战
Rob Elliot和我最近在伦敦Java社区大会上进行了演讲,展示了我们4年以来使用WireMock的成果。
观看视频
上手指南
Maven
要在Java项目中添加WireMock,可以将下面依赖添加到POM文件:
XHTML
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 | <dependency> <groupId>com.github.tomakehurst</groupId> <artifactId>wiremock</artifactId> <version>1.57</version> <!– Include everything below here if you have dependency conflicts –> <classifier>standalone</classifier> <exclusions> <exclusion> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty</artifactId> </exclusion> <exclusion> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> </exclusion> <exclusion> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> </exclusion> <exclusion> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> </exclusion> <exclusion> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </exclusion> <exclusion> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> </exclusion> <exclusion> <groupId>org.skyscreamer</groupId> <artifactId>jsonassert</artifactId> </exclusion> <exclusion> <groupId>xmlunit</groupId> <artifactId>xmlunit</artifactId> </exclusion> <exclusion> <groupId>com.jayway.jsonpath</groupId> <artifactId>json-path</artifactId> </exclusion> <exclusion> <groupId>net.sf.jopt-simple</groupId> <artifactId>jopt-simple</artifactId> </exclusion> </exclusions></dependency> |
JUnit 4.x
#p#分页标题#e#
要使用WireMock的流式API,可以在代码中导入下面资源:
Java
1 | import static com.github.tomakehurst.wiremock.client.WireMock.*; |
WireMock自带了一些JUnit规则,用来进行服务器生命周期管理并且配置/撤销任务。要让WireMock支持基于测试用例的启动和停止,可以将下面代码添加到你的测试类(或者父类):
Java
12 | @Rulepublic WireMockRule wireMockRule = new WireMockRule(8089); // 构造函数不带参数式,默认为8080端口 |
现在,你可以像下面这样编写测试用例:
Java
1234567891011121314151617 | <a href=’http://www.jobbole.com/members/madao’>@Test</a>public void exampleTest() { stubFor(get(urlEqualTo(“/my/resource”)) .withHeader(“Accept”, equalTo(“text/xml”)) .willReturn(aResponse() .withStatus(200) .withHeader(“Content-Type”, “text/xml”) .withBody(“<response>Some content</response>”))); Result result = myhttperviceCallingObject.doSomething(); assertTrue(result.wasSuccessFul()); verify(postRequestedFor(urlMatching(“/my/resource/[a-z0-9]+”)) .withRequestBody(matching(“.*<message>1234</message>.*”)) .withHeader(“Content-Type”, notMatching(“application/json”)));} |
更多JUnit测试示例,可以直接参见WireMock验收测试。
要了解更多关于请求和桩响应细节,可以参见桩和验证。
#p#分页标题#e#
更多JUnit规则,可以参见JUnit 4.x规则。
开发资源
官方网站:http://wiremock.org/
开源地址:http://github.com/tomakehurst/wiremock
打赏支持我整理更多优质资源,谢谢!
打赏编辑
打赏支持我整理更多优质资源,谢谢!
任选一种支付方式