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


14

ベンダーのAPIを使用していると仮定して、APIが期待どおりに機能することを確認する方法は?

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


言語によっては、役立つツールがあるかもしれません(C#ライブラリ/ APIのPexを考えています)。
スティーブンエバーズ

回答:


10

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

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

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

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

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


私は完全に同意しますが、質問者はユニットをテストした経験がなく、ユニットを使った作業のスキームを知らないようです。つまり、重要なポイントを見つけ、テストユニットを記述し、すべてのテストを実行し、デバッグし、デバッグ中に新しい重要なポイントを見つけ、新しいユニットを記述し、APIが変更されるたびに最後の4ステップを繰り返します。
ガンヌス

@Gangnus:OPの私見では、ユニットテストの以前の経験については何も言われませんでした。彼がそれに関して問題を抱えているなら、私は彼がより具体的な質問をすることを知っていると確信しています。さらに、ここでのトピックは「単体テスト」ではなく、「自動化された統合テスト」です。それらは通常、たとえばTDDスタイルの方法での単体テストとは異なるスキームを必要とします。
ドックブラウン

はい、彼はそれを言っていませんでした。しかし、テストユニットについて言及せずに「APIが期待どおりに機能することを確認する方法」を尋ねた場合、「私には思える」と彼はそれらを知りません。自動化された統合テストに関して、彼はそれらをより高い確率で知りません、彼は単に「ある種の自動ソフトウェア」に言及しました。あなたは、あなたと同じ知識を人々から待っていますが、これらのテーマでは、99%のプログラマー(私を含む)がはるかに少ないことを知っています。そして、90%はるかにはるかに少ない。
ガンヌス

0

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

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


0

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

  1. これにより、サードパーティAPIの理解が大幅に向上します。
  2. テストは、要求された新しいバージョンが実際に後方互換性があるかどうかを確認するのに役立ちます。

0

この問題には2つのアプローチがあります...

アプリは実際のユーザートラフィックで本番環境で稼働しています。

ライブトラフィックがあり、外部apiに依存する運用環境にアプリがある場合、外部apiが通知せずに変更を行ったときにできるだけ早く知るために、きめ細かく監視し、適切なしきい値を設定する以外に選択肢はありません。

次のことを常に考慮する必要があります。

  • 経時的なapiの変化
  • APIベンダーにバグがある可能性があります
  • APIベンダーのテストキットにはバグがある場合や、すべての実稼働APIの機能を完全にカバーしていない場合があります

アプリはインストール済みで、バージョン/リリースが計画されています:

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

私の意見では、これはより簡単な作業です。外部APIを呼び出すアプリケーションへの実際のトランザクション/ http /リクエストを行うテスト(完全なエンドツーエンドテスト)を記述し、障害がないことを確認します。テストキットやモックトランザクションはありません。

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

良い習慣:

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

ツール:

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