当前位置: 首页 > 知识库问答 >
问题:

PACT提供程序根据公共API进行验证

谷梁向荣
2023-03-14

我正在尝试使用pact jvm进行用户驱动合约测试,并且能够生成用户端合约文件。在提供者端验证过程中,如何提供公共API而不是localhost大多数示例只使用localhost作为提供者,请提供帮助

@RunWith(PactRunner.class) // Say JUnit to run tests with custom Runner
@Provider("WeatherProvider") // Set up name of tested provider
@PactFolder("D:\Workspace\pactConsumer\pactConsumer_v2\pacts") // Point where to find pacts (See also section Pacts source in documentation)
@VerificationReports(value = {"markdown","json"}, reportDir = "D:\Workspace\pactConsumer\pactConsumer_v2\target")

public class ProviderVerifyer {
@State("Weather information is available for Chennai") // Method will be run before testing interactions that require "with-data" state
public void getWeather() {
System.out.println("Weather information is available for Chennai" );
}
@TestTarget // Annotation denotes Target that will be used for tests
public final Target target = new HttpTarget(8114); // Out-of-the-box implementation of Target (for more information take a look at Test Target section)

}

共有1个答案

唐沈义
2023-03-14

在验证活动提供程序之前,您需要仔细考虑--尤其是不受您控制的提供程序。任何改变服务器状态的东西(很可能)都是OUT的。

但是,没有技术上的理由您不能运行一些提供者验证,以检查当前部署的提供者是否履行了您的使用者契约。有主机和端口的构造函数:

public final Target target = new HttpTarget(host, port); 

有些事情要小心:

  • 编写测试,使其不依赖于数据,这将是非常重要的。这意味着在使用者测试中使用匹配器,以确保验证从提供程序返回的数据的形状(而不是验证从提供程序返回的特定数据)。无论如何,这都是编写使用者测试的良好实践。
  • 如果您的合同包含预期更改服务器状态的请求,您可能会遇到问题(向实时提供程序发出这些请求可能不合适,除非您能够以某种方式向沙箱环境发出请求)。
  • 根据合同的大小和/或提供商获得的正常通信量,对其运行您自己的自动测试可能是不礼貌的。
  • 您将无法设置提供程序状态。Provider状态用于避免契约测试之间的相互依赖关系,因此,如果您必须(比方说)在执行其他操作之前发出登录请求,您很可能会遇到麻烦--pact的设计不是为了具有与订单相关或包含多个请求的测试。
  • 如果您的测试要发送到运行在其他地方的实时部署提供程序,则测试可能会变得脆弱-DNS更改、服务器正常运行时间、网络超时等都可能导致测试意外失败。

最好的解决方案是让控制提供者的人使用(或包括)消费者生成的协议来进行他们自己的验证。这是一个协议经纪人的好用例--但是取决于你联系合适的人的能力,这可能是一个挑战。

 类似资料:
  • 关于测试提供程序,我有几个问题: 在进行测试之前,是否需要启动提供程序服务?我应该在测试中到达实际的提供者endpoint吗?例如,假设我的提供者代码库上有一个GET/dogsendpoint。运行测试时,是否需要在本地启动服务,点击/dogsendpoint,然后用pact文件验证为该endpoint返回的响应? 如果我想将其作为配置项管道的一部分运行(我使用的是Circloci),那么有哪些最

  • 我想为我的客户和API建立契约测试。我的API不能在本地运行,所以我希望能够在部署到生产之前,针对已部署的API临时版本运行提供程序测试。 我在网上看到的提供程序测试的大多数示例都使用了localhost。当尝试对我部署的HTTPSendpoint运行提供程序测试时,测试失败,显示。是不支持HTTPS协议,还是我遗漏了什么? 使用pact-provider-verifier cmd line工具工

  • 我正在使用pact-jvm提供程序Spring。我有两个不同的pact(.json)文件,比如(order.json和irs.json),我需要按顺序运行它们(order后面是irs),但是根据字母顺序选择测试类,irs首先运行,order其次运行。是否有方法调用、执行特定的测试类提供程序状态或定义测试类执行顺序?

  • 我正在使用Pact进行消费者驱动的合同测试。在我的usecase中,我的消费者“some-market-service-consumer”正在使用提供者“market-service”。在某个市场服务消费者处“产生”的合同如下所示: 在provider-site上,我正在使用Pact-Provider-Verifier-Docker'。以下是我的测试结果: 看起来,好像测试工作良好-“电话”被测试

  • 我是一个新的pact学习者,我想知道当提供程序验证时我应该输入什么 对于提供程序验证,我应该将提供的目标填充为本地主机,或者代替本地主机,我也可以输入实际环境的主机?哪种场景最适合合同测试?

  • 测试运行的结果如下: 由于使用本地协议文件会使测试变为绿色,我想原因不在我的测试类代码中,不过如果有帮助的话,我在这里提供它: 由于使用本地协议文件不是一个选项,我真的想知道如何修复错误,并将感谢任何有帮助的意见。