web-dev-qa-db-ja.com

REST APIとコードカバレッジの統合テスト

多数のビジネスサービスを公開するREST APIを構築しました。ビジネスサービスは、他のプラットフォーム/ユーティリティサービスを呼び出して、データベースの読み取りと書き込みを実行したり、サービスの承認を実行したりできます。

これらのサービスをTomcatにWARファイルとしてデプロイしました。

このセットアップ全体を、回帰テストスイートとしても扱いたい統合テストスイートを使用してテストしたいと思います。

これとスイートの開発をスピードアップできるツールで統合テストを実行するための良いアプローチは何でしょうか?対処する必要があると思われる要件は次のとおりです。

  1. ビジネスシナリオを実行する統合テストケースを定義する機能。
  2. スイートを実行する前に、テストデータを使用してDBをセットアップします。
  3. リモートサーバー(Tomcat)で実行されているREST API)を呼び出します
  4. 期待される出力を検証するために、DBのテスト後の実行を検証します
  5. REST APIのコードカバレッジレポートを用意して、スイートでカバーされるシナリオにどれだけ自信を持つべきかを把握します。
15
Wand Maker

私の仕事では、最近、構築したいくつかのRESTful APIをテストするために、いくつかのテストスイートをまとめました。あなたのサービスと同様に、私たちのサービスは、依存する他のRESTfulAPIを呼び出すことができます。 2つのスイートに分割します。


  • スイート1-各サービスを個別にテストする
    • APIが依存するピアサービスを restito を使用してモックします。他の選択肢には、 rest-driverwiremockpre-canned および betamax が含まれます。
    • テスト、テストしているサービス、モックはすべて単一のJVMで実行されます
    • Jettyでテストしているサービスを開始します

私は間違いなくこれを行うことをお勧めします。それは私たちにとって本当にうまくいきました。主な利点は次のとおりです。

  • ピアサービスはモックされているため、複雑なデータ設定を行う必要はありません。各テストの前に、Mockitoを使用した単体テストのクラスの場合と同じように、restitoを使用してピアサービスの動作を定義するだけです。
  • モックサービスが事前に用意されたメモリ内応答を提供するため、スイートは超高速です。そのため、スイートの実行に時間がかかることなく、良好なカバレッジを得ることができます。
  • このスイートは、独自のJVMで分離されているため、信頼性と再現性が高いため、スイートの実行と同時に他のスイートや他の人が共有環境をいじくり回してテストが失敗することを心配する必要はありません。

  • スイート2-フルエンドツーエンド
    • Suiteは、複数のマシンに展開された完全な環境に対して実行されます
    • 環境内のTomcatにデプロイされたAPI
    • ピアサービスは、実際の「ライブ」の完全な展開です

このスイートでは、ピアサービスでデータを設定する必要があります。つまり、テストの作成には通常、より多くの時間がかかります。可能な限り、RESTクライアントを使用して、ピアサービスでデータを設定します。

このスイートでのテストは通常​​、作成に時間がかかるため、ほとんどのカバレッジをスイート1に配置します。スイート1のモックは実際のサービスとまったく同じように動作しない可能性があるため、このスイートには依然として明確な価値があります。


あなたのポイントに関して、これが私たちがしていることです:

  • ビジネスシナリオを実行する統合テストケースを定義する機能。
    • cucumber-jvm を使用して、上記の両方のスイートのビジネスシナリオを定義します。これらのシナリオは、ビジネスユーザーが理解し、テストを推進できる英語のプレーンテキストファイルです。
  • スイートを実行する前にテストデータを使用してDBをセットアップします。
    • 統合スイートではこれを行いませんが、過去にユニットテストにdbunitで nitils を使用したことがあり、かなりうまく機能しました。
  • リモートサーバー(Tomcat)で実行されているREST API)を呼び出します
    • rest-assured を使用します。これは、特にREST APIのテスト用に調整された優れたHTTPクライアントです。
  • 期待される出力を検証するためにDBのテスト後の実行を検証します
    • これを簡単にするためにライブラリを使用していないため、ここでは推奨事項を提供できません。手動で行うだけです。何か見つけたら教えてください。
  • REST APIのコードカバレッジレポートを用意して、スイートでカバーされるシナリオにどれだけ自信を持つべきかを把握します。
    • 統合テストのコードカバレッジは測定せず、単体テストのみを測定するため、ここでも推奨事項を提供することはできません。

将来的に詳細が明らかになる可能性があるので、私たちの techblog に目を離さないでください。

29
theon

Arquillian という名前のツールをチェックすることもできます。最初はセットアップが少し難しいですが、統合テストの完全なランタイムを提供します(つまり、独自のコンテナーインスタンスを開始し、テストとともにアプリケーションをデプロイします)。 )そして問題を解決する拡張機能を提供します(RESTエンドポイントの呼び出し、データベースへのフィード、テスト後の結果の比較)。

Jacoco拡張機能は、後で表示できる、つまりSonarツールで表示できるカバレッジレポートを生成します。

比較的小規模なJEE6プロジェクトで使用してきましたが、なんとかセットアップできて、とても満足していました。

3
Tomasz Knyziak