合同测试

时间:2016-08-08 17:11:58

标签: database rest testing contract

我有一个关于测试的问题!到目前为止,我处在一个独特的情况,我正在编写的软件将发送给第三方供应商并存储一些数据。在这种情况下,编写测试以确认数据已成功发布意味着使用生产端点......我怀疑这是一种聪明的写作方式。

在这种情况下,没有人似乎有一个很好的解决方案来确保端点工作,然后要求第三方进行虚拟/测试设置。我想知道是否有人更好地了解如何进行这种互动。当你没有自己的代码库时,你如何编写有效的合同测试?

请谢谢你:D

1 个答案:

答案 0 :(得分:0)

根据您可以从第三方供应商处获得的协作级别,有不同的替代方案来处理这种情况:

合同测试:

Pact是一个有点成熟的框架,允许您编写针对模拟第三方提供程序服务发出HTTP请求的单元测试,这些服务会持久保存到文档中( Pact文件)可以与供应商共享。如果也使用Pact,供应商可以使用Pact文件针对提供者服务运行测试。使用者(您的服务)记录提供者使用的端点(第三方服务)以及预期的响应,提供者验证那些自身的端点,确保集成。

要使这种方法起作用,您的第三方供应商必须开放以获取您的pact文件并针对其服务运行您的消费者合同测试。合同测试允许您的测试完全独立于提供商服务,因为您的服务和提供商的服务在测试时从不连接在一起。

录制和重播:

这种方法背后的想法是编写测试,在初始运行时,对真实服务发出请求并记录他们的响应。这些测试的下一次运行将无法达到实际服务,而是针对第一次运行中记录的响应进行操作。 VCR是支持此类测试的库的一个很好的例子。

对于这种工作方法,您不需要第三方供应商的任何合作。您可以不时向真实服务提出请求(以保持您的样本回复新鲜),这取决于提供商服务的可用性。

测试环境:

正如您在问题中提到的那样,向提供商索取测试环境/帐户也是可能的。使用此资源,您可以编写到达真实提供程序服务的端到端测试,以及访问环境本身以在测试过程中对其状态进行断言。

此方法的挑战在于维护此测试环境:您如何确定其版本与您在生产中集成的版本相同?谁负责这个环境的可用性?谁在这种环境下创建数据?这些数据是否真实且代表了真实世界?

语义监控:

最后一个选择是编写一个测试,对您的服务与生产环境中的提供者之间的集成进行完整性检查。此测试可以在您的每次部署之后运行,甚至可以在部署窗口之外定期运行。

对于这种工作方法,您不需要第三方供应商的任何协作,但如果您有大量的集成用例,则此替代方案不能很好地扩展,因为这些测试往往运行缓慢,片状(因为它们依赖于真实的网络和系统可用性)并污染真实的环境。最好将这些测试作为测试金字塔的最顶层,专注于非常关键的用例。此外,您通常无法测试除快乐路径之外的任何内容,因为您无法控制提供者服务以将其设置为超出“正常”状态的任何特定状态。