Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Postmanを活用した効率的なAPIテスト自動化のススメ / Efficient API T...

Postmanを活用した効率的なAPIテスト自動化のススメ / Efficient API Test Automation Using Postman

Presentation Slides for Postman Tokyo Meetup 2023.8
Session title: Postmanを活用した効率的なAPIテスト自動化のススメ / Efficient API Test Automation Using Postman
Date: 2023/08/08

Yoichi Kawasaki

August 08, 2023
Tweet

More Decks by Yoichi Kawasaki

Other Decks in Technology

Transcript

  1. アジェンダ • イントロ ◦ APIテストの目的・種類 ◦ Postman概要 • 本題: Postmanを活用したテスト自動化

    ◦ 変数とスクリプト ◦ コレクションランナーによるコレクションAPI群のテスト実行 ◦ モニターによる複数エリアからの定期的なAPIテスト実行 ◦ モックサーバーによるテスト自動化の偽陽性の削除 ◦ CLIを活用したCI/CD経由のテスト自動実行
  2. APIシステムは複雑 UI JavaScript Gateway Item API Search API Document API

    Item Service Search Service Document Service Item DB Search DB Document Storage UI/JS API DB Externa Servicel APIシステムは複数要素で構成 • 複数レイヤ(層)で構成 • 複数コンポーネントで構成 • 外部サービスも利用 • エンドユーザーは複数のAPIを組 み合わせて利用 品質を担保するには質の高いテストが 必要となる
  3. テストの目的とは? テスト活動を通じて、プロダクトについ て最大限に学び、品質に影響をおよぼ しうる問題を発見すること 引用: Mark Winteringham, Web APIテスト技法 (

    "Testing Web APIs"の邦訳版) テストの目的と価値を明らかにするために役に立つテストのモデル テスト活動を通じてこの部分を最大化し、自動化により API動作確認や潜在的な品質低下の検知を効率的・継続的に行う
  4. 代表的なAPIテスト • ユニットテスト ◦ 個々のAPIエンドポイントの結果・機能を検証 • インテグレーションテスト ◦ 複数コンポーネントが期待通りに連携し機能しているかを検証(ルーティング、バリデーションチェック、アプリロジック、データ層、外部サー ビスなどの連携)

    • E2E テスト ◦ 複数のエンドポイントや APIを含む主要なユーザージャーニー、シナリオの検証 • リグレッションテスト ◦ アップデートや修正を実施した後も、期待どおりに動作するかを検証 • コントラクトテスト ◦ リクエスト、レスポンス内容やフォーマットなど APIが仕様通りに実装されているかを検証 • パフォーマンステスト ◦ 異なる負荷でシステムがどの程度の性能を発揮するかを検証
  5. All rights reserved by Postman Inc Postmanとは? 全世界2,500 万人以上のユーザーに使われている APIを

    構築して利用するためのAPIプラットフォームです。 APIライフサイクルの各ステップを簡単に行えるようになり、 APIの共有と開発コラボレーションを効率化できます。
  6. アプリだけじゃない 豊富なPostman利用オプション • Postmanアプリ ◦ Windows、macOS、Linux上のデスクトップアプリ • Postmanウェブ ◦ ウェブブラウザから利用できる

    • Postman CLI、Newman ◦ コマンドライン(CLI)。自動化、CI/CDなどで利用可能 • Postman VS Code拡張機能 ◦ VS Code拡張としてPostmanの機能が利用可能 • Postman API ◦ Postman自身のAPを活用して他システムとの連携可能 • Postman Collection SDK ◦ Node.jsモジュール。コレクション管理が可能 • インテーグレーション機能 ◦ さまざまなプラットフォームとの統合サポート Postman CLI例 Postman VS Code拡張機能例
  7. テスト自動化で押さえておくべきポイント • 変数とスクリプトの活用 ◦ APIテスト記述 ◦ API実行順序制御 • コレクションランナーによるコレクションのAPIテスト群の実行 ◦

    手動実行 ◦ スケジュール実行 ◦ APIパフォーマンステスト • モニターによる複数エリアからの定期的なAPIテスト実行 • モックサーバーによるテスト自動化の偽陽性の削除 • CLIを活用したCI/CD経由のテスト自動実行
  8. 変数 変数として保存された値はPostman内で {{変数名}}表記で再利用できます • 変数の種類 ◦ グローバル変数 ◦ コレクション変数 ◦

    環境変数(Environment) • 変数スコープ ◦ 変数の種類ごとに異なる • 変数タイプ ◦ default ◦ secret (グローバルと環境変数のみ) • 動的変数 ◦ {{$guid}}, {{$timestamp}}, {{$randomInt}}, etc. 変数スコープ https://learning.postman.com/docs/sending-requests/variables/ 同じ名前の変数が2つの異なるスコープで宣言されている場合、狭 い方のスコープの変数に格納されている値が使用される
  9. Postmanスクリプトとは? • Postman サンドボックスで実行 • Built-inのJavaScript APIをpm、postmanオブジェクトを通じて利用可能 • Mochaベースのテストフレームワークを利用、AssertionライブラリとしてChaiが利用可能 •

    豊富なスニペットとサンプルスクリプト集が用意されている • 新機能: Postbot(AIを活用したスクリプト生成アシスタント) スクリプト Postbot スニペット ローコード 支援機能
  10. コレクションランナーでテストのスケジュール実行 • コレクションごとにスケジュール設定 • テスト実行頻度 ◦ 5分毎〜設定可能。ただし無料プランは一時間毎〜 • テストはPostmanクラウド内から実行 •

    アラート通知設定 ◦ テストが失敗したらチームメンバーに通知可能 • リトライ、タイムアウトなど設定可能 イテレーション数 データファイル 指定可能 アラート通知設定 スケジュール設定
  11. モニターで複数エリアから定期的にAPIテスト実行 • コレクションごとにモニターを設定 • テスト実行頻度 ◦ 5分毎〜設定可能。ただし無料プランは一時間毎〜 • テスト実行リージョン選択 ◦

    複数リージョンからの APIテスト実行が可能 • スタティックIP設定 ◦ 要Professional / Enterpriseプラン • アラート通知設定 ◦ メール通知、or インテグレーション設定 でslack、 PagerDutyなど他チャンネルへの通知も可能 • リトライ、タイムアウトなど設定可能 テスト実行リージョンの選択
  12. スクリプトと変数を活用したリクエスト実行順序制御 スクリプトと変数を活用することで複数リクエストの実行順序を制御できます。これによりさまざまなパター ンのシナリオテストの実行が可能になります // グローバル変数設定 pm.globals.set("variable_key", "variable_value"); pm.globals.get("variable_key"); // コレクション変数設定

    pm.collectionVariables.set("variable_key", "variable_value"); pm.collectionVariables.get("variable_key"); // 選択している環境への環境変数設定 pm.environment.set("variable_key", "variable_value"); pm.environment.get("variable_key"); postman.setNextRequest("request_name") 変数操作用関数(Get/Set) 次に実行するリクエストを決定する関数 Request A POST /pet Request B POST /order Request C GET /pet/<id> petId orderId pm .environm ent.set pm .environm ent.get pm.environment.get pm.environment.set postman.setNextRequest(“Request C”) 変数でリクエスト間で データを共有 postman.setNextRequestで 次実行するリクエストを指定
  13. モックサーバーとは? 実際のサーバーと同じような振る舞いをする架空のサーバのこと。Postmanではモックサーバーはクラウ ドに作成され専用URLが発行される(デフォルトパブリックでプライベート設定可能) • あるモックサーバーは必ずどれかのコレクションに紐 付けられる • コレクションに保存された Examplesデータにもとづき モックレスポンスを返却する

    • モックサーバーはリクエスト情報(パス、メソッドなど)を 元にマッチングアルゴリズムにもとづき返却する Examplesデータを選定してレスポンスを返却する マッチングアルゴリズムの詳細 - How the matching algorithm works サンプルモックサーバー URL https://27df2756-20d7-4f61-bb09-xxxxyyyzzz.mock.pstmn.io
  14. 2つのCLI - Postman CLIとNewman Postmanで利用可能な2種類のコマンドラインインターフェースとその違いについて。実行コードの可視性 (中身の把握)要件など特別な理由がない限りPostman CLIの利用を推奨 Postman CLI (Postmanサポート)

    Newman (OSS/コミュニティサポート) - Postmanによりサポート - ダウンロード可能パッケージとして配布 - コレクション実行結果をデフォルトでPostman に送信 - ライブラリとしては利用できない - Postmanにサインイン可能で、アカウントに紐 づいたPostman管理アセット情報を事前エク スポートすることなく利用可能(ただし、 Postmanサーバにアクセスが必要) - スタンドアロン実行も可能 - API Linting(optional)が実行できる - OSSとしてコミュニティサポート - npmパッケージとして配布 - ライブラリとして利用可能 - Postmanにサインインできない。よって、CLI から利用するコレクション情報は事前にエクス ポートしておく必要がある https://learning.postman.com/docs/postman-cli/postman-cli-overview/#comparing-the-postman-cli-and-newman 補足
  15. Postman CLIからのコレクションテスト実行 CI/CD - GitHub Actionsサンプル設定例 Postman CLIからの コレクションテスト実行 例が表示

    CI/CDパイプラインか らの実行例 コレクションランナー実行方法設定 CLIから実行を選択
  16. Postman CLIからのコレクションテスト実行例 # Postmanにログイン postman login --with-api-key {{postman-api-key}} # コレクションテスト実行

    # -e で環境 (Environment) の指定が可能 postman collection run {{collection-ID}} \ -e {{environment-ID}} コレクションテスト実行コマンド例 Postman CLIでのcollection run実行イメージ 実行結果の詳細は Postmanサーバに自動的に保存され後で閲覧が可能