APIを簡単にテストできる!Tavernを使ってみる。

こんにちは。都築です。
 
今回はAPIのテストを簡単にできるTavernというツールをご紹介します。WebシステムのバックエンドをAPIとしているシステムも多いのではないかと思います。難しい知識がなくても出来ますので、ぜひ参考にしていただければと思います。

Tavernとは

まずTavernとは何かをご説明します。公式によるとTavernとは下記のように記載されています。

Tavernは、HTTP、MQTT、またはその他のプロトコル用の高度なpytestベースのAPIテストフレームワークです。 

公式サイト

記載されている通り、HTTPやMQTTをテストするフレームワークで、API以外もテストすることが出来ます。ベースとしてはpythonのフレームワークpytestを利用しています。
 
現時点ではPython3.4以降のみをサポートしていますのでご注意ください。また、公式にも記載されていますが、Tavernの良い点として下記が挙げられます。

  • 内部でpytestを利用して作られており、軽量に動作します。
  • 環境構築はコマンドを数点実行するのみで、導入がとても容易です。
  • 開発者がドキュメントを常に開いていなくても済むようにすることを目指して開発されており、書きやすく、読みやすく、理解することが容易です。
  • 基本機能でほぼすべての一般的なテストのユースケースがカバーされています。
  • 基本機能で実現できない要件も、Pythonやpytestを利用して拡張することが出来ます。

Tavernの使い方

前段でも記載した通り、Tavernは環境構築が容易です。Tavernの実行に必要なのは実行環境とテストの設定となるテストファイルのみです。実際に環境構築からテストの実行までをやってみたいと思います。
 
今回はTavernを下記環境で実行します。

ubuntu
20.04.6 LTS
pip
23.3.1

ubuntuはwindowsであればMicrosoft storeから簡単にインストールできますので、まずはインストールしてください。

Tavernのインストール

まず、Tavernのインストールでpip3を利用しますので、ubuntuにpip3をインストールします。ubuntuを起動し、ubuntuのコンソール上で下記のコードを実行します。

tsuzuki:~$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
tsuzuki:~$ sudo python3 get-pip.py

pip3のインストールが完了しましたら、次にTavernをインストールします。下記のコードを実行します。
tsuzuki:~$ pip3 install tavern

tavernの実行が完了したらpip showコマンドで確認します。
tsuzuki:~$ pip show tavern
Name: tavern
Version: 2.5.0
Summary: Simple testing of RESTful APIs
Home-page:
Author: Michael Boulton
Author-email:
License:
Location: /home/tsuzuki/.local/lib/python3.8/site-packages
Requires: jmespath, jsonschema, paho-mqtt, pyjwt, pykwalify, pytest, python-box, PyYAML, requests, stevedore
Required-by:

以上でTavernの実行環境の構築は完了です。とても簡単ですね。

Tavernのテストファイルの作成

Tavernの実行環境が整いましたら、どのようなテストを実行するか定義するテストファイルを作成します。Tavernのテストファイルは命名ルールがあり、以下のようなファイル名にする必要があります。
test_xxx.tavern.yaml
xxxの部分は自由ですが、テスト概要がわかるものにすると良いかと思います。例えばログインのテストであればtest_login.tavern.yamlなど、適宜設定していただければと思います。
 
次にTavernのテストファイルの中身を記載していきます。Tavernのテストファイルはyaml形式で記載します。以下のようにどのようなテストを実行するか、対象のURLやINPUT、想定するOUTPUTを記載します。
 
以下の例では「https://xxx.com/sample」にPOSTメソッドでリクエストを実行するテストです。INPUTはJSON形式でvalueに”abcde”という値を設定しています。想定結果としてはHTTPステータスが200、レスポンスとしてJSON形式でresponce1の値に”fghij”、responce2に何かしらの値が返ってくることを想定したテストになっています。
 
test_nameは便宜上の名前で、どのようなテストをするかなどを設定すると良いかと思います。複数のリクエストを実行することも可能で、その際はstagesを同じファイルに増やしていきます。
 
test_sample.tavern.yaml

test_name: テスト名

stages:
  - name: テストの概要
    request:
      url: https://xxx.com/sample
      method: POST
      headers:
        content-type: application/json; charset=utf-8
      json:
        value: "abcde"
    response:
      status_code: 200
      json:
        responce1: "fghij"
        responce2: !anything

Tavernのテスト

上記で作成したテストファイルを実行します。実行はpytestコマンドで実行することが推奨されています。
 
以下のようにpytestコマンドで作成したテストファイルを指定して実行します。

tsuzuki:~$ .local/bin/pytest test_sample.tavern.yaml
========================= test session starts =========================
platform linux -- Python 3.8.10, pytest-7.2.2, pluggy-1.3.0
rootdir: /home/tsuzuki
plugins: tavern-2.5.0
collected 1 item

test_sample.tavern.yaml .                           [100%]

========================= 1 passed in 1.21s =========================

例では1 passedとなっており、1つのテスト実行に成功した結果となっています。テストに失敗した場合は想定結果と実際の結果が出力され、テスト失敗の理由などが分かります。もちろん、動的な値を利用したテストやHTTPヘッダーを検証するテストなども実行することが出来ます。
 
次回以降にまた詳しくご紹介したいと思います。

まとめ

簡単にテストを実行したい。でもテストの環境を作るのに時間がかかったり、テストを作成するのに学習コストが必要なことも多々あるかと思います。Tavernであればテストに必要なリクエストの情報があれば、簡単に実行できます。
 
ぜひ試していただければと思います。
 
 
 
 
《関連記事》

Burp Suiteの使い方
技術
2023.10.4(Wed)

セキュリティ脆弱性テストのためのプロキシツール!Burp Suiteの使い方

#ツール

Excelの文章校閲機能
技術
2022.3.9(Wed)

誤字脱字を防ぐ!Excelの文章校閲機能 編

#まとめ#ビジネス

CloudWatchでディスク容量とメモリを監視
技術
2021.8.27(Fri)

【AWS活用術】CloudWatchでディスク容量とメモリを監視する

記事をシェア
MOST VIEWED ARTICLES