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

时间:2016-11-11 18:14:09

标签: pact

我可以创建一个PACT来运行不同的主机名吗?我一直在使用pact规则并将主机名保留为localhost。但是现在我试图为无法在localhost上运行的应用程序创建一个协议。

@rule     public PactProviderRule provider = new PactProviderRule(" ServiceNowClientRestClientProvider"," localhost",8080,this);

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

3 个答案:

答案 0 :(得分:1)

您可以使用pact-provider-proxy在ruby版本中。但是,消费者驱动合同的最佳用例是当您对使用者和提供者进行开发控制时,这通常意味着您可以在本地站起来提供者的实例。如果您正在尝试测试公共API,或者您没有开发控制权的API,则pact可能不是您的最佳工具。您可以阅读更多关于

的协议的更多here

答案 1 :(得分:1)

可以这样做(有可以在另一台机器上运行的独立模拟服务器),但PactProviderRule总是在运行测试的同一主机上启动模拟服务器。

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

有许多独立的pact模拟服务器: https://github.com/DiUS/pact-jvm/tree/master/pact-jvm-server https://github.com/pact-foundation/pact-reference/tree/master/rust/pact_mock_server_cli 以及来自Ruby实现的pact-mock_service(由于堆栈溢出的声誉限制,我无法发布链接)。

答案 2 :(得分:1)

罗纳德·霍尔斯豪森回答了我的问题。完整的对话在Pact Google论坛帖子中:

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

这不像是/否答案那么简单。可以这样做(有可以在另一台机器上运行的独立模拟服务器),但PactProviderRule总是在运行测试的同一主机上启动模拟服务器。

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

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

https://github.com/DiUS/pact-jvm/tree/master/pact-jvm-server

https://github.com/bethesque/pact-mock_service

https://github.com/pact-foundation/pact-reference/tree/master/rust/pact_mock_server_cli

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

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