こんにちは、みんな!
私は、UI と API のテスト カバレッジという 2 つの目的を持つテスト自動化フレームワークを常に懐疑的に見てきました。通常、それぞれに独自のテストがあるため、異なるテスト実行 (またはイベント プロジェクト) で異なるテスト レイヤーを実行します。
最近、 APIテストの観点からPlaywrightが提供するものを検討し、それを私のCypress の経験と比較しました。そこで、皆さんと共有しなければならないことをここに示します。
Cypress は少し前にAPIテストを可能にしました。 APIテストの点でこのツールがいかに優れているかについて、例を示した学習ポータルの記事をご覧ください。
テストを実行するには、プロジェクトの依存関係をインストールする必要がありますよね? CypressにはElectron ブラウザが付属しており、 APIテストのみを実行したい場合はインストールがかなり冗長 (そして時間がかかり) になる可能性があります (CI で UI と API テストの実行に別のジョブがあるとしましょう)通常はそうなります)。
見た目は良くありませんね? ☝️
また、 APIテストを実行すると、とにかくブラウザが起動します。
Cypressを使用した簡単なAPIテストは次のようになります。
it('Sign in with valid credentials', () => { cy.request('POST', '/auth', { login: Cypress.env('username'), password: Cypress.env('password'), }).should(response => { expect(response.body.token).to.be.a('string') expect(response.status).to.eq(200) }) })
きれいに見えます
Cypressと同様に、 Playwrightはテスト自動化フレームワークです。ブラウザー自動化ツールのみを独占的に使用することも、フレームワーク全体(テスト ランナー、アサーション ライブラリ、ブラウザー自動化ツール、HTTP クライアント、レポーターなど) を使用することもできます。
ここでの違いは、 Playwrightにはデフォルトではブラウザーが付属していないことです。(必要に応じて) 別のコマンドを使用してブラウザーをインストールする必要があります。
ここでは大きな違いがあり、 APIテストのみを実行するという点では、ブラウザや他のデスクトップ アプリは実行されず、マシン上の実行時間とリソースが節約されます。
Playwrightを使用した簡単なAPIテストは次のようになります。
import {test, expect} from '@playwright/test' test('Sign in with valid credentials', async ({request}) => { const response = await request.post('/auth', { data: { login: process.env.USERNAME, password: process.env.PASSWORD, }, }) expect(response.status()).toEqual(200) expect(await response.json()).toEqual({ token: expect.any(String), }) })
オブジェクトをアサートするJest のような構文を強調したいと思います。
expect(await response.json()).toEqual({ token: expect.any(String), })
この構文を使用すると、1 回のexpect
呼び出しだけでオブジェクトの構造全体を検証できます ☝️
API テストは、実行にそれほど多くの労力を必要としないため、小さくて軽量であることが想定されています。
上記の内容を要約してみましょう…
✅ Playwright は、すぐに使える13 倍高速なクリーン インストールで勝利を収めました。
ℹ️依存関係が事前にインストールされたイメージを使用するか、依存関係をCI ストレージにキャッシュすると、 CIでのCypress のインストール時間を短縮できます。
✅ Playwright は、API テストを実行するためにブラウザーを必要としないため、直接要点を達成できるという点で勝ちました。
ℹ️ ブラウザーはフレームワークのロジックの一部であるため、API テストでブラウザーを「実行しない」方法はありません。
CypressにもPlaywrightにも客観的な利点がないため、ここで勝者を選ぶことはできません。
どちらも非常に単純な構文ですが、わずかな違いがあります。ここで好きなものを選ぶのはテスターの決定だと思います。
そのパフォーマンスにより、 APIテストの自動化にPlaywrightを使用するのは十分に安全であると断言できます。このフレームワークを使用したUIテストをすでに持っている場合、これは公平な解決策になります。
UIテストにCypressを使用していて、 APIレイヤーをカバーしたい人への私のアドバイス - 他のものを使用したほうがよいです ( Jest + Axios 、そこに例が見られます)。