WebAPIのテストツールtavernについては、
WebAPIのテストツールtavernで、複数ある引数のひとつ(だけ)を確認したいとき
https://blog.goo.ne.jp/xmldtp/e/42bf2f6829167fe044d7f3d16f630492
で紹介したけど、このtavern、Pythonで関数をかいて、その中で受け取った内容をチェックするプログラムを実行させたり、
APIの引数を設定するプログラムを書いたりすることができる。便利便利・・・
ただこれ、バージョンによって実行できないものがあったりするので、その件について
■関数が書ける箇所は大きく3種類
一つは、responseのことろで、値を保存(save)するとき、
新たな変数を定義できる(たとえば、次のIDでは1増えているというようなときや、合計値を求めるというとき、
計算結果を変数として定義して、その変数とAPIから受け取った値が正しいかチェックするために。
新しい変数をプログラム内で設定し、追加できる)
2つめは、responseのことろで、受け取った値をチェックする。
assert False を実行することにより、異常があったときには、エラー出力できる
3つめ、requestのところで、呼び出すAPIの引数とその値を設定することができる
まあ、これは例を見て呉れればわかるでしょう。
ということで、具体例。1つ目はex118この引数チェックはex12、数字としてチェックしている)、
2つめはex2,3つめはex3に書いてある。
なお、test_nameが不自然なのは
https://tavern.readthedocs.io/en/latest/basics.html
の一番上の例をもとに作っているから。ちなみに、上記の関数に関しては
Calling external functions
https://tavern.readthedocs.io/en/latest/basics.html#calling-external-functions
Using external functions for other things
https://tavern.readthedocs.io/en/latest/basics.html#using-external-functions-for-other-things
にいろいろ書かれている。
例:test_minimal.tavern.yaml
(スペース微妙に狂ってて、そのまま動かないかも)
で、そこで呼び出している関数が書いているのは、以下のとおり
例:utils.py
で、これは、0.34.0のtavernでLinux上なら動いた。
が、ほかの環境だと動かないかも(エラーになるかも)
■ほかの環境の違い
・WindowsのAnaconda上だと、うまくいかなかった。
関数のパスが見れなかった
linuxだと(プログラムが/home/userにある場合)
export PYTHONPATH="/home/user:$PYTHONPATH"
でパスがとおる。setに変えて同じようなことしたけど、だめだった・・・けど、パスが見れれば動くんだと思う
・バージョン1.0以上
bodyをjsonに変えれば動くと思う(いまjsonになっているところはそのまま)
なお、最新は1.2.2だけど、
pip install tavern==1.2.2
とやっても、1.2.2は入るとは限らない。限界あるみたい。
また、1.0系は、どうもpytestのバージョンがそれ以前と違うみたいで、pytestのバージョン上げも必要かも?
・バージョンが下
ex2の「responseのことろで、受け取った値をチェックする」のが、エラーになる。
どの辺からエラーになるのかわからないけど、0.25.1だとエラーになった
WebAPIのテストツールtavernで、複数ある引数のひとつ(だけ)を確認したいとき
https://blog.goo.ne.jp/xmldtp/e/42bf2f6829167fe044d7f3d16f630492
で紹介したけど、このtavern、Pythonで関数をかいて、その中で受け取った内容をチェックするプログラムを実行させたり、
APIの引数を設定するプログラムを書いたりすることができる。便利便利・・・
ただこれ、バージョンによって実行できないものがあったりするので、その件について
■関数が書ける箇所は大きく3種類
一つは、responseのことろで、値を保存(save)するとき、
新たな変数を定義できる(たとえば、次のIDでは1増えているというようなときや、合計値を求めるというとき、
計算結果を変数として定義して、その変数とAPIから受け取った値が正しいかチェックするために。
新しい変数をプログラム内で設定し、追加できる)
2つめは、responseのことろで、受け取った値をチェックする。
assert False を実行することにより、異常があったときには、エラー出力できる
3つめ、requestのところで、呼び出すAPIの引数とその値を設定することができる
まあ、これは例を見て呉れればわかるでしょう。
ということで、具体例。1つ目はex118この引数チェックはex12、数字としてチェックしている)、
2つめはex2,3つめはex3に書いてある。
なお、test_nameが不自然なのは
https://tavern.readthedocs.io/en/latest/basics.html
の一番上の例をもとに作っているから。ちなみに、上記の関数に関しては
Calling external functions
https://tavern.readthedocs.io/en/latest/basics.html#calling-external-functions
Using external functions for other things
https://tavern.readthedocs.io/en/latest/basics.html#using-external-functions-for-other-things
にいろいろ書かれている。
例:test_minimal.tavern.yaml
test_name: Get some fake data from the JSON placeholder API stages: - name: ex11 request: url: https://jsonplaceholder.typicode.com/posts/1 method: GET response: status_code: 200 save: $ext: function: utils:test_function body: save_id: id - name: ex12 request: url: https://jsonplaceholder.typicode.com/posts/1 method: GET response: status_code: 200 body: id: !int "{old_id}" - name: ex2 request: url: https://jsonplaceholder.typicode.com/posts/1 method: GET response: status_code: 200 verify_response_with: function: utils:test_function2 body: id: 1 - name: ex3 request: url: https://jsonplaceholder.typicode.com/posts/1 method: POST json: $ext: function: utils:test_function3 |
(スペース微妙に狂ってて、そのまま動かないかも)
で、そこで呼び出している関数が書いているのは、以下のとおり
例:utils.py
from box import Box import pytest def test_function(response): return Box({"old_id" : response.json().get("id")}) def test_function2(response): assert True def test_function3(): return Box({"id" : "3"}) |
で、これは、0.34.0のtavernでLinux上なら動いた。
が、ほかの環境だと動かないかも(エラーになるかも)
■ほかの環境の違い
・WindowsのAnaconda上だと、うまくいかなかった。
関数のパスが見れなかった
linuxだと(プログラムが/home/userにある場合)
export PYTHONPATH="/home/user:$PYTHONPATH"
でパスがとおる。setに変えて同じようなことしたけど、だめだった・・・けど、パスが見れれば動くんだと思う
・バージョン1.0以上
bodyをjsonに変えれば動くと思う(いまjsonになっているところはそのまま)
なお、最新は1.2.2だけど、
pip install tavern==1.2.2
とやっても、1.2.2は入るとは限らない。限界あるみたい。
また、1.0系は、どうもpytestのバージョンがそれ以前と違うみたいで、pytestのバージョン上げも必要かも?
・バージョンが下
ex2の「responseのことろで、受け取った値をチェックする」のが、エラーになる。
どの辺からエラーになるのかわからないけど、0.25.1だとエラーになった