契约测试之Spring Cloud Contract
在微服务架构下,服务间会通过某种形式的消息传递或API调用进行耦合,这让服务的集成以及测试变成了非常具有挑战的一件事。早在微服务流行之前,就有人提出了消费者驱动契约(Consumer-driven contracts,简称CDC)的概念。今天我们要说的Spring Cloud Contract就是基于消费者驱动契约的测试工具。CDC 开发服务过程:
通过团队人员的讨论,根据服务接口实际使用的场景以及期望返回的数据,商定契约内容。在确定了契约之后,使用Spring Cloud Contract 为服务方生成自动测试,在服务方接口开发完成后,要确保能够通过该测试的验证。消费方也是可以基于契约来开发功能的。Spring Cloud Contract会基于契约来生成存根服务,消费方不需要等待接口开发完成,就可以通过存根服务完成集成测试。
Spring Cloud Contract 的使用:
服务方:
1.pom中添加spring-cloud-starter-contract-verifier依赖项与插件。
使用标签指定基类所在的package。
2.创建契约。
在src/test/resoures/contracts下创建契约。Spring Could Contract中,契约是用一种基于 Groovy 的 DSL 定义的。指定 API 的请求和响应的规则。
3.创建一个测试用的基类,准备符合契约的代码。
4.运行 /mvn clean install –Dmaven.test.skip=true
Target目录下会生成存根文件(stub.jar)及测试用例,并将存根文件打包到本地maven仓库。
服务方接口开发完通过该测试用例验证接口的正确性。
消费方:
1.pom中引入spring-cloud-starter-contract-stub-runner依赖。
2.编写测试用例。
通过@AutoConfigureStubRunner自动注入StubRunner,模拟服务方。
参数ids定位到maven中的stub.jar。
Ids = groupId : artifactId : version(’+’表示最新版本): 存根 : StubRunner端口
如果你将stub.jar发布到Maven私服中,可以通过repositoryRoot参数指定私服地址来远程调用。在测试通过后会根据契约返回响应内容。
总结:
文中首先介绍了契约测试的背景以及基于CDC开发服务的大致过程。然后编写契约文件通过Spring Cloud Contract的contract verifier插件生成存根和服务方的测试用例,消费方编写测试用例,通过StrubRunner模拟服务方来完成一次消费方调用服务方的测试。当所有团队成员都了解了工作流程,Spring Cloud Contract将会让微服务之间的集成更加顺畅。
页:
[1]