テスト自動化における 10 のベスト プラクティス #5: データ駆動型テスト
データ駆動型テストとは ?
テスト自動化の大きな利点のひとつは、データ駆動型テストを実施できることです。
データ駆動型テストでは、テストケースがExcelシートやデータベースファイルといったデータソースから入力値を取得します。
テストケースは、データソースの各行のデータに対してテストが繰り返されます。10人のテスターが10個の異なるデータ値について、手動でテストケースを実行する代わりに、自動化テストでは 1回のテストで100パターンのテストケースを実行することができます。
ユーザー登録処理のテストケースを考えてみましょう。以下の表にあるような列と行から構成されるデータソースが考えられます。
名 | 性 | 目的のユーザー名 | 目的のパスワード | 期待される結果 |
John | Jones | jjones14 | Mypass123 | Pass |
Jody | Jones | jjones14 | Mypass456 | Fail |
Julia | Jones | jjones15 | mypass | Fail |
また、バリデーションの期待値が外部ソースにある場合、データ駆動型テストではテスト結果を期待値と比較し、テストケースの合否を判断できます。たとえば、計算機アプリケーションの「乗算」機能のテストであれば、以下のようなデータテーブルが考えられるでしょう。
入力 1 | 入力 2 | 期待される結果 |
12 | 12 | 144 |
15 | 50 | 750 |
-1 | 18 | -18 |
どちらの例でも、「実際のテスト結果」を「期待される結果」と比較してテストケースの合否を判断できます。
データ駆動型テストの利点
実行時間の削減
最も分かりやすい利点の一つとして、沢山のテストケース (特にポジティブ/ネガティブテストや端/境界をカバーする反復テスト)を迅速に実行できることです。
正確性の向上
沢山のデータを手動で入力する場合、慎重なテスターでさえもミスを起こすことがあります。
データ駆動型テストであれば、Excelシートやデータベースで指定された正確なデータを使ってテストケースを実行できます。
システムおよび人的資源の利用の改善
自動化されたデータ駆動型テストは、テスト環境が使用されない夜間に実行できます。手動テスターはテストデータの入力から解放され、もっとチャレンジングな探索的テストやユーザーエクスペリエンステストに集中することができます。
テストケースの管理の削減
テストスクリプトとテストデータを分離すると、さまざまな点で管理が削減されます。
まず、テストスクリプトに影響を与えずにテストデータを変更することで、テストケースを簡単に追加/削除できます。良く設計されたデータ駆動型テストをエラー処理および条件実行と組み合わせることも、冗長なテストケースを減らすのに役立ちます。たとえば、さまざまな種類の有効/無効なパスワードをチェックするテストケースを幾つも用意する代わりに、データ駆動型テストでは1個のテストケースを保守するだけで済みます。
テストデータのストレージの改善
データ駆動型テストでは、Excelシート、CSVファイル、データベース ファイルといったデータをすべて、リポジトリに管理できます。そのため、データの共有、再利用、バックアップ、そして保守が容易になります。
テスト以上のものをサポート
アプリケーションが期待どおりに動作していることを検証するのに加えて、データ駆動型テストは負荷テストとパフォーマンステストのためのデータ入力をシミュレーションするためにも使用できます。また、実環境のデータベースにデータを投入するためにも使用できます。
データ駆動型テストのベストプラクティス
テストスクリプトとテストデータを分離する
テストケースに直接、データを格納するのではなく、データテーブルを使ってテストの入力値と検証値を用意しましょう。テストケースに値をハードコーディングすると、テストケースが保守しにくくなり、他のテスターが理解することも難しくなります。同様に、システム変数などのテスト環境の設定についても、外部データテーブルを使って値を指定するべきです。
※Ranorex によるテスト実行でパラメーターを使ってシステム変数を設定する方法については「Ranorex ユーザーズ ガイド」をご参照ください。
現実的なデータを使用する
データテーブルのデータが、テストシナリオを適切に網羅していることを確認してください。成功を期待するデータと、失敗を期待するデータの両方をテストデータに含めましょう。これらのテストケースを網羅するデータの作成には、境界値分析が有効です。
たとえば、数字のみを受付ける入力フォームの値の範囲が1から100まで場合、成功を期待するテストには1、2、99、100 といった値が含まれるでしょう。これらの値でテストケースが成功する場合、1から100までのすべての数字をテストする必要はありません。また、失敗を期待するテストには-1、0、101、102といった値が含まれるでしょう。データ駆動型テストへの別のアプローチは、運用データの一部に対してテストケースを実行することです。これは、アプリケーションが実際に処理するようなデータを確実にテストがカバーするために役立ちます。
セットアップ/ティアダウンモジュールを使用する
テストケースでは、テストデータを含め必要なテスト環境を構成し、後でクリーンアップするべきです。したがって、テストケースがデータソースから、沢山のデータ行を読み込んでアプリケーションに入力する場合、作成したレコードを削除するティアダウンステップをテストケースに含めるべきです。このプラクティスは、テストケースを互いに独立させ、テスト全体が成功する可能性を押し上げます。
エラー処理を入れる
あるテストケースが失敗したときに何をするべきかを決定するための処理をデータ駆動型テストに含めましょう。たとえば、Ranorexには、検証エラーを処理するために次のオプションがあります。
- 次の繰り返しに移動して続行:実行中のテストケースにて、データソースの次のデータ行を使ってテストを継続します。
- 次のテストケースに移動して続行:実行中のテストケースを終了後、同じ階層にある次のテストケースに移動してテストを継続します。
- 次の親テストケースに移動して続行:実行中のテストケースを終了後、親の階層にあるテストケースに移動してテストを継続し、テスト実行を完全に終了するために停止します。
Ranorex でのデータ駆動型テストの詳細については「Ranorex ユーザーズ ガイド」をご参照ください。
(この記事は、開発元 Ranorex 社 Blog 「10 Best Practices in Test Automation #5: Data-Driven Testing」2018年5月17日の記事を元にしています。)