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

徹底解説! PostmanでAPIパフォーマンステスト / API performance ...

徹底解説! PostmanでAPIパフォーマンステスト / API performance testing with Postman

Presentation Slides for Postman Tokyo Meetup 2023.10
Session title: 徹底解説! PostmanでAPIパフォーマンステスト / API performance testing with Postman
Date: 2023/10/10

Yoichi Kawasaki

October 11, 2023
Tweet

More Decks by Yoichi Kawasaki

Other Decks in Technology

Transcript

  1. 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を組 み合わせて利用
  2. 品質担保のためには質の高いテストが必要 UI Tests E2E Regression Tests Smoke Tests Integration Tests

    Component Tests Unit Tests コスト 実行時間 不確実要素 テスト数 テストのピラミッド • UIテスト • E2Eテスト • リグレッションテスト • スモークテスト • インテグレーションテスト • コントラクトテスト • コンポーネントテスト • ユニットテスト • セキュリティテスト • ユーザビリティテスト • パフォーマンステスト 機能要件テスト 非機能要件テスト
  3. "Testing shows the presence, not the absence of bugs." Edsger

    W. Dijkstra at NATO Software Engineering Conference 1969 (意訳)テストによってバグの存在が明らかになる つまり、網羅性のある質の高いテスト戦略が品質保証の鍵となる
  4. パフォーマンスはユーザー体験である ソフトウェアやウェブアプリケーションのパフォーマンスはユーザーエクスペリエンスに直結してい るとても重要な要素 Web performance is user experience. As you

    design and develop a new site, you’ll consider many components of its user experience: layout, hierarchy, intuitiveness, ease of use, and more. Your site’s experience determines how much your audience trusts your brand, returns to your site, and shares it with others. Designing for performance, by Lara Callender Hogan, Dec 2014 https://www.oreilly.com/library/view/designing-for-performance/9781491903704/ https://designingforperformance.com/index.html
  5. パフォーマンステストとは? パフォーマンステストは一般に、特定の作業負荷のもとで、システムが応答性と安定性の面でどのように 動作するかを判断するために実施されるテストである。また、スケーラビリティ、信頼性、リソース使用量な ど、システムの他の品質属性を調査、測定、検証、確認することもある Performance Testing Load Testing Stress Testing

    Breakpoint Testing Spike Testing Soak (Endurance) Testing Configuration Testing Internet Testing 負荷テスト: 特定の負荷下でのシステム動作 理解のた め実施。ボトルネック特定に役立つ 予想最大負荷を超えた状況下でシステムが機能する かをテスト。システムの上限理解のために実施 負荷を徐々に増加させてシステムの限界を特定 劇的な負荷の変化に対処できているかテスト 継続的な負荷に耐えられるかどうかをテスト 構成変更が性能や振る舞いに与える影響をテスト。例 : 負 荷分散方法、H/W組合せ、設定値変更 グローバルアプリに 各ターゲット大陸から膨大な負荷 をかけるテスト Wikipedia: https://en.wikipedia.org/wiki/Software_performance_testing
  6. パフォーマンスに関する取り組みはできるだけ早く 他のテスト同様にライフサイクルにおいてできるだけ早い段階(シフトレフト) から 継続的 に実施することが重要。Test frequently, Fail early Define Design

    Develop Test Deploy Observe Distribute • パフォーマンス要件 • アーキテクチャ分析 • メトリクス設計・開発 • パフォーマンス監視 • ボトルネック検知・分析 • フィードバック check check check check check 後ろのフェーズになればなるほど改修コストが大きい check
  7. Postmanのテスト関連機能・コンポーネント • 変数・スクリプト ◦ 変数とスクリプト を活用してAPIリクエストごとの自動処理やテストの記述可能 ◦ リクエスト送信前(pre-request)とレスポンス取得後(test)の2フェーズで実行可能 • コレクションランナー

    ◦ コレクションやフォルダーのAPI群のテストをまとめて実行するコンポーネント ◦ 実行可能テストタイプ ▪ Functional : 機能テスト(手動 or スケジュール実行) ▪ Performance : パフォーマンステスト • モックサーバー ◦ モック用コンポーネント • モニター ◦ 監視・観測用コンポーネント。スケジュール実行でコレクションテストを実行し結果を可視化 • Postman CLI / Newman ◦ コマンドライン・インターフェース。シェルやプログラム実行、CI/CDなど継続的自動実行用
  8. パフォーマンステストのセットアップ 仮想ユーザー数 テスト時間 負荷のかけ方 固定 / ランプアップ ( 1 )

    コレクションランナー立ち上げ ( 2 ) パフォーマンステストの設定 対象リクエスト と実行順番を選択
  9. リアルタイムメトリクス表示 メトリクスのリアルタイム描画 - スループット (req/sec) - レイテンシー (ms) - エラー率

    (%) リクエストごとのサマリー一覧 リクエストごとの フィルター表示可能 レイテンシーの 種類切り替え
  10. Postmanパフォーマンステストの制約、注意点 • Postmanデスクトップアプリからのみ実行可能 ◦ CLIからの実行ができず、CI/CDパイプラインなどからの実行が難しい • プランごとの仮想ユーザー数の制限 ◦ Postmanプランごとに使用できる仮想ユーザー数に制限がある。無料プランの場合は最大 100

    仮想ユーザー。それ以上の仮想ユーザー数は有料プランへのアップグレードが必要 • シュミレーション可能な仮想ユーザー数に影響を与える要素 ◦ 実行するクライアントマシンのシステムリソース(CPU、メモリーなど) ▪ マシン性能と仮想ユーザー数の目安については こちら ◦ テストで使用するコレクションの内容(複雑度) ▪ 各APIリクエストのpre-requestやtestスクリプトなど 2023.10時点の制約
  11. デモ ユーザー情報CRUD APIの簡易シナリオに対して Postmanパフォーマンステストを実行し性能やボトルネッ クを確認 デモ環境 - アプリフレームワーク: Python Flask

    - データベース: MySQL - デプロイメント環境: ローカルKubernetes (KIND) https://github.com/yokawasa/users-api-flask-mysql