RESTApiの自動テスト[クローズ]


84

RESTAPIの自動テストスイートを作成したいと思います。新しいサービスを完了する際に、以前に作成したすべてのサービスが期待どおりに機能していることを確認したいと思います。これを達成するために使用するのに最適なツールに関する提案はありますか?一度に1つのサービスをテストできるApigeeのようなツールが存在することは知っていますが、ボタンをクリックするだけですべてのサービスをテストする方法が必要です。


2
vRESTを試してみることができます。ユニットテストとモックの両方があります。
Jangid 2014年

1
JMeterはRESTAPIテストに最適なツールです-JMeterを使用してRESTAPIをテストするための詳細な手順を探している人のためにこのコメントを追加します。 testautomationguru.com/how-to-test-rest-api-using-jmeter
vins

FRISBYに勝るものはありません-RESTAPIテストに最適で最も強力なツール
Piyush Chordia 2016

2
JMeterは、REST APIの基本的な機能テストのためだけに、ひどいUIを持っていることは言うまでもなく、やり過ぎです。これは、パフォーマンス/負荷テストを目的としています。
ケビンM

2
JMeterは負荷テストに重点を置いています。おそらく、12の優れたWebサービステストツールをチェックして、最適なオプションを見つける必要があります。このリストの一部のツール(SOAPUIHttpMasterなど)は、RESTAPIエンドポイントに対してかなり適切な自動化サポートを備えています。
Joxi 2017

回答:


36

私の仕事では、最近、Javaで記述されたいくつかのテストスイートをまとめて、構築したいくつかのRESTfulAPIをテストしました。当社のサービスは、依存する他のRESTfulAPIを呼び出すことができます。2つのスイートに分割します。


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

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

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

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

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



25

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();

私はこの記事に投票しました。私はそれを日常業務で使用しましたが、今ではすべてのフリスビーが投げ回されています。私のブログでほぼ同じことを共有しました:cubicrace.com/2016/04/frisby-rest-api-automation-framework.html
Piyush Chordia 2016

2
フリスビーは死んでいるgithub.com/vlucas/frisby/issues/347–
Ernst Ernst

Frisbyは使い始めるのが簡単で、高度なAPIフローでさえテストするのに十分強力です。残念ながら、レポートの出力には多くの要望があります。APIが失敗したときのエラーメッセージは、ほとんど役に立たなくなっています。手動でテストを実行したときの出力が非常に良好であることを考えると、これは奇妙なことです。それは残念だ。
Kasper Holdum 2016

1
私のように誰かがこれにつまずいた場合、上記のコメントのように、フリスビーはまだ死んでいないようです。gitには最近の更新があります。github.com/vlucas/frisby
S.Huston

21

この理由から、同僚の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}

認証を使用して、github.com / svanoort / pyresttest / blob / master /quickstart.mdから参照される各テストに以下のヘッダーを付けて以下を追加します。--auth_username: "foobar" --auth_password: "secret" --expected_status:[200]
agfe2 2017年

2

機能テストと自動テストにはSOAPUIを使用しました。SOAP UIを使用すると、ボタンをクリックするだけでテストを実行できます。TedYoungによって作成されたスプリングコントローラーのテストページもあります。この記事を使用して、アプリケーションでRESTユニットテストを作成しました。



2

APIの自動テストを実行する際の問題の1つは、テストスイートを実行する前に、多くのツールでAPIサーバーを稼働させる必要があることです。完全に自動化されたテスト環境でAPIを実行およびクエリできる単体テストフレームワークがあることは、真の利点になる可能性があります。

Node.JS / Expressで実装されたAPIに適したオプションは、自動テストにmochaを使用することです。単体テストに加えて、APIに対する機能テストを簡単に記述でき、さまざまなテストスイートに分けられます。ローカルテスト環境でAPIサーバーを自動的に起動し、ローカルテストデータベースをセットアップできます。make、npm、およびビルドサーバーを使用して、「make test」ターゲットと、コードの一部がリポジトリに送信されるたびにテストスイート全体を実行するインクリメンタルビルドを作成できます。本当に気難しい開発者にとっては、コードベースのどの部分がテストでカバーされているかを示す素晴らしいHTMLコードカバレッジレポートを生成することさえあります。これが面白そうな場合は、ここにすべての技術的な詳細を提供するブログ投稿があります。

ノードを使用していない場合は、その言語の事実上の単体テストフレームワーク(jUnit、cucumber / capybaraなど)が何であれ、ローカルテスト環境でサーバーを起動してHTTPクエリを実行するためのサポートを確認してください。大規模なプロジェクトの場合、自動化されたAPIテストと継続的な統合を機能させるための努力はすぐに報われます。

お役に立てば幸いです。


2

Runscopeは、一連のテストを使用してWebAPIを監視できるクラウドベースのサービスです。テストは、パラメーター化されたWebフックを介して、スケジュールおよび/または実行できます。世界中のデータセンターからテストを実行して、応答時間がグローバルなクライアントベースに受け入れられることを確認することもできます。

Runscopeの無料利用枠は、1か月あたり最大10,000件のリクエストをサポートします。

免責事項:私はRunscopeの開発者擁護者です。


1

安らかなサービスをテストするためのjaveDSLであるRESTAssuredに基づいて多くの自動化ケースを実装しました。 https://code.google.com/p/rest-assured/

構文は簡単で、jsonとxmlをサポートしています。 https://code.google.com/p/rest-assured/wiki/Usage

その前に、SOAPUIを試しましたが、無料バージョンでいくつか問題がありました。さらに、ケースは拡張して再利用するのが難しいxmlファイルにあり、単に私は好きではありません



0

1分に1回までのAPIテスト自動化は、RightAPIを通じて利用できるサービスです。テストシナリオを作成し、実行します。これらのテストが期待どおりに実行されたら、スケジュールを設定できます。認証が必要なシナリオでは、テストを「連鎖」させることができます。たとえば、TwitterにOAuthリクエストを送信し、他のテストで使用できる共有トークンを作成するテストを作成できます。テストには、httpステータスコードを確認するための検証基準を添付することも、JavaScriptまたはスキーマ検証を使用して応答を詳細に検査することもできます。テストがスケジュールされると、特定のテストが検証に失敗した場合、または応答時間または応答サイズの確立された範囲外で動作している場合に、アラートで通知することができます。


リンクが壊れているようです。
ラオ

0

TestNGクラスとApacheHTTPクラスを使用して独自のRESTAPIテストフレームワークを構築しました。Seleniumで2年間働いた後、この概念を開発しました。

Seleniumクラスの代わりにApacheHTTPクラスを使用する必要があることを除いて、すべて同じです。

試してみてください。本当に可愛くて良いです。テストフレームワークを最大限にカスタマイズするためのすべての力があります。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.