私はサードパーティからデータをクエリする新しいプロジェクトに取り組んでいますREST API。これはリアルタイムのスポーツデータフィード用であるため、フィードはゲームが実際に行われているときにのみ機能します。
サードパーティは優れたドキュメント(XSDなど)を提供していますが、ゲームの発生をシミュレートする方法がないため、このAPIに対して作成したコードをテストするには、実際のゲームが発生するまで待機する必要があります。
私の唯一の手段は、自分でゲームをシミュレートするコードを書くことですが、それは大変な作業のようです。これにどのように取り組みますか?
これは mock object の完全なユースケースです。すべての一般的な言語用のモックライブラリがあります。 RESTサービスレスポンスを提供するオブジェクトをモックしてテストデータを返す必要があります。テストデータを手動で生成するか、ライブシステムへの以前の呼び出しから収集することができます。
ゲームが行われるまで待ちます。フィードからすべてのイベントをキャプチャします。 リプレイ適切なタイミングでイベントが発生するシミュレータを作成します。ほら、あなたは実際のデータを持つフィードシミュレーターを持っています。
独自のシミュレーターを作成することをお勧めします。これを使用して、あらゆる種類のシナリオをテストできます。
過去にこれを行ったとき、要求メッセージで「特別な」値を使用して、シミュレータに必要なことを実行するように指示しました。これにより、開発環境の外に出ることなく、エンドツーエンドのテストを実行することもできます。
編集:たとえば、プロジェクトがXMLをサードパーティのサービスに送信する場合、リクエストには、たとえば<value>50.00</value>
。シミュレーターは、50.00 =>分解、60.00 =>ガーベッジ、70.00 =>接続を閉じるなどのようにコーディング(またはより適切に構成)できます。アイデアは、シミュレータの動作は、各テストケースで制御する入力に依存するということです。
おそらくbookmakerがいくつかのサンプルデータを提供することを考慮して(そしてこれは統合フェーズ中に保存できます)、これらのフィードを次のように整理することをお勧めします。
プロバイダーはおそらくプッシュ(POST)とプル(GET)の2種類の更新を提供しています。
この時点で
使用するテクノロジーの詳細には触れずに、mini-serverを取得します。これは、4つのURL(または、プロバイダー提供)、およびミニプッシュサービス。
「ミニサーバー」で作業するときに心に留めておくべき非常に良いことは、HTTPプロトコルのハンドラーです。ポート80でサーバーを作成することは非常に簡単で、問題を解決します。プロバイダーが行うように、応答GETのすべての情報を必ず注入する必要があります(これにより、運用環境に配置するときの問題を回避できます)。
個人的には 単純なPerlサーバー または 同じ を行いますが、Nodejsを使用します。データの注入に関しては、オフラインブラウザーを呼び出すタイマーで十分です([〜#〜] curl [〜#〜] 、WGET)
私はcucumberjs、phantomjsの組み合わせを使用してプロキシサーバーを127.0.0.1に設定し、node.jsプロセスをhttp-proxy
とnock
でフックすることにより、REST APIをシミュレートしました。 CucumberJSは重要な部分ではありません。テストシナリオはどのように記述してもかまいません。残りはシミュレーションの鍵です。match-request-return-dataによって単純にモックを作成できますが、パターンでフィルタリングしてコールバックをフックすることもできます応答を生成する関数。これにより、必要な粒度のレベルまでシミュレーションできます(極端な場合、完全なデモサーバーで終了しますが、段階的に実行できます)。
それはうまくいきます:
http-proxy
を使用して透過的に転送をプロキシします。したがって、「通常の」ロード(ページ、画像)はすべて機能します。nock
を使用します。私のシナリオでは、同じプロセスでキュウリのjsテストと組み合わせたため、次のようになりました。
nock
HTTPモッキングを設定します。残りはこの段落の前半で示したとおりです(つまり、これは少しサイクルです。テストランナーとしてphantomjsにページをロードするように指示し、すべてのリクエストを自分に転送し、ネットに転送します。またはインターセプトします。テスト済みのAPIの場合は、それらを参照してください)。