Microservices 针对公共API的PACT提供商验证

Microservices 针对公共API的PACT提供商验证,microservices,pact,pact-jvm,Microservices,Pact,Pact Jvm,我正在尝试使用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(

我正在尝试使用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)

}
这是可能的,但是- 在对实时提供商进行验证之前,您需要仔细考虑,尤其是您无法控制的提供商。任何改变服务器状态的操作(很可能)都将失败

但是,没有任何技术原因使您无法运行某些提供商验证,以检查当前部署的提供商是否履行了消费者合同。有以下方面的构造函数:

有些事情需要注意:

  • 编写测试非常重要,这样它们就不会依赖于数据。这意味着在用户测试中使用,以确保您正在验证从提供程序返回的数据的形状(而不是验证从提供程序返回的特定数据)。无论如何,这是编写消费者测试的良好实践
  • 如果您的合同中包含预期会更改服务器状态的请求,则可能会遇到问题(除非您能够以某种方式向沙盒环境发出请求,否则向实时提供商发出这些请求可能不合适)
  • 根据合同的大小和/或提供商获得的正常流量,对其运行自己的自动测试可能是不礼貌的
  • 你不能。提供者状态用于避免合同测试之间存在相互依赖关系,因此,如果您必须(比如)在执行任何其他操作之前发出登录请求,您可能会遇到麻烦-pact的设计目的不是让测试依赖于订单或包含多个请求
  • 如果您的测试要交给在其他地方运行的实时部署的提供商,那么您的测试可能会很脆弱——DNS、服务器正常运行时间、网络超时等的更改都可能导致您的测试意外失败
更好的选择
最好的解决方案是让控制提供商的人使用(或包括)您的消费者生成的契约进行自己的验证。对于契约经纪人来说,这是一个很好的使用案例,但取决于你与合适的人联系的能力,这可能是一个挑战。

我很困惑。您是否在询问如何在公共服务器上运行jvm代码,或者如何使您的计算机可公开访问,或者其他问题?否,我正在尝试对消费者驱动程序契约测试和生成的消费者端契约文件进行测试,以便提供方验证我所能看到的所有示例仅将提供的目标作为本地主机,如果我想将实际提供程序验证为某个公共API,那么如何验证?@Laiku我不能推荐您尝试执行的操作,因为这意味着您有一个公开可用的API,如果您使用pact提供程序验证程序,该API在状态方面可能会被篡改。我理解你在尝试做什么,我在过去也有同样的想法,但我们需要进一步改进产品,使之成为一种高效和安全的可能性。
public final Target target = new HttpTarget(host, port);