$30 off During Our Annual Pro Sale. View Details »

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

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. All rights reserved by Postman Inc
    Postmanを活用した
    効率的なAPIテスト自動化
    のススメ
    川崎庸市
    Postman株式会社

    View Slide

  2. テクノロジーエバンジェリスト
    Postman 株式会社
    川崎 庸市
    @yokawasa
    @postman_japan

    View Slide

  3. アジェンダ
    ● イントロ
    ○ APIテストの目的・種類
    ○ Postman概要
    ● 本題: Postmanを活用したテスト自動化
    ○ 変数とスクリプト
    ○ コレクションランナーによるコレクションAPI群のテスト実行
    ○ モニターによる複数エリアからの定期的なAPIテスト実行
    ○ モックサーバーによるテスト自動化の偽陽性の削除
    ○ CLIを活用したCI/CD経由のテスト自動実行

    View Slide

  4. APIのテスト
    どうしてますか?

    View Slide

  5. 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を組
    み合わせて利用
    品質を担保するには質の高いテストが
    必要となる

    View Slide

  6. テストの目的とは?
    テスト活動を通じて、プロダクトについ
    て最大限に学び、品質に影響をおよぼ
    しうる問題を発見すること
    引用: Mark Winteringham, Web APIテスト技法 ( "Testing Web APIs"の邦訳版)
    テストの目的と価値を明らかにするために役に立つテストのモデル

    View Slide

  7. テストの目的とは?
    テスト活動を通じて、プロダクトについ
    て最大限に学び、品質に影響をおよぼ
    しうる問題を発見すること
    引用: Mark Winteringham, Web APIテスト技法 ( "Testing Web APIs"の邦訳版)
    テストの目的と価値を明らかにするために役に立つテストのモデル
    テスト活動を通じてこの部分を最大化し、自動化により
    API動作確認や潜在的な品質低下の検知を効率的・継続的に行う

    View Slide

  8. 代表的なAPIテスト
    ● ユニットテスト
    ○ 個々のAPIエンドポイントの結果・機能を検証
    ● インテグレーションテスト
    ○ 複数コンポーネントが期待通りに連携し機能しているかを検証(ルーティング、バリデーションチェック、アプリロジック、データ層、外部サー
    ビスなどの連携)
    ● E2E テスト
    ○ 複数のエンドポイントや
    APIを含む主要なユーザージャーニー、シナリオの検証
    ● リグレッションテスト
    ○ アップデートや修正を実施した後も、期待どおりに動作するかを検証
    ● コントラクトテスト
    ○ リクエスト、レスポンス内容やフォーマットなど
    APIが仕様通りに実装されているかを検証
    ● パフォーマンステスト
    ○ 異なる負荷でシステムがどの程度の性能を発揮するかを検証

    View Slide

  9. API テストツール

    View Slide

  10. All rights reserved by Postman Inc
    Postmanとは?
    全世界2,500 万人以上のユーザーに使われている APIを
    構築して利用するためのAPIプラットフォームです。
    APIライフサイクルの各ステップを簡単に行えるようになり、
    APIの共有と開発コラボレーションを効率化できます。

    View Slide

  11. Postman アプリ
    ドキュメントを見ながら
    作業できる🚀
    整形されたレスポンスが見られる🚀
    パラメータを変えてすぐ試せる🚀
    エンドポイントを打ち込
    む必要がない🚀
    API のセットを整理し
    ておける🚀

    View Slide

  12. アプリだけじゃない
    豊富な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拡張機能例

    View Slide

  13. RESTだけじゃない
    利用可能なリクエスト

    View Slide

  14. API 提供側
    ライフサイクル
    API 利用側
    ライフサイクル
    単一プラットフォームで 提供者と利用者両方の
    APIライフサイクルをサポート
    テスト
    開発
    設計
    定義
    デプロイ
    デプロイ
    配布
    監視
    監視
    テスト
    評価
    統合
    発見
    セキュリ
    ティ

    View Slide

  15. All rights reserved by Postman Inc
    Postmanを活用したテスト自動化

    View Slide

  16. テスト自動化で押さえておくべきポイント
    ● 変数とスクリプトの活用
    ○ APIテスト記述
    ○ API実行順序制御
    ● コレクションランナーによるコレクションのAPIテスト群の実行
    ○ 手動実行
    ○ スケジュール実行
    ○ APIパフォーマンステスト
    ● モニターによる複数エリアからの定期的なAPIテスト実行
    ● モックサーバーによるテスト自動化の偽陽性の削除
    ● CLIを活用したCI/CD経由のテスト自動実行

    View Slide

  17. 変数
    変数として保存された値はPostman内で
    {{変数名}}表記で再利用できます
    ● 変数の種類
    ○ グローバル変数
    ○ コレクション変数
    ○ 環境変数(Environment)
    ● 変数スコープ
    ○ 変数の種類ごとに異なる
    ● 変数タイプ
    ○ default
    ○ secret (グローバルと環境変数のみ)
    ● 動的変数
    ○ {{$guid}}, {{$timestamp}}, {{$randomInt}},
    etc.
    変数スコープ
    https://learning.postman.com/docs/sending-requests/variables/
    同じ名前の変数が2つの異なるスコープで宣言されている場合、狭
    い方のスコープの変数に格納されている値が使用される

    View Slide

  18. 変数 使用例
    (1)リクエストURLの一部に対しての変数使用例 (3)クエリーパラメータの変数使用例
    (2)ヘッダーでの変数使用例
    (4)リクエストボディでの変数使用例

    View Slide

  19. 変数 補足記事
    https://is.gd/yBjVSU

    View Slide

  20. Postmanスクリプトとは?
    ● Postman サンドボックスで実行
    ● Built-inのJavaScript APIをpm、postmanオブジェクトを通じて利用可能
    ● Mochaベースのテストフレームワークを利用、AssertionライブラリとしてChaiが利用可能
    ● 豊富なスニペットとサンプルスクリプト集が用意されている
    ● 新機能: Postbot(AIを活用したスクリプト生成アシスタント)
    スクリプト
    Postbot
    スニペット
    ローコード
    支援機能

    View Slide

  21. 2種類のスクリプト実行ステージ
    PostmanではPre-requestとTestの2種類のステージでスクリプトの実行が可能
    Pre-request
    リクエスト実行前に実行
    Test
    レスポンス取得後に実行
    リクエスト
    送信
    レスポンス
    取得

    View Slide

  22. リクエスト単位のテスト実行
    実行
    各テストの実行結果が出力
    Testステージに5つのテストを記述

    View Slide

  23. コレクションランナーで複数リクエストのテスト実行
    実行
    実行結果詳細表示
    サマリー結果表示
    順番入れ替え可能
    実行方法選択
    手動 / スケジュール実行
    イテレーション数
    遅延秒数
    データファイル
    指定可能
    選択
    コレクションメニュー コレクションランナー実行方法設定

    View Slide

  24. コレクションランナー実行時にデータファイルの活用
    コレクションランナー実行時に外部データファイル(
    CSVまたはJSON)からPostman変数にデータ注
    入が可能。1イテレーションあたりファイル行数分のテストが実行される
    データファイル(CSV)
    コレクションランナー実行方法設定
    Postman変数設定

    View Slide

  25. コレクションランナーでテストのスケジュール実行
    ● コレクションごとにスケジュール設定
    ● テスト実行頻度
    ○ 5分毎〜設定可能。ただし無料プランは一時間毎〜
    ● テストはPostmanクラウド内から実行
    ● アラート通知設定
    ○ テストが失敗したらチームメンバーに通知可能
    ● リトライ、タイムアウトなど設定可能
    イテレーション数
    データファイル
    指定可能
    アラート通知設定
    スケジュール設定

    View Slide

  26. コレクションランナーでAPIパフォーマンステストの実行
    コレクションのAPI群に対して、手軽にクライアントから負荷をかけ、APIのパフォーマンスや性能フィード
    バックが得られる。大規模ピークシナリオ・テスト向けではない
    仮想ユーザー数
    テスト時間
    負荷のかけ方
    固定 / ランプアップ
    実行
    コレクションランナー実行方法設定

    View Slide

  27. モニターで複数エリアから定期的にAPIテスト実行
    ● コレクションごとにモニターを設定
    ● テスト実行頻度
    ○ 5分毎〜設定可能。ただし無料プランは一時間毎〜
    ● テスト実行リージョン選択
    ○ 複数リージョンからの APIテスト実行が可能
    ● スタティックIP設定
    ○ 要Professional / Enterpriseプラン
    ● アラート通知設定
    ○ メール通知、or インテグレーション設定 でslack、
    PagerDutyなど他チャンネルへの通知も可能
    ● リトライ、タイムアウトなど設定可能
    テスト実行リージョンの選択

    View Slide

  28. スクリプトと変数を活用したリクエスト実行順序制御
    スクリプトと変数を活用することで複数リクエストの実行順序を制御できます。これによりさまざまなパター
    ンのシナリオテストの実行が可能になります
    // グローバル変数設定
    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/
    petId orderId
    pm
    .environm
    ent.set pm
    .environm
    ent.get
    pm.environment.get
    pm.environment.set
    postman.setNextRequest(“Request C”)
    変数でリクエスト間で
    データを共有
    postman.setNextRequestで
    次実行するリクエストを指定

    View Slide

  29. シナリオテスト例 - リクエストのループ
    ある数分のデータセットが完了するまであるリクエストをループする例。ここではRequest Aで取得した
    ユーザー数分の位置情報が取れるまでRequest Bをループする
    Request A
    GET users
    Request B
    GET positions
    userList
    postman.setNextRequest(“Request B”)
    index
    Request C
    GET weather
    Lat
    Lon
    サンプルコレクション - Using Request Workflows

    View Slide

  30. モックサーバーを活用したテスト自動化の偽陽性の削減
    テストの自動化において厄介なものの1つに偽陽性(false positive)がある。偽陽性とは失敗すべきでない
    ときに失敗してしまうことを指し、偽陽性のあるテストのことをFlakyテストと呼ぶ。
    テスト自動化において偽陽性が発生しうるケースに外部システムとの連携がある。例えば、外部システムの
    障害や期待しない挙動が頻繁に発生する場合、その度にテストはエラーになる。このようなケースにおいて、
    外部システムをモックにすることはとても有効である。
    Register API
    外部サービス
    認証 API
    POST /regist
    Flaky
    この部分にモックに変える
    参考: Mark Winteringham, Web APIテスト技法 ( "Testing Web APIs"の邦訳版)
    データ処理

    View Slide

  31. モックサーバーとは?
    実際のサーバーと同じような振る舞いをする架空のサーバのこと。Postmanではモックサーバーはクラウ
    ドに作成され専用URLが発行される(デフォルトパブリックでプライベート設定可能)
    ● あるモックサーバーは必ずどれかのコレクションに紐
    付けられる
    ● コレクションに保存された Examplesデータにもとづき
    モックレスポンスを返却する
    ● モックサーバーはリクエスト情報(パス、メソッドなど)を
    元にマッチングアルゴリズムにもとづき返却する
    Examplesデータを選定してレスポンスを返却する
    マッチングアルゴリズムの詳細 - How the matching algorithm works
    サンプルモックサーバー URL
    https://27df2756-20d7-4f61-bb09-xxxxyyyzzz.mock.pstmn.io

    View Slide

  32. CLIを活用したCI/CD経由のテスト自動実行
    コード
    リポジトリ
    ビルド
    ユニット
    テスト
    サービス
    E2E
    テスト
    デプロイ
    リリース
    CI CD
    繰り返し

    View Slide

  33. 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
    補足

    View Slide

  34. Postman CLIからのコレクションテスト実行
    CI/CD - GitHub Actionsサンプル設定例
    Postman CLIからの
    コレクションテスト実行
    例が表示
    CI/CDパイプラインか
    らの実行例
    コレクションランナー実行方法設定
    CLIから実行を選択

    View Slide

  35. 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サーバに自動的に保存され後で閲覧が可能

    View Slide

  36. CI/CD デモ
    GitHub Actions経由のPostmanテスト自動実行
    https://github.com/yokawasa/postman-testing-cicd-sandbox

    View Slide

  37. ありがとうございました

    View Slide