🐍
e2eツールtarvernで知っておくと便利なこと
e2eテストツールとしてtarvernを利用してから1年くらい経ちました。
tarvernはpythonで作成されたAPIのテストツールです。
モノシリックなサービスのe2eテストには向きませんが、マイクロサービスで利用するのであればおすすめです。
簡単でお金もかかりません。
今回はtarvernを使う場合に知っておくと便利なことについて記載します。
yamlで環境ごとの変数を設定する
tarvernで叩くurlはyamlを使って環境変数として管理するべきです。
e2eテストはlocalだけでなく、gitHubAction等のCIでも実行するのが普通です。
実行環境が変われば当然urlも変わるので、外部ファイルで管理するべきです。
local環境で実行する場合の変数をlocal_urls.yamlファイル
ci環境で実行する場合の変数をci_urls.yamlファイルに記載します。
local_urls.yaml
---
name: test includes
description: used for testing against local server
variables:
service:
proto: http
host: localhost
port: 8000
ci_urls.yaml
---
name: test includes
description: used for testing against ci server
variables:
service:
proto: http
host: dev.hogehoge
port: 80
あとはpytestのコマンド実行時に引数を付加します。
pytest --tavern-global-cfg=local_urls.yaml
tavern-ciコマンドも同様です
tavern-ci --tavern-global-cfg=local_urls.yaml tests
このように実行することでテストyamlに記載された
"{service.proto:s}://{service.host:s}:{service.port:d}"
の値が変数で置きかわります。
あとはmakefileやgitHubActionのファイルでyamlを切り替えればOKです。
file upload時に他のパラメーターも送信する
file upload時には、ユーザーデータなどを同時にpostしたいケースがほとんどです。
その時は
stages:
- name: ErrInvalidHoge
request:
url: "{service.proto:s}://{service.host:s}:{service.port:d}/hoge"
method: POST
data:
user_id: 100
files:
file_data: "tests/test.csv"
headers:
content-type: multipart/form-data
のようにしてパラメーターを送ることが可能です。
まとめ
tarvernはマイクロサービスのe2eテストに非常に便利です。
pytestの経験があれば、より手軽に色々な機能を利用できます。
MQTTにも対応しているので、Iotの開発でも利用できます。
是非、試してみてください。
Discussion