RESTAPIの自動テストスイートを作成したいと思います。新しいサービスを完了する際に、以前に作成したすべてのサービスが期待どおりに機能していることを確認したいと思います。これを達成するために使用するのに最適なツールに関する提案はありますか?一度に1つのサービスをテストできるApigeeのようなツールが存在することは知っていますが、ボタンをクリックするだけですべてのサービスをテストする方法が必要です。
RESTAPIの自動テストスイートを作成したいと思います。新しいサービスを完了する際に、以前に作成したすべてのサービスが期待どおりに機能していることを確認したいと思います。これを達成するために使用するのに最適なツールに関する提案はありますか?一度に1つのサービスをテストできるApigeeのようなツールが存在することは知っていますが、ボタンをクリックするだけですべてのサービスをテストする方法が必要です。
回答:
私の仕事では、最近、Javaで記述されたいくつかのテストスイートをまとめて、構築したいくつかのRESTfulAPIをテストしました。当社のサービスは、依存する他のRESTfulAPIを呼び出すことができます。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}
機能テストと自動テストにはSOAPUIを使用しました。SOAP UIを使用すると、ボタンをクリックするだけでテストを実行できます。TedYoungによって作成されたスプリングコントローラーのテストページもあります。この記事を使用して、アプリケーションでRESTユニットテストを作成しました。
APIの自動テストを実行する際の問題の1つは、テストスイートを実行する前に、多くのツールでAPIサーバーを稼働させる必要があることです。完全に自動化されたテスト環境でAPIを実行およびクエリできる単体テストフレームワークがあることは、真の利点になる可能性があります。
Node.JS / Expressで実装されたAPIに適したオプションは、自動テストにmochaを使用することです。単体テストに加えて、APIに対する機能テストを簡単に記述でき、さまざまなテストスイートに分けられます。ローカルテスト環境でAPIサーバーを自動的に起動し、ローカルテストデータベースをセットアップできます。make、npm、およびビルドサーバーを使用して、「make test」ターゲットと、コードの一部がリポジトリに送信されるたびにテストスイート全体を実行するインクリメンタルビルドを作成できます。本当に気難しい開発者にとっては、コードベースのどの部分がテストでカバーされているかを示す素晴らしいHTMLコードカバレッジレポートを生成することさえあります。これが面白そうな場合は、ここにすべての技術的な詳細を提供するブログ投稿があります。
ノードを使用していない場合は、その言語の事実上の単体テストフレームワーク(jUnit、cucumber / capybaraなど)が何であれ、ローカルテスト環境でサーバーを起動してHTTPクエリを実行するためのサポートを確認してください。大規模なプロジェクトの場合、自動化されたAPIテストと継続的な統合を機能させるための努力はすぐに報われます。
お役に立てば幸いです。
安らかなサービスをテストするためのjaveDSLであるRESTAssuredに基づいて多くの自動化ケースを実装しました。 https://code.google.com/p/rest-assured/
構文は簡単で、jsonとxmlをサポートしています。 https://code.google.com/p/rest-assured/wiki/Usage
その前に、SOAPUIを試しましたが、無料バージョンでいくつか問題がありました。さらに、ケースは拡張して再利用するのが難しいxmlファイルにあり、単に私は好きではありません
RestAssuredライブラリを使用することもできます。サンプルスクリプトを使用したデモについては、http://artoftesting.com/automationTesting/restAPIAutomationGetRequest.htmlを参照してください。
1分に1回までのAPIテスト自動化は、RightAPIを通じて利用できるサービスです。テストシナリオを作成し、実行します。これらのテストが期待どおりに実行されたら、スケジュールを設定できます。認証が必要なシナリオでは、テストを「連鎖」させることができます。たとえば、TwitterにOAuthリクエストを送信し、他のテストで使用できる共有トークンを作成するテストを作成できます。テストには、httpステータスコードを確認するための検証基準を添付することも、JavaScriptまたはスキーマ検証を使用して応答を詳細に検査することもできます。テストがスケジュールされると、特定のテストが検証に失敗した場合、または応答時間または応答サイズの確立された範囲外で動作している場合に、アラートで通知することができます。
TestNGクラスとApacheHTTPクラスを使用して独自のRESTAPIテストフレームワークを構築しました。Seleniumで2年間働いた後、この概念を開発しました。
Seleniumクラスの代わりにApacheHTTPクラスを使用する必要があることを除いて、すべて同じです。
試してみてください。本当に可愛くて良いです。テストフレームワークを最大限にカスタマイズするためのすべての力があります。