今天将进一步介绍如何配置提供者测试代码、管理数据状态和验证契约文件。
契约测试由消费者驱动,提供者从Pact代理中获取契约文件,并在本地环境中运行测试检查契约内容是否匹配。
验证契约文件
除了上次讲到使用 Python 编写契约测试脚本,你也可以使用提供者来校验契约文件的内容。下面介绍两种实现方法。
CLI
安装pact-python之后,可以使用pact-verifier命令行程序来校验契约文件。
调用该命令后,将会调用pact-verifier,向服务器http://localhost:8080发起请求,并基于./Pacts/consumer-provider.json文件定义的内容验证契约内容。
这里介绍下pact-verifier命令行程序的可选参数:
–provider-base-url
必选项。指定验证契约文件需要发起的请求服务器的地址。
–pact-url
指定需要验证的Pact契约文件的位置。可以是Pact代理服务器地址或本地路径。
–provider-states-setup-url
在验证契约文件之前,被调用的请求所指向的服务器地址,可作为前置条件使用。这个URL将被POST请求调用,JSON体内容 {consumer:’consumer name’,state:’a thing exists’}。
–custom-provider-header
可为前置条件的请求和所有契约验证的请求添加指定的请求头部信息。
-t, –timeout
请求的超时时间,默认为30秒
-r, –publish-verification-results
指定验证结果的发布地址。
Python API
你也可以使用Verifier类,来实现与CLI相同的配置。
提供者状态
在大多数情况下,契约文件需要数据或请求达成某些前置条件,或文件中数据从其他三方服务获取,只有满足这些条件的数据才能成功发起请求并获得正确的响应。例如要获取用户信息,则前提该用户必须需要。为了使消费者和提供者的测试进行解耦,Pact可以通过实现提供者状态来为数据的添加额外的逻辑。
在设置提供测试代码时,还需要设置这些提供状态程序管理服务。可以使用Pact-verify的参数–provider-states-setup-url,在验证契约之前发启额外的HTTP请求来实现这一点。此URL可以部署于提供程序应用程序上,也可以位于单独的应用程序上。
结论
所有关于契约测试的教程已经完结,在项目中实践契约测试,可以:
- 改善微服务内部的数据通信
- 减少发版测试时间
- 增加对消费者行为理解
如果您还想深入了解契约测试,请与我们联系。