「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Cypress を使用した API テスト: 完全ガイド

Cypress を使用した API テスト: 完全ガイド

2024 年 11 月 4 日に公開
ブラウズ:153

API Testing with Cypress: A Complete Guide

導入

Cypress はエンドツーエンドのテスト機能で広く知られていますが、API をテストするための強力なツールでもあります。今日の多くのアプリケーションはバックエンド サービスと API に大きく依存しているため、API テストは最新の Web アプリケーションの信頼性、パフォーマンス、セキュリティを確保するために不可欠な部分です。この投稿では、API テストの設定、リクエストの作成、応答の検証、プロセスの自動化など、Cypress を使用した API テストの基本を説明します。

API テストに Cypress を使用する理由

  1. 組み込み機能: Cypress には、HTTP リクエスト、アサーションを作成し、非同期テストを管理するための組み込み機能があります。
  2. 簡単な統合: UI テストと並行して、API テストを既存の Cypress テスト スイートに簡単に統合できます。
  3. 優れた開発者エクスペリエンス: サイプレスは、ユーザーフレンドリーなインターフェイス、迅速なフィードバック、リアルタイムのデバッグを提供します。
  4. 自動化: CI/CD パイプラインでの API テストを自動化し、デプロイごとに API が一貫してテストされるようにできます。

Cypress での API テストの開始

エンドツーエンド テスト用に Cypress がすでにインストールされている場合は、API テストを開始する準備ができています。そうでない場合は、以下のインストール手順に従ってください。

ステップ 1: Cypress をインストールする

npm install cypress --save-dev

インストールしたら、次のコマンドで Cypress を実行できます:

npx cypress open

ステップ 2: 最初の API テストを設定する
サイプレスは、HTTP リクエストの送信に使用できる cy.request() メソッドを提供します。ユーザーのリストを返す API をテストする基本的な例を次に示します:

describe('API Testing with Cypress', () => {
  it('should retrieve a list of users', () => {
    cy.request('GET', 'https://jsonplaceholder.typicode.com/users')
      .then((response) => {
        // Validate the status code
        expect(response.status).to.eq(200);

        // Validate the response body
        expect(response.body).to.have.length(10);
        expect(response.body[0]).to.have.property('name');
      });
  });
});

この例では、ユーザーのリストを取得する GET リクエストをテストしています。 Cypress は応答ステータス コードを検証し、応答本文に 10 人のユーザーが含まれていることを確認します。

API テストにおける一般的な HTTP メソッド

ここでは、Cypress で GET、POST、PUT、DELETE などの一般的な HTTP リクエストを実行する方法を説明します。

GET リクエスト
GET リクエストは、サーバーからデータを取得するために使用されます。例えば:

cy.request('GET', 'https://jsonplaceholder.typicode.com/posts/1')
  .then((response) => {
    expect(response.status).to.eq(200);
    expect(response.body).to.have.property('id', 1);
  });

POST リクエスト
POST リクエストは、サーバー上に新しいリソースを作成するために使用されます。 POST リクエストをテストする方法は次のとおりです:

cy.request('POST', 'https://jsonplaceholder.typicode.com/posts', {
  title: 'New Post',
  body: 'This is the content of the new post.',
  userId: 1
})
  .then((response) => {
    expect(response.status).to.eq(201);
    expect(response.body).to.have.property('title', 'New Post');
  });

PUT リクエスト
PUT リクエストは、既存のリソースを更新するために使用されます。例:

cy.request('PUT', 'https://jsonplaceholder.typicode.com/posts/1', {
  id: 1,
  title: 'Updated Post Title',
  body: 'Updated content',
  userId: 1
})
  .then((response) => {
    expect(response.status).to.eq(200);
    expect(response.body).to.have.property('title', 'Updated Post Title');
  });

削除リクエスト
DELETE リクエストはリソースを削除するために使用されます。例:

cy.request('DELETE', 'https://jsonplaceholder.typicode.com/posts/1')
  .then((response) => {
    expect(response.status).to.eq(200);
  });

高度な API テスト手法

基本的な API リクエストをマスターしたら、認証の処理、API エラーのテスト、API 呼び出しのチェーンなど、より高度な API テスト手法に進むことができます。

認証の処理
一部の API では、トークンまたは API キーによる認証が必要です。 Cypress は、カスタム ヘッダーを設定することで認証を処理できます。例えば:

cy.request({
  method: 'GET',
  url: 'https://api.example.com/protected',
  headers: {
    Authorization: `Bearer ${Cypress.env('auth_token')}`
  }
})
  .then((response) => {
    expect(response.status).to.eq(200);
  });

ここでは、リクエストとともにトークンを送信するために Authorization ヘッダーが使用されています。

API のテストの失敗
無効な入力やリソースの不足など、何か問題が発生したときに API がどのように動作するかをテストすることが重要です。たとえば、404 エラーをテストする場合:

cy.request({
  method: 'GET',
  url: 'https://jsonplaceholder.typicode.com/posts/9999',
  failOnStatusCode: false
})
  .then((response) => {
    expect(response.status).to.eq(404);
  });

failOnStatusCode: false を設定すると、サイプレスは 2xx 以外の応答に対して自動的にテストに失敗しなくなり、エラー応答を検証できるようになります。

API 呼び出しの連鎖
場合によっては、複数の API 呼び出しをチェーンする必要があることがあります。たとえば、リソースを作成し、それを後続のテストで使用する場合です。

cy.request('POST', 'https://jsonplaceholder.typicode.com/posts', {
  title: 'Post for chaining',
  body: 'Chained post content',
  userId: 1
}).then((postResponse) => {
  cy.request('GET', `https://jsonplaceholder.typicode.com/posts/${postResponse.body.id}`)
    .then((getResponse) => {
      expect(getResponse.body).to.have.property('title', 'Post for chaining');
    });
});

この例では、POST リクエストは新しい投稿を作成し、GET リクエストは最初の呼び出しから返された ID に基づいてその投稿を取得します。

CI/CD パイプラインでの API テストの自動化

API の安定性を確保するには、継続的インテグレーション/継続的デプロイ (CI/CD) パイプラインの一部として API テストを実行することが重要です。 Cypress は、Jenkins、GitHub Actions、Travis CI などの CI/CD ツールに簡単に統合できます。

プッシュごとに Cypress テストを実行する GitHub Actions ワークフローの例を次に示します:

name: CI

on:
  push:
    branches:
      - main

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v2

      - name: Set up Node.js
        uses: actions/setup-node@v2
        with:
          node-version: '14'

      - name: Install dependencies
        run: npm install

      - name: Run Cypress tests
        run: npx cypress run

このワークフローにより、コードがメイン ブランチにプッシュされるたびに API テストが自動的に実行されます。

Cypress を使用した API テストのベスト プラクティス

API テストの信頼性、保守性、効率性を確保するには、次のベスト プラクティスに従ってください:

  1. 環境変数の使用: API キー、トークン、ベース URL などの機密データを環境変数に保存します。
  2. 必要な場合は応答をモックする: 毎回実際の API にアクセスしたくない場合は、cy.intercept() を使用して API 応答を模擬します。
  3. レート制限の処理: API にレート制限がある場合は、リクエスト間に再試行または遅延を追加することで、テストがレート制限を適切に処理できるようにします。
  4. テストを独立させる: 各 API テストが他のテストから独立していることを確認し、依存関係の問題なく任意の順序で実行できるようにします。
  5. エッジ ケースに重点を置く: ハッピー パスとエッジ ケース (無効な入力、大規模なデータ セット、レート制限など) の両方をテストして、すべての潜在的なシナリオをカバーします。

結論

API テストは、アプリケーションが外部サービスやバックエンド API に依存している場合でも、シームレスに動作することを保証するために不可欠な部分です。 Cypress は、UI テストと並行して API をテストするためのシンプルかつ強力な方法を提供するため、最新の JavaScript アプリケーションを扱う開発者にとって優れた選択肢となります。 cy.request()、アサーション、CI/CD 統合などの機能を活用することで、問題を早期に発見し、API の品質を保証する、堅牢で信頼性の高い API テスト スイートを構築できます。

今すぐ Cypress で API のテストを開始し、自動化された信頼性の高いテストで開発ワークフローを改善しましょう!

リリースステートメント この記事は次の場所に転載されています: https://dev.to/aswani25/api-testing-with-cypress-a-complete-guide-7p7?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3