REST API の自動テスト スイートを作成したいと考えています。新しいサービスが完成したら、以前に作成したすべてのサービスが期待どおりに機能していることを確認したいと考えています。これを達成するために使用する最適なツールに関する提案はありますか? 一度に 1 つのサービスをテストできる Apigee のようなツールが存在することは知っていますが、ボタンをクリックするだけですべてのサービスをテストできる方法が必要です。
10 に答える
私の職場では、最近、作成したいくつかの RESTful API をテストするために、Java で書かれたいくつかのテスト スイートをまとめました。当社のサービスは、依存する他の RESTful API を呼び出すことができます。2 つのスイートに分割します。
- スイート 1 - 各サービスを個別にテストする
- restitoを使用して、API が依存するピア サービスをモックします。他の代替手段には、rest-driver、wiremock、およびbetamaxが含まれます。
- テストしているサービスをテストし、すべてのモックを単一の JVM で実行します
- Jetty でサービスを開始します
私は間違いなくこれを行うことをお勧めします。それは私たちにとって本当にうまくいきました。主な利点は次のとおりです。
- ピア サービスはモック化されているため、複雑なデータ セットアップを実行する必要はありません。各テストの前に、Mockito を使用した単体テストのクラスと同じように、restito を使用してピア サービスの動作を定義するだけです。
- モックされたピア サービスが呼び出されたかどうかを確認できます。これらのアサーションは、実際のピア サービスでは簡単には実行できません。
- このスイートは、モック化されたサービスが事前に用意されたメモリ内応答を提供するため、非常に高速です。そのため、スイートの実行に時間がかかることなく、適切なカバレッジを得ることができます.
- このスイートは、独自の JVM で分離されているため、信頼性が高く反復可能であるため、スイートの実行中に他のスイートや人々が共有環境をいじり、テストが失敗することを心配する必要はありません。
- スイート 2 - フル エンド ツー エンド
- スイートは、複数のマシンに展開された完全な環境に対して実行されます
- 環境内の Tomcat にデプロイされた API
- ピア サービスは、実際の「ライブ」の完全展開です
このスイートでは、ピア サービスでデータをセットアップする必要があります。つまり、テストの作成には一般的に時間がかかります。可能な限り REST クライアントを使用して、ピア サービスでデータのセットアップを行います。
このスイートのテストは通常、作成に時間がかかるため、ほとんどのカバレッジをスイート 1 に置きます。スイート 1 のモックは実際のサービスとまったく同じように動作しない可能性があるため、このスイートにはまだ明確な価値があると言われています。
Frisby は node.js と Jasmine に基づいて構築された REST API テスト フレームワークで、API エンドポイントのテストを簡単、迅速、かつ楽しくします。 http://frisbyjs.com
例:
var frisby = require('../lib/frisby');
var URL = 'http://localhost:3000/';
var URL_AUTH = 'http://username:password@localhost:3000/';
frisby.globalSetup({ // globalSetup is for ALL requests
request: {
headers: { 'X-Auth-Token': 'fa8426a0-8eaf-4d22-8e13-7c1b16a9370c' }
}
});
frisby.create('GET user johndoe')
.get(URL + '/users/3.json')
.expectStatus(200)
.expectJSONTypes({
id: Number,
username: String,
is_admin: Boolean
})
.expectJSON({
id: 3,
username: 'johndoe',
is_admin: false
})
// 'afterJSON' automatically parses response body as JSON and passes it as an argument
.afterJSON(function(user) {
// You can use any normal jasmine-style assertions here
expect(1+1).toEqual(2);
// Use data from previous result in next test
frisby.create('Update user')
.put(URL_AUTH + '/users/' + user.id + '.json', {tags: ['jasmine', 'bdd']})
.expectStatus(200)
.toss();
})
.toss();
API の自動テストを行う際の問題の 1 つは、多くのツールでは、テスト スイートを実行する前に API サーバーを起動して実行する必要があることです。完全に自動化されたテスト環境で API を実行してクエリを実行できるユニット テスト フレームワークを使用すると、真の利点が得られます。
Node.JS / Express で実装された API に適したオプションは、自動テストに mocha を使用することです。単体テストに加えて、さまざまなテスト スイートに分割された、API に対する機能テストを簡単に作成できます。ローカル テスト環境で API サーバーを自動的に起動し、ローカル テスト データベースをセットアップできます。make、npm、およびビルド サーバーを使用して、"make test" ターゲットと、コードの一部がリポジトリに送信されるたびにテスト スイート全体を実行するインクリメンタル ビルドを作成できます。本当に気難しい開発者には、コード ベースのどの部分がテストでカバーされているかどうかを示す、優れた HTML コード カバレッジ レポートも生成されます。これが興味深いと思われる場合は、すべての技術的な詳細を提供するブログ投稿をご覧ください。
ノードを使用していない場合は、言語のデファクト ユニット テスト フレームワーク (jUnit、cucumber/capybara など) が何であれ、ローカル テスト環境でサーバーを起動し、HTTP クエリを実行するためのサポートを確認してください。大規模なプロジェクトの場合、自動化された API テストと継続的インテグレーションを機能させるための努力はすぐに報われます。
それが役立つことを願っています。
Runscopeは、一連のテストを使用して Web API を監視できるクラウド ベースのサービスです。テストは、パラメータ化された Web フックを介してスケジュールおよび/または実行できます。世界中のデータセンターからテストを実行して、応答時間がグローバルなクライアントベースに受け入れられることを確認することもできます.
Runscope の無料利用枠は、1 か月あたり最大 10,000 のリクエストをサポートします。
免責事項: 私は Runscope の開発者支持者です。
機能テストと自動テストにはSOAP UIを使用しました。SOAP UI を使用すると、ボタンをクリックするだけでテストを実行できます。Ted Young によって作成されたスプリング コントローラーのテストページもあります。この記事を使用して、アプリケーションで Rest 単体テストを作成しました。
Rest Assured ライブラリも使用できます。サンプル スクリプトを含むデモについては、http://artoftesting.com/automationTesting/restAPIAutomationGetRequest.html を参照してください。
私は TestNG と Apache HTTP クラスを使用して、独自の REST API テスト フレームワークを構築しました。Selenium で 2 年間働いた後、この概念を開発しました。
Selenium クラスの代わりに Apache HTTP クラスを使用する必要があることを除いて、すべて同じです。
試してみてください。本当にかわいくて良いです。テスト フレームワークを最大限にカスタマイズする力がすべて備わっています。
1 分に 1 回までの API テストの自動化は、theRightAPIを通じて利用できるサービスです。テスト シナリオを作成し、実行します。これらのテストが期待どおりに機能したら、スケジュールを設定できます。認証が必要なシナリオでは、テストを「連鎖」させることができます。たとえば、Twitter に対して OAuth 要求を行い、他のテストで使用できる共有トークンを作成するテストを作成できます。テストには、HTTP ステータス コードを確認するための検証基準を添付したり、JavaScript またはスキーマ検証を使用して応答を詳細に検査したりすることもできます。テストがスケジュールされると、特定のテストが検証に失敗したり、応答時間または応答サイズの設定範囲外で動作したりするとすぐに、アラートで通知するように設定できます。