私はエンタープライズ プロジェクトに取り組んでおり、私のチームはアプリケーションのフロント エンドの作成を担当しており、Web サービスを開発する別のチームがあり、このプロジェクトの一部として利用できるすべてのサービスに WSDL を提供しています。開発段階では、ローカルの開発環境は、Web サービスの作成を担当するチームの開発ボックスの 1 つを指します。イテレーションの途中で開発環境が不安定になる可能性は十分にあります。そのリスクを軽減するために、ローカル マシンで SOAP UI を使用し、モック サービスを開始して開発を行います。異なるフレーバーの応答が必要な場合は常に、ローカル サービス応答 XML を変更します。このプロセスは順調に進んでいますが、サービスごとに 10 個の応答を作成し、それらをマシンの 1 つで tomcat との戦争として展開し、開発チーム全体がその戦争を指し示し、同じものを公開する方法があるかどうか疑問に思っていました。パラメーターに基づいて、war にバンドルされている 10 の応答のうちの 1 つの応答を送信できます。私はこれに労力を費やしたくありません。この種の機能をそのまま提供するツールはありますか。
3 に答える
私は、テスト チームがさまざまなシナリオをテストしたいと考えていたのと同じ状況にありました。そのシナリオでは、模擬サービスを時々変更する必要がありました。テスト チームの個人のほとんどは技術者ではなかったので、soapUI モック スーツの更新にいつも悩まされていました。これを回避するために、WSDL を使用してサービスをモックする完全な Web ベースのアプリケーションを作成しました。これは完全に Web ベースであるため、テスターはモック サービスを Web ブラウザーから変更することができました。
アプリケーションは、soapUI フレームワークの上に書かれています。ダミー応答 SOAP メッセージの自動生成や検証などの機能を提供します。また、このユーティリティを使用すると、サービスを遅延させてモックすることもできます。これは、パフォーマンス テストに役立ちます。
アプリケーションを SourceForge に追加しました。以下のリンクで見つけてください
http://sourceforge.net/projects/easymocker/
(Web Service Mocker は使いやすい、完全に Web ベースの SOAP Web サービス モッキング ユーティリティです。このユーティリティは、ユニット テスト、コンポーネント統合テスト、および非機能要件テストの際に、SOA 開発環境で非常に役立ちます。)
内部アーキテクチャを少し分割すると、作業が楽になります。クライアント コードを柔軟に外部 SOAP サービスに依存させるのではなく、内部で使用するためのインターフェイスを定義することをお勧めします。この IServiceProxy またはそのような名前を呼び出すことができます。
クライアント コードがそのインターフェイスと通信できるようにし、依存性注入 (DI) を使用してそのインスタンスをクライアントに挿入します。これは、多くの開発用途で、このインターフェースを単純に Test Double (例: Mock) に置き換えることができることを意味します。
SOAP スタックが意図したとおりに動作することを確認するために SOAP サービスも必要な場合は、いわゆる共有フィクスチャテストの匂いに注意してください。単一サーバー上の共有「テスト」サービスは共有フィクスチャであり、開発者が互いに足を踏み入れてボトルネックになるため、必要以上に多くの問題を引き起こす可能性があります。
より適切な代替手段は、各開発者のマシンに SOAP サービスをセットアップするか、それが不可能な場合は各開発者専用のサービスをセットアップすることです。
優れたxUnit テスト パターンで、共有フィクスチャやその他の多くのテスト パターンとアンチパターンについて詳しく読むことができます。
私は以前に同様の問題に直面しました
モック サービスが必要な WSDL を使用して、モック ホスト Web サービス アプリケーションを作成しました。
サーバー内の異なるXMLファイルにすべての異なる応答を保存しました
Web サービス コードでは、一意の識別子を持つスイッチを Web サービス リクエストに配置し、switch ブロック内で、一意の識別子に対応するサーバーに格納されている特定の XML ファイルから応答を送信しています。
これは、応答がほとんど静的であり、要求内の単一の一意の識別子に関して変化するため可能でした
すぐに回答が得られたため、これを構築してデプロイするのに 1 日もかかりませんでした
アプリケーションのコンテキストに基づいて、これが役立つことを願っています