🍶

Tavernを用いたGo APIテストを試す

に公開

はじめに

APIテストツールであるtavernを利用して、Goで実装されたAPIのテストを試す。

ソースコード

https://github.com/poty-tom/tavern-go
API自体は雑実装で、ginを利用して図書データの取得・登録を行うだけ
DB保存とかも考えておらず、いくつかのエンドポイントを用意しただけでtavernによるテストを試すだけの実装を取っている。

動作環境

tavernはpython性のツールであるため、事前にpython3-pipによるインストールを行う必要がある。

注意事項

tavernではyaml形式の定義ファイルを元にテスト実行する。
ファイル名には接尾辞+拡張子として*.tavern.yamlの形式をとらないと、tavern-ciコマンドで認識されないことに注意が必要

テスト実行

APIを裏で起動したままでテストを実行する。

$ tavern-ci -v tests/test_book_api.tavern.yaml
>
=========================================== test session starts ===========================================
platform linux -- Python 3.8.10, pytest-7.2.2, pluggy-1.5.0 -- /usr/bin/python3
cachedir: .pytest_cache
rootdir: /home/xxx/work/tavern-go
plugins: tavern-2.11.0
collected 1 item

tests/test_book_api.tavern.yaml::api_testcase PASSED                                                [100%]

============================================ 1 passed in 0.22s ============================================

まとめ

tavernによるAPIテストを試した。
原始的な人間であるため、APIテストは基本的にPOSTMANやINSOMNIAなどのGUIツールを利用していたが、CIなどに組み込む際にはコードベースのAPIテストが必要になってくるため重要である。

今回は非常に簡易的な方法しか試していないが、MQTTなどのメッセージブローカー形式のAPIについてもプラグインを利用することでテストができるらしい。また、yamlファイルに関しても複数ファイル分割や埋め込みなどにより、複雑なテストシナリオも実現ができそう。

余談だがtavernは英語で居酒屋を指す単語らしい。

Discussion