ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

tavernから自作関数を呼ぶ方法について

2020-07-27 09:17:22 | Weblog
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
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だとエラーになった

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする