巴黎的灯光下 发表于 2019-4-11 15:01:12

契约测试之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]
查看完整版本: 契约测试之Spring Cloud Contract