🤼
karateでrequestを作るのはJSONが良い
karateとは何ですか?
webAPIのテスト自動化フレームワークです。
postmanで、WebAPIの自動テストを構築していました。
しかし、辛みがあり、karateに移行をした経緯があります。
そのあたりの経緯は別で書きます。
karateには、便利なメソットが多くあり、良く考えて作ってるな~と感じて、
少しずつアウトプットしてきます。
requestをJSONで書く方法
APIのrequestはJSONであることが多いので、JSONで書けると可読性が良くレビューもしやすいです。
逆に、requestを構造体の階層を作って1個ずつparameterをセットしていく…は面倒です。
そのような時には、triple-quotes ("""
)を使うと、勝手にやってくれます。
# ここでrequestを構築している。
Given def cat =
"""
{
name: 'Billie',
kittens: [
{ id: 23, name: 'Bob' },
{ id: 42, name: 'Wild' }
]
}
"""
Given url baseUrl
# ここでrequestをする。
And request = cat
When method post
Then status 200
JSONに変数を埋め込む
前のresponseを使用して、次のrequestに使用したい時があります。
例えば、POSTで作成したidを使って、PUTでidを指定して更新するなどです。
そのような時には、embedded-expressions(#()
)を使うと、埋め込むことも可能です。
Given def cat =
"""
{
name: 'Billie',
kittens: [
# ここで前のresponseのidを埋め込んでいる。
{ id: #(response.id), name: 'Bob' },
{ id: 42, name: 'Wild' }
]
}
"""
JSONを格納している変数は構造体して扱える
requestしたparameterがresponseと一致しているか?を確認したい時があります。
そのような時には、requestがJSONで格納している変数を構造体として、使うことができます。
Given def cat =
"""
{
name: 'Billie',
kittens: [
{ id: 23, name: 'Bob' },
{ id: 42, name: 'Wild' }
]
}
"""
# JSONが格納しているcatを構造体として扱って、responseと一致しているか確認している。
And match response.kittens[*].id contains cat.kittens[0].id
# catの構造体の値を変更することも可能である。
* set cat.kittens[0].id = 99
Discussion