web-dev-qa-db-ja.com

外部APIテスト(ブラックボックス)を行う方法

ベンダーのAPIを使用していると仮定します。そのAPIが期待どおりに機能していることを確認するにはどうすればよいですか。

私の主な懸念は、ベンダーがコードへの変更をプッシュしてAPIを破壊することです。それらを継続的にテストするための何らかの自動ソフトウェアが必要です。これに対処するには?

14
user34401

短い答え:サードパーティベンダーのAPIのテストスイートが必要です。そのため、開発する必要があります。

他の誰かがあなたのためにそれをすることを期待しないでください、そして正しいテストを自動的に生成するための「魔法の弾丸」を期待しないでください。

さらに試すことができるいくつかのこと:

  • 新しいリリースごとに「重大な変更」のリストを提供するかどうかベンダーに尋ねる
  • aPIの互換性をどのように気にかけているかを尋ね、これがあなたにとって重要な機能であることを知らせます
  • aPIが特定のテストフック、ログ出力、または簡単にテストできなかったパーツのログ出力などを提供しているかどうかを確認します。
  • 重要なAPI呼び出しを独自のロギングコードでラップし、APIの入力および関連する出力をログファイルに書き込みます。これにより、予期しない事態が発生した場合のデバッグが容易になります。
  • aPI呼び出しにアサーションを追加して、事前条件と事後条件をチェックします。これにより、APIの新しいリリースがアプリケーション内で予期しない動作を示した場合、エラーメッセージによって早期に通知されます。

これらが機能するかどうかは、ベンダーが誰で、どのようなAPIを考えているかによって異なります。ファイルなどの検査可能な出力を生成するAPIは、API呼び出しが成功したかどうかを判断するためにモノの動作を観察する必要がある物理デバイスを制御するAPIよりもテストがはるかに簡単です。

10
Doc Brown

この問題には2つの方法があります...

アプリは実際のユーザートラフィックで本番稼働中です:

ライブトラフィックがあり、外部APIに依存している本番環境のアプリがある場合、外部APIが通知なしで変更を行う場合、できるだけ迅速に把握して適切なしきい値を設定する以外に選択肢はありません。

あなたは常にそれを考慮に入れるべきです:

  • 時間の経過に伴うAPIの変化
  • aPIベンダーにはバグがある可能性があります
  • aPIベンダーのテストキットにはバグがあるか、すべての本番APIの機能を完全にカバーしていない

あなたのアプリはインストールであり、計画されたバージョン/リリースがあります:

この場合、失敗するまでの猶予期間があります...ライブユーザーは、外部APIの破壊的な変更の影響をすぐに受けません。

私の意見では、これはより簡単な作業です。外部APIを呼び出すアプリケーションに実際のトランザクション/ http /リクエストを送信するテスト(完全なエンドツーエンドのテスト)を作成し、エラーがないことを確認します。実際のトランザクションを模擬するテストキットはありません。

このタスクが完了した後、これを24時間ごと、1分ごとなどに実行するように選択できます。

良い習慣:

  • すべてを自動化する
  • 外部APIのベンダーからすぐに連絡できる人がいる
  • ベンダーのテストすべてを盲目的に信頼しないでください
  • すばやく失敗する-サービスが外部APIに大きく依存している場合は、サービスをクラッシュさせないでください。速く失敗して適切なエラーメッセージを返す

ツール:

0
Nimrod007

ポスターの言い回しに基づいて、それはIMOをテストするだけではありません。 APIの単体テストを作成し、すべてが期待どおりに機能していることを確認したら、サードパーティのAPIを監視して、ユーザーが実行する前に問題をキャッチする必要があります。これがサードパーティAPIの本当のリスクです。これはコードではなく、APIで行われたテストの量や、いつ/変更されたかを制御することはできません。

(免責事項:ここで使用する製品名)soapUIを使用してAPIテストを記述した場合、それらのテストを運用モニターとしてAlertSiteで再利用して、APIが期待どおりに機能し続けることを確認できます。テストに失敗した場合、ユーザーがあなたに電話する前に警告が表示され、アプリが機能しないと苦情を言うことができます。

0
Lorinda Brandon

関心のある領域(使用する予定の機能)の学習テストを実装します。学習テストは、APIのパブリックコントラクトに対して開発者が作成した統合テストです。テストは、APIのソースコードが利用できる場合でも、内部実装の詳細に対して作成しないでください。この種の学習テストには2つの目的があります-

  1. サードパーティAPIの理解が劇的に向上します。
  2. テストは、主張された新しいバージョンが実際に下位互換性があるかどうかを確認するのに役立ちます。
0
Anand Patel