Symmetric API Testing という、手間なく堅牢に外部 API Client をテストする手法
もともと息抜きに社内向けに書いた記事ですが、外部向けにリライトしました。久々にはてなブログにポストしてみます。
さて、自分の仕事柄 API Client を実装する機会が多いのですが、改めて良い API Client ってどういうものなんだろうかと探っていました。
GolangでAPI Clientを実装する | Taichi Nakashima という記事が、 Golang に限らない汎用的な API Client の設計と実装についてわかりやすく述べられていてよかったです。
その記事の終わりに、 API Client のテスト手法として Symmetric API Testing が紹介されていて、大変興味深かったので記事としてまとめてみました。
Symmetric API Testing とは?
Symmetric API Testing という手法はこちらの記事で言及されていました。
Anaconda という Golang の Twitter API Client の課題を解決するために採用した API Client のテスト手法とのことでした。
めちゃくちゃ要約すると以下のような内容でした。
- API Client のテスト手法はいくつかあるがどれもつらい
- Symmetric API Testing は実際のリクエストとレスポンスを自動で保存しておいて、テスト実行時に保存したデータを参照する手法
Symmetric というのは、リクエストとレスポンスを保存しておくことで、モックサーバーとモッククライアントを対照的にテストできるというところからきているようですね。
とてもよさそう。
どうやって Symmetric API Testing をやっていくか
Symmetric API Testing 自体は Golang 界隈で2015年頃に盛り上がった手法のようですが、 Golang に限らず似たような手法は試されており、手軽に実現するライブラリもいくつかあるようでした。
Symmetric API Testing | Gopher Academy Blog では、直接 Golang の io 周りの API でゴリッとファイル書き出しする方法が取り上げられています。
Ruby では vcr というライブラリがあり、 VCR.py など各言語に派生したライブラリが多数存在しています。 みなさんお使いの言語でも手軽に試せるかもしれません。
ライブラリなくとも、JSON や YAML などでファイル書き出してテスト実行時に読み出せばよいだけなので、自前でもやりやすくはありますね。
まとめ
ふとしたきっかけで Symmetric API Testing について調べてみましたが、 API Client のテストのつらーいところをうまく解消した、斬新で面白いテスト手法でした。
自分は普段 Python 使うことが多いだけあるので VCR.py を触ってみたのですが、非常に使用感よかったです。
また追って体験記事も書いていきたいと思います。