🐍

e2eツールtarvernで知っておくと便利なこと

2022/06/24に公開

e2eテストツールとしてtarvernを利用してから1年くらい経ちました。

https://github.com/taverntesting/tavern

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