11
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

セゾンテクノロジーAdvent Calendar 2024

Day 5

Apidogを使ってテストシナリオを作成する

Last updated at Posted at 2024-12-04

背景

業務でApidogについて調査することがありました。ネットで調べていましたが、公式のドキュメントはあるものの、Apidogについてのナレッジが少ないと感じたため、共有として執筆します。今回はテストシナリオを作成する方法を基本と応用に分けて説明しようと思います。

アジェンダ

・Apidogとは
・基礎的なテストシナリオの作成
・応用的なテストシナリオの作成
・最後に

Apidogとは

概要

Apidogは、APIドキュメント、APIのデバッグ、APIのMock、及びAPIの自動テストを統合したコラボレーションプラットフォームです。 Postman + Swagger + Mock + JMeter の機能を取り入れて、同一のシステムで共通のデータを使用して、異なるシステム間のデータ同期問題の解決に取り組んでいます。(公式から引用)

基礎的なテストシナリオの作成

前提

今回はシンプルなHTTPリクエストとレスポンスを返してくれるサービスhttps://httpbin.org/
を使って説明してみようと思います。このAPIについての説明はこちらを読んでください。

手順

①APIを定義
②APIケースを作成
③シナリオを作成
④シナリオ実行

①APIの定義

テストで使用するAPIを定義します。
API>新しいAPIを選択
API作成.png
エンドポイントの設定、APIの説明、Request・Responseの型を入力すれば完了です。
API設定.png

②APIケースの作成

APIケース(APIテストケース)を定義します。
試しにレスポンスのparam1の値が、ABCかどうか検証したいと思います。
テスト>新しいAPI Caseを選択し、ケース名を入力します。
画像3.png
後処理のタブ>後処理を追加>アサーションを選択し、各設定を行います。
JSONPath式の入力欄内のボタンを押すと、JSONPath 抽出ツールが出てくるため、対象の(今回ではparam1)を選択するとPathが出てきます。もし、JSONPath 抽出ツール内にResponseのJSONが出てこない場合は一度APIリクエストすると、抽出ツール内にレスポンスの値が読み込まれるため実施してみると良いです。
画像13131.png

③シナリオを作成

自動テストタブ>テストシナリオを新規作成を押下し各設定を行います。
画像5.png
ステップを追加>APICaseからインポートする>②で作成したAPIケースを選択(param2をテストするAPIケースを作成しておきました。)するとシナリオが出来上がります。
画像6.png
以下、作成したシナリオです。
テストシナリオ.png

④シナリオ実行

シナリオを実行すると、レポートが作成され、テストの結果が合格か不合格か確認できます。
レポート.png
それぞれ詳細も見れ、リクエスト・レスポンス情報、アサーション結果を確認できます。
画像11111.png

応用的なテストシナリオの作成

要件

期待値のJSONの基本要素数を取得して、各要素ごとにレスポンスの値(実測値)と期待値の比較を行います。
具体的にいうと以下の期待値の型があった場合、JSONの要素、args,headers,origin,urlの値をレスポンスの値と比較するテストです。この場合、基本要素数は4なので、4回アサーションが生成されるイメージです。これをfor文を使って実装します。
{
  "args": {
    "param1": "ABC",
    "param2": "DEF",
  },
  "headers": {
    "Accept": "/",
    "Accept-Encoding": "gzip",
    "Content-Type": "application/json",
    "Host": "httpbin.org",
    "User-Agent": "Apidog/1.0.0 (https://apidog.com)",
    "X-Amzn-Trace-Id": "Root=1-67443824-3f16b63258706de665ab7694"
  },
  "origin": "XXX.XXX.XXX.XXX",
  "url": "https://httpbin.org/get?param1=ABC&param2=DEF&param3=GHI&param4=JKL"
}

全体像

先に実装したシナリオの全体を見せておきます。
画像12.png

手順

①環境変数の定義
②期待値のJSONファイルから基本要素数を取得
③for文に②の値を設定する。
④for文の中身を実装

①環境変数の定義

まず、期待値のJSONファイルから基本要素数を取得し、それを変数に格納したいです。(この変数を使ってfor文に扱いたい。。) そこでこの環境変数を定義します。環境変数に値を代入→取得の流れで変数を扱います。
以下画像が今回のシナリオで使った環境変数です。
expect:期待値のJSONファイル
count:for文内で使用するカウンタ
expect_length:取得した基本要素数
で設定しています。
環境変数.png

②期待値のJSONファイルから基本要素数を取得

シナリオ内には、アサーションではなくコードベースで処理を書いて自由に操作できる「Script」もあります。そこで処理を書いていきます。まず、環境変数で定義したexpectの項目数を取得します。(※expectは文字列のため、JSON型に変換しています。) 環境変数の値の出し入れには、このpm.environmentに対してgetsetメソッドを扱います。その後、expect_lengthに値を代入します。
要素数取得.png

③for文に②の値を設定する

for文は以下のように設定しています。反復回数は②で取得したexpect_length(基本要素数)に設定しています。環境変数は{{}}で括って設定すると使えます。
for文.png

④for文の中身を実装

ここからゴリゴリ実装していきます。
流れとしては
・コード内で、期待値を格納する変数expectedValueとレスポンス値を格納する変数responseを定義し、それぞれ初期化。
・上記で初期化した変数のkeyのみを取得する変数、expectedValuekeysresponsekeysを初期化。
・環境変数countを取得して、expectedValuekeysresponsekeyscount番目のkeyを取得。
expectedValueとレスポンス値responseを3keyをもとに比較。
countの値を+1して環境変数の値を更新。
です。
for文中身.png

テスト結果

レスポンスの実測値と期待値は以下です。アサーションがきちんとできることを確認するために、originX-Amzn-Trace-Idをあえて違うようにしました。
実測値
{
  "args": {
    "param1": "ABC",
    "param2": "DEF",
    "param3": "GHI",
    "param4": "JKL"
  },
  "headers": {
    "Accept": "/",
    "Accept-Encoding": "gzip",
    "Content-Type": "application/json",
    "Host": "httpbin.org",
    "User-Agent": "Apidog/1.0.0 (https://apidog.com)",
    "X-Amzn-Trace-Id": "Root=1-67443824-3f16b63258706de665ab7694"  
  },
  "origin": "XXX.XXX.XXX.XXX",(IPのためマスク) 
  "url": "https://httpbin.org/get?param1=ABC&param2=DEF&param3=GHI&param4=JKL"
}
期待値
{
"args": {
"param1": "ABC",
"param2": "DEF",
"param3": "GHI",
"param4": "JKL"
},
"headers": {
"Accept": "/",
"Accept-Encoding": "gzip",
"Content-Type": "application/json",
"Host": "httpbin.org",
"User-Agent": "Apidog/1.0.0 (https://apidog.com)",
"X-Amzn-Trace-Id": "Root=1-67440432-21ba4e74377521c1608b66e2" →レスポンスと違う
},
"origin": "54.89.142.0", →レスポンスと違う(適当なIP)
"url": "https://httpbin.org/get?param1=ABC&param2=DEF&param3=GHI&param4=JKL"
}

テスト結果は以下です。意図して違った設定にした部分もテスト結果が失敗になっているので、正しくアサーションができています。
テスト結果.png
aa.png
bb.png
cc.png
dd.png

最後に

 良い文献を見つけることができず、環境変数を使うところが非常に苦労しました。。この記事が誰かの役にたってくれると嬉しいです。

11
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?