【Playwright】E2EツールのPlaywrightについて~API編~
ビックリするほどの高頻度で、Playwrightの記事を書いているわけですが・・・。
ここまで書いたら、本化して、まとめるのもありかも・・・って思い始めてます(笑
というわけで、今回はAPIテストについてを、つらつらと書いていきたいと思います。
Playwrightなんでもできますねぇ。
事前準備
↓の記事を参考にサンプルを作成するか、Githubからソースを取得してください。
概要
本記事では、かの有名なPokeAPIを使用して、PokemonのデータをGETだぜっ!していきたいと思います。
今回GETするのは、「フシギダネ」です。
「いけフシギダネ!(POST)」もしたいのですが、PokeAPIにPOSTのエンドポイントはないので、別途サンプル作らないと・・・。って考えてます。
サンプルと解説
最初にファイルの最終的な内容を記載して、のちに解説文を書いていきます。
サンプル
それではまず、「playwright.config.ts」の「baseURL」を書きます。
use: {
/* Base URL to use in actions like `await page.goto('/')`. */
baseURL: 'https://pokeapi.co/api/v2/', // ★ここを書き換えます
/* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
trace: 'on-first-retry',
},
次に、テストファイルです。
適当に「tc_pokemon_get_api.spec.ts」と名付けました。
内容は以下のようになっています。
import { test, expect } from '@playwright/test'
test('pokemon get daze', async ({ request }) => {
// フシギダネをGETしよう
const reponse = await request.get(`pokemon/1`)
// レスポンスコードの検証
expect(reponse.ok()).toBeTruthy()
// レスポンスJSONアサーション
expect(await reponse.json()).toEqual(expect.objectContaining({
base_experience: expect.any(Number),
species: expect.objectContaining({name: expect.stringContaining('bulbasaur')})
})
)
})
解説
E2Eテストと異なる部分を挙げていこうと思います。
全体的にはクリックなど操作がないので、非常にシンプルに見えます。
クセがあるとすれば、JSONのアサーション部分でしょうか。
test('has title', async ({ page }) => {
test('pokemon get daze', async ({ request // ① }) => {
// フシギダネをGETしよう
const reponse = await request.get(`pokemon/1`) // ②
// レスポンスコードの検証
expect(reponse.ok()).toBeTruthy()
// レスポンスJSONアサーション
expect(await reponse.json()).toEqual(expect.objectContaining({
base_experience: expect.any(Number),
species: expect.objectContaining({name: expect.stringContaining('bulbasaur')})
})
)
})
① pageから、requestになっています
② .getでMethodを指定して、引数にbaseURLに続くエンドポイントを記載してます
JSONアサーションは・・・記載しようと思ったのですが、PokeAPIの戻り値がすごい量なので、いったんここまでにして、アップデートをします。
まずは、フェーズ0ってことで。。。
あとがき
今回はGETの触りだけですが、今後は以下を追加していこうと考えています。
むしろ、APIの基本が不足してる感じが・・・(笑
- pathパラメータを使用する
- クエリパラメータを使用する
- リクエストボディを使用する
- get以外のmethodを使用する
あとは、JSONのアサーションを書いていて思ったのですが、そっちも記事にまとめたいと思い始めて、これは大変だ。
関連記事
- 【Playwright】E2EツールのPlaywrightについて~座学編~
- 【Playwright】E2EツールのPlaywrightについて~入門編~
- 【Playwright】E2EツールのPlaywrightについて~関数編~
参考など
Discussion