この記事は「Reqnroll × Playwrightで始めるE2Eテスト入門」シリーズの一部です。
E2Eテストとは?単体テスト・結合テストとの違い
ソフトウェア開発では、品質を保つためにさまざまな種類のテストが行われます。
その中でも E2Eテスト(End to Endテスト) は、システム全体の動作を確認するための重要なテストです。
本記事では次の内容を解説します。
- E2Eテストとは何か
- 単体テスト・結合テストとの違い
- E2Eテストの具体例
- E2Eテストのメリットとデメリット
これから 自動テストやE2Eテストを導入する方は参考にしてください。
E2Eテストとは
E2Eテストとは End to End(エンドツーエンド)テストの略で、
システム全体の動作を確認するテストです。
ユーザーが実際に操作する流れを再現し、アプリケーションが正しく動作するか確認します。
例えばWebアプリの場合、次のような流れをテストします。
- ログインページを開く
- IDとパスワードを入力する
- ログインボタンをクリックする
- マイページが表示される
このように ユーザー操作を最初から最後まで確認するテストがE2Eテストです。
テストの種類
ソフトウェア開発では、主に次の3種類のテストが行われます。
| テスト種類 | テスト対象 |
|---|---|
| 単体テスト | クラス・メソッドなどの小さな単位 |
| 結合テスト | 複数のモジュールの連携 |
| E2Eテスト | システム全体 |
それぞれのテストには役割があります。
単体テストとは
単体テスト(Unit Test)は、最も小さな単位のテストです。
例えば次のようなものです。
- クラス
- メソッド
- 関数
例
価格計算メソッド
↓
入力:100円
↓
出力:税込110円このように 1つの処理が正しく動くかを確認するのが単体テストです。
単体テストの特徴
- 実行が高速
- 問題箇所を特定しやすい
- 開発中に頻繁に実行できる
結合テストとは
結合テスト(Integration Test)は、複数のモジュールが連携して動作するか確認するテストです。
例えば次のようなケースです。
Controller
↓
Service
↓
Repository
↓
Databaseこれらが連携して正しく動作するかを確認します。
結合テストでは次のような内容をテストします。
- APIの動作
- データベースとの連携
- 複数クラスの処理
E2Eテストの特徴
E2Eテストは、システム全体の動作を確認するテストです。
例えばWebアプリでは次のような操作を自動化します。
ブラウザを開く
↓
ページを表示
↓
ボタンをクリック
↓
フォーム入力
↓
画面遷移このように ユーザーが実際に行う操作を再現するテストです。
単体テスト・結合テスト・E2Eテストの違い
3つのテストの違いをまとめると次のようになります。
| テスト | 対象 | 特徴 |
|---|---|---|
| 単体テスト | メソッド・クラス | 最も小さい単位 |
| 結合テスト | 複数モジュール | 連携を確認 |
| E2Eテスト | システム全体 | ユーザー操作を再現 |
テスト範囲のイメージ
単体テスト
↓
結合テスト
↓
E2Eテスト下に行くほど テスト範囲が広くなります。
E2Eテストのメリット
E2Eテストには次のメリットがあります。
実際のユーザー操作を確認できる
E2Eテストでは、実際のユーザー操作に近い形でテストできます。
そのため 実運用に近い問題を発見できる可能性があります。
システム全体の問題を発見できる
単体テストや結合テストでは見つからない
- 画面遷移の問題
- UIの問題
- API連携の問題
などを検出できます。
E2Eテストのデメリット
E2Eテストにはデメリットもあります。
テスト実行に時間がかかる
E2Eテストはブラウザ操作などを行うため、
単体テストに比べて実行時間が長くなります。
テストが壊れやすい
UIの変更などにより、E2Eテストが失敗することがあります。
例えば
- ボタンID変更
- HTML構造変更
などです。
そのため メンテナンスが必要になることがあります。
E2Eテストの自動化ツール
E2Eテストは、ツールを使って自動化することができます。
代表的なツール
- Playwright
- Selenium
- Cypress
特に最近は Playwright が人気です。
Playwrightについては、以下の記事で詳しく解説しています。
→ Playwrightとは?Seleniumとの違いをわかりやすく解説
Reqnrollと組み合わせたE2Eテスト
E2Eテストは BDDツールと組み合わせることも可能です。
例えば Reqnroll を使うと、
自然言語に近い形でテストを書くことができます。
例
Feature: Login
Scenario: ログイン成功
Given ログインページを開く
When IDとパスワードを入力
Then マイページが表示されるReqnrollについては、こちらの記事で解説しています。
→ Reqnrollとは?SpecFlowとの違いと特徴を解説
まとめ
本記事では E2Eテストと他のテストの違いについて解説しました。
ポイント
- E2Eテストはシステム全体をテストする
- 単体テストはメソッド単位のテスト
- 結合テストはモジュール連携のテスト
- E2Eテストはユーザー操作を再現する
E2Eテストを導入することで、より実運用に近い形でシステムの品質を確認することができます。
