REST APIの自動テストスイートを作成したいと思います。新しいサービスを完了する際に、以前に作成したすべてのサービスが期待どおりに機能することを確認したいと思います。これを達成するために使用する最適なツールに関する提案はありますか? Apigeeのようなツールを使用すると、一度に1つのサービスをテストできますが、ボタンをクリックするだけですべてのサービスをテストする方法が必要です。
私の仕事では、最近Javaで記述されたいくつかのテストスイートをまとめて、構築したRESTful APIをテストしました。サービスは、依存する他のRESTful APIを呼び出すことができます。これを2つのスイートに分割しました。
これを絶対にお勧めします。それは私たちにとって本当にうまくいきました。主な利点は次のとおりです。
このスイートを使用するには、ピアサービスでデータを設定する必要があります。つまり、テストの作成には一般に時間がかかります。可能な限り、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();
この理由から、同僚の1人と協力してPyRestTestフレームワークを開始しました。 https://github.com/svanoort/pyresttest
Pythonでテストを使用できますが、通常のテスト形式はYAMLです。
基本的なRESTアプリのサンプルテストスイート-APIがHTTPステータスコードをチェックして正しく応答することを確認しますが、応答本文も検査することができます。
---
- config:
- testset: "Tests using test app"
- test: # create entity
- name: "Basic get"
- url: "/api/person/"
- test: # create entity
- name: "Get single person"
- url: "/api/person/1/"
- test: # create entity
- name: "Get single person"
- url: "/api/person/1/"
- method: 'DELETE'
- test: # create entity by PUT
- name: "Create/update person"
- url: "/api/person/1/"
- method: "PUT"
- body: '{"first_name": "Gaius","id": 1,"last_name": "Baltar","login": "gbaltar"}'
- headers: {'Content-Type': 'application/json'}
- test: # create entity by POST
- name: "Create person"
- url: "/api/person/"
- method: "POST"
- body: '{"first_name": "Willim","last_name": "Adama","login": "theadmiral"}'
- headers: {Content-Type: application/json}
機能テストと自動テストに SOAP UI を使用しました。 SOAP UIを使用すると、ボタンをクリックするだけでテストを実行できます。 Ted Youngによって作成された スプリングコントローラーテスト ページもあります。この記事を使用して、アプリケーションでRest単体テストを作成しました。
APIの自動テストを行う際の問題の1つは、テストスイートを実行する前に、多くのツールでAPIサーバーを稼働させる必要があることです。完全に自動化されたテスト環境でAPIを実行およびクエリできるユニットテストフレームワークがあることは、大きな利点になります。
Node.JS/Expressで実装されたAPIに適したオプションは、自動テストにmochaを使用することです。単体テストに加えて、APIに対する機能テストを簡単に記述でき、さまざまなテストスイートに分けられます。ローカルテスト環境でAPIサーバーを自動的に起動し、ローカルテストデータベースをセットアップできます。 make、npm、およびビルドサーバーを使用して、コードの一部がリポジトリに送信されるたびにテストスイート全体を実行する「make test」ターゲットとインクリメンタルビルドを作成できます。本当に気難しい開発者向けに、コードベースのどの部分がテストでカバーされているかどうかを示すNice HTMLコードカバレッジレポートも生成します。これがおもしろそうな場合は、ここに ブログ投稿 があり、すべての技術的な詳細を提供しています。
ノードを使用していない場合、言語のデファクトユニットテストフレームワーク(jUnit、cucumber/capybaraなど)は何でも-ローカルテスト環境でのサーバーの起動とHTTPクエリの実行のサポートを確認してください。大規模なプロジェクトの場合、自動化されたAPIテストと継続的な統合作業を行う努力は、すぐに成果を上げます。
お役に立てば幸いです。
Runscope は、一連のテストを使用してWeb APIを監視できるクラウドベースのサービスです。テストは、パラメータ化されたWebフックを介して、スケジュール、および/または実行できます。また、世界中のデータセンターからテストを実行して、グローバルクライアントベースに応答時間が許容できることを確認できます。
Runscopeの無料利用枠では、1か月あたり最大10,000件のリクエストがサポートされます。
免責事項:私はRunscopeの開発者支持者です。
Rest Assuredライブラリを使用することもできます。サンプルスクリプトを使用したデモについては、 http://artoftesting.com/automationTesting/restAPIAutomationGetRequest.html を参照してください。
REST Assuredに基づいて、安らかなサービスをテストするためのjave DSLに基づく多くの自動化ケースを実装しました。 https://code.google.com/p/rest-assured/
構文は簡単で、jsonとxmlをサポートしています。 https://code.google.com/p/rest-assured/wiki/Usage
その前に、SOAPUIを試してみましたが、無料版にいくつかの問題がありました。さらに、ケースはxmlファイルに含まれており、拡張や再利用が困難です。単に好きではありません
1分に1回までのAPIテスト自動化は、 theRightAPI を介して利用可能なサービスです。テストシナリオを作成し、実行します。これらのテストが期待どおりに実行されたら、スケジュールを設定できます。認証を必要とするシナリオでは、テストを「連鎖」することができます。たとえば、TwitterにOAuthリクエストを作成し、他のテストで使用できる共有トークンを作成するテストを作成できます。テストには、httpステータスコードを確認するための検証基準、またはjavascriptまたはスキーマ検証を使用した応答の詳細な検査を添付することもできます。テストがスケジュールされたら、特定のテストが検証に失敗するか、応答時間または応答サイズの確立された範囲外で動作しているとすぐにアラートを通知することができます。
TestNGおよびApache HTTPクラスを使用して独自のREST APIテストフレームワークを構築しました。Seleniumで2年間働いた後、この概念を開発しました。
Seleniumクラスの代わりにApache HTTPクラスを使用する必要があることを除いて、すべて同じです。
試してみてください。本当に可愛くて良いので、テストフレームワークを最大限にカスタマイズすることができます。