2

別のホスト名で実行する PACT を作成できますか? 私は協定規則を使用しており、ホスト名を localhost のままにしています。しかし、現在、ローカルホストで実行できないアプリケーションの協定を作成しようとしています。

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

必要な追加の構成がある場合は、localhost を別のものに変更することは可能ですか。localhost で動作するテストを、コードが使用している実際のホスト名に変更しようとしましたが、失敗し、「未解決のアドレス」、「要求されたアドレスを割り当てられません: バインド」、または「使用中のアドレス」というさまざまなエラー メッセージが表示されます。

4

3 に答える 3

2

Ronald Holshausen は、私の質問に適切に答えてくれました。完全な会話は、Pact Google フォーラムの投稿にあります。

ホスト名は HTTP サーバー ライブラリに渡され、モック サーバーとして HTTP サーバーを起動します。このサーバーは、テストと同じマシンで実行されます (実際には、同じ JVM プロセスでもあります)。HTTP サーバー ライブラリは、ホスト名を使用して IP アドレスを解決します。IP アドレスは、サーバーのポートがバインドされるマシン上のネットワーク インターフェイスに解決されます。

はい/いいえの答えほど単純ではありません。それは可能ですが (別のマシンで実行できるスタンドアロンのモック サーバーがあります)、PactProviderRule は常に、テストが実行されているホストと同じホストでモック サーバーを起動します。

必要なものを実現するには、モック サーバー実装の 1 つを使用する必要があり、新しい 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 は、新しいモック サーバーを開始しようとするのではなく、 1つは(アドレスhttps://test.service-now.comを介して)提供されています。

于 2016-11-15T15:38:08.537 に答える
1

pact-provider-proxyを使用して Ruby バージョンで実行できます。ただし、コンシューマー主導のコントラクトの最適な使用例は、コンシューマーとプロバイダーの両方を開発制御できる場合であり、これは通常、プロバイダーのインスタンスをローカルで立ち上げることができることを意味します。公開 API や、開発者が制御できない API をテストしようとしている場合、pact は最適なツールではない可能性があります。協定が良くないことについては、こちらで詳しく読むことができます。

于 2016-11-11T22:56:18.087 に答える