WebAPIのテスト、つまり適当に引数設定してAPI呼んだら妥当な値が返ってくるかをテストするのに、tavernっていうのがある。
これについては、
YAMLとpytestで動くAPIテストフレームワーク「Tavern」でWebAPIの自動テストが簡単に書けた
https://qiita.com/yuji_saito/items/f9d9f9e26d0a46905f4b
に詳しく書いてある。
(書いてあるけど、実際にはそこに書いてあるbodyはjsonでは?と思うのだが、まあそれはここでは置いておこう)
で、理解したってことで、サンプル
Examples
https://tavern.readthedocs.io/en/latest/examples.html
の
1) The simplest possible test
にある例を試すと・・・エラーになる。
つまり、
tavern-ci test_minimal.tavern.yaml
って打つと、最後のほうに
っていう感じになる。サンプルなのにfailな例って…
(もしかして、これ引数の順序までチェックできるという意味で、failになる例を載せているのかなあ?)
【原因】
この理由だけど、そのサンプルでテストしている
https://jsonplaceholder.typicode.com/posts/1
の内容は、以下の通り
{
"userId": 1,
"id": 1,
"title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
"body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
}
つまり、id以外に引数がある。
一般にAPIで帰ってきた値の引数をテストしたいとき、すべての引数をテストしたいわけじゃない。
だけど、tavern君は勝手に全部の引数をチェックしちゃっている。
それでエラー…
【対策=表題の件の回答】
なんで、1つの引数をチェックしたいんだけど、それにはどうしたらよいかが・・・よくわからない。
じつは、ここに書いてある。
https://github.com/taverntesting/tavern/blob/master/tests/integration/test_strict_key_checks.tavern.yaml
strict: false
を指定する。こんな感じ
test_name: Get some fake data from the JSON placeholder API
stages:
- name: Make sure we have the right ID
request:
url: https://jsonplaceholder.typicode.com/posts/1
method: GET
response:
status_code: 200
strict: false
json:
id: 1
そうして実行すると
なかんじにかわる。
【おまけ】
郵便番号
【API】郵便番号検索APIを使ってみた
https://qiita.com/j-work/items/8f353db0d9bce5ff3b2a
の郵便番号箇所の確認(yubin.tavern.yamlで格納)
これについては、
YAMLとpytestで動くAPIテストフレームワーク「Tavern」でWebAPIの自動テストが簡単に書けた
https://qiita.com/yuji_saito/items/f9d9f9e26d0a46905f4b
に詳しく書いてある。
(書いてあるけど、実際にはそこに書いてあるbodyはjsonでは?と思うのだが、まあそれはここでは置いておこう)
で、理解したってことで、サンプル
Examples
https://tavern.readthedocs.io/en/latest/examples.html
の
1) The simplest possible test
にある例を試すと・・・エラーになる。
つまり、
tavern-ci test_minimal.tavern.yaml
って打つと、最後のほうに
FAILED test_minimal.tavern.yaml::Get some fake data from the JSON placeholder API ============================================ 1 failed, 2 warnings in 1.02s ============================================
っていう感じになる。サンプルなのにfailな例って…
(もしかして、これ引数の順序までチェックできるという意味で、failになる例を載せているのかなあ?)
【原因】
この理由だけど、そのサンプルでテストしている
https://jsonplaceholder.typicode.com/posts/1
の内容は、以下の通り
{
"userId": 1,
"id": 1,
"title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
"body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
}
つまり、id以外に引数がある。
一般にAPIで帰ってきた値の引数をテストしたいとき、すべての引数をテストしたいわけじゃない。
だけど、tavern君は勝手に全部の引数をチェックしちゃっている。
それでエラー…
【対策=表題の件の回答】
なんで、1つの引数をチェックしたいんだけど、それにはどうしたらよいかが・・・よくわからない。
じつは、ここに書いてある。
https://github.com/taverntesting/tavern/blob/master/tests/integration/test_strict_key_checks.tavern.yaml
strict: false
を指定する。こんな感じ
test_name: Get some fake data from the JSON placeholder API
stages:
- name: Make sure we have the right ID
request:
url: https://jsonplaceholder.typicode.com/posts/1
method: GET
response:
status_code: 200
strict: false
json:
id: 1
そうして実行すると
-- Docs: https://docs.pytest.org/en/latest/warnings.html ============================================ 1 passed, 2 warnings in 2.95s ============================================
なかんじにかわる。
【おまけ】
郵便番号
【API】郵便番号検索APIを使ってみた
https://qiita.com/j-work/items/8f353db0d9bce5ff3b2a
の郵便番号箇所の確認(yubin.tavern.yamlで格納)
test_name: Get some fake data from the JSON placeholder API stages: - name: Make sure we have the right ID request: url: https://zip-cloud.appspot.com/api/search?zipcode=7830060 method: GET response: status_code: 200 strict: false json: results: - zipcode: '7830060'