Pact 我可以创建一个在不同主机名上运行的协定吗?

Pact 我可以创建一个在不同主机名上运行的协定吗?,pact,Pact,我可以创建一个在不同主机名上运行的协定吗?我一直在使用pact规则,并将主机名保留为localhost。但现在我正试图为一个不能在本地主机上运行的应用程序创建一个契约 @统治 public PactProviderRule provider=new PactProviderRule(“ServiceNowClientRestClientProvider”,“localhost”,8080,this) 是否可以将localhost更改为其他配置,如果可以,是否需要其他配置。我尝试将在localho

我可以创建一个在不同主机名上运行的协定吗?我一直在使用pact规则,并将主机名保留为localhost。但现在我正试图为一个不能在本地主机上运行的应用程序创建一个契约

@统治 public PactProviderRule provider=new PactProviderRule(“ServiceNowClientRestClientProvider”,“localhost”,8080,this)


是否可以将localhost更改为其他配置,如果可以,是否需要其他配置。我尝试将在localhost上运行的测试更改为代码正在使用的实际主机名,但是失败了,我收到了各种错误消息“未解析的地址”或“无法分配请求的地址:绑定”或“正在使用的地址”

您可以在ruby版本中使用。然而,消费者驱动契约的最佳用例是当您对消费者和提供者都拥有开发控制权时,这通常意味着您可以在本地建立提供者的实例。如果您试图测试一个公共API,或者一个您没有开发控制权的API,pact可能不是您最好的工具。您可以阅读更多有关pact不适用的内容。

这是可能的(您可以在另一台机器上运行独立的模拟服务器),但PactProviderRule始终在运行测试的主机上启动模拟服务器

为了实现您所需要的,您需要使用一个模拟服务器实现,并且需要实现一个新的JUnit规则(最好从PactProviderRule扩展)

有许多独立的pact模拟服务器:
以及Ruby实现中的pact-mock_服务(由于堆栈溢出的信誉限制,我无法发布链接)。

Ronald Holshausen对我的问题给出了很好的回答。完整对话见谷歌论坛帖子:

主机名被传递到HTTP服务器库,以启动作为模拟服务器的HTTP服务器。此服务器将与测试运行在同一台机器上(实际上也是同一个JVM进程)。HTTP服务器库将使用主机名解析为IP地址,而IP地址又将解析为服务器端口将绑定到的计算机上的网络接口

这并不像回答是/否那么简单。这是可以做到的(您可以在另一台机器上运行独立的模拟服务器),但PactProviderRule始终在运行测试的主机上启动模拟服务器

为了实现您所需要的,您需要使用一个模拟服务器实现,并且需要实现一个新的JUnit规则(最好从PactProviderRule扩展)

有许多独立的pact模拟服务器:

可以使用的唯一有效值是:运行测试的计算机的主机名、运行测试的计算机的IP地址、localhost、127.0.0.1或0.0.0.0


如果在另一台计算机上启动了独立的模拟服务器(例如从您的示例主机名:test.service-now.com和端口:80),则PactProviderRule需要知道它不应尝试启动新的模拟服务器,而应与提供的模拟服务器通信(通过地址)。

为了澄清,您仍然可以对localhost上的模拟提供程序运行使用者测试(无论您使用何种实现,模拟提供程序将始终在localhost上运行),但是,您可以使用在localhost上运行的验证工具对远程地址上运行的提供程序验证契约,并将请求转发到远程服务器@罗纳德·霍尔肖森,是否有一个相同的问题,在我结束之前按回车键@RonaldHolshausen,JVM有等效的代理吗?那将是一个很好的候选人。