paint-brush
REST API 自動テストの Playwright 対 Cypress: 誰がトップになるか?@bormando
8,588 測定値
8,588 測定値

REST API 自動テストの Playwright 対 Cypress: 誰がトップになるか?

Dmitrii Bormotov3m2023/09/05
Read on Terminal Reader

長すぎる; 読むには

Cypress は、UI と API のテスト カバレッジという 2 つの目的を備えたテスト自動化フレームワークです。 Playwright もまったく同じ目的を持っていますが、標準でブラウザが付属しているわけではありません。(必要に応じて) 別のコマンドを使用してブラウザをインストールする必要があります。軽量で最速のツールと言えば、間違いなく Playwright でしょう。インストールにかかる時間が短く、API テストに関しては不要なため、ブラウザの実行に追加のリソースを消費しません。
featured image - REST API 自動テストの Playwright 対 Cypress: 誰がトップになるか?
Dmitrii Bormotov HackerNoon profile picture

こんにちは、みんな!


私は、UI と API のテスト カバレッジという 2 つの目的を持つテスト自動化フレームワークを常に懐疑的に見てきました。通常、それぞれに独自のテストがあるため、異なるテスト実行 (またはイベント プロジェクト) で異なるテスト レイヤーを実行します。依存関係構成、そして環境変数


最近、 APIテストの観点からPlaywrightが提供するものを検討し、それを私のCypress の経験と比較しました。そこで、皆さんと共有しなければならないことをここに示します。

ヒノキ

Cypress は少し前にAPIテストを可能にしました。 APIテストの点でこのツールがいかに優れているかについて、例を示した学習ポータルの記事をご覧ください。

設置パフォーマンス

テストを実行するには、プロジェクトの依存関係をインストールする必要がありますよね? CypressにはElectron ブラウザが付属しており、 APIテストのみを実行したい場合はインストールがかなり冗長 (そして時間がかかり) になる可能性があります (CI で UI と API テストの実行に別のジョブがあるとしましょう)通常はそうなります)。


Cypress クリーン インストール時間


見た目は良くありませんね? ☝️


また、 APIテストを実行すると、とにかくブラウザが起動します。


Cypress は 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にはデフォルトではブラウザーが付属していないことです。(必要に応じて) 別のコマンドを使用してブラウザーをインストールする必要があります。


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そこに例が見られます)。