テスト自動化における 10 のベスト プラクティス #5: データ駆動型テスト

データ駆動型テストとは ?

テスト自動化の大きな利点のひとつは、データ駆動型テストを実施できることです。
データ駆動型テストでは、テストケースがExcelシートやデータベースファイルといったデータソースから入力値を取得します。

テストケースは、データソースの各行のデータに対してテストが繰り返されます。10人のテスターが10個の異なるデータ値について、手動でテストケースを実行する代わりに、自動化テストでは 1回のテストで100パターンのテストケースを実行することができます。

ユーザー登録処理のテストケースを考えてみましょう。以下の表にあるような列と行から構成されるデータソースが考えられます。

名      目的のユーザー名目的のパスワード期待される結果
JohnJones   jjones14             Mypass123          Pass
JodyJones   jjones14Mypass456Fail
JuliaJones   jjones15mypassFail

また、バリデーションの期待値が外部ソースにある場合、データ駆動型テストではテスト結果を期待値と比較し、テストケースの合否を判断できます。たとえば、計算機アプリケーションの「乗算」機能のテストであれば、以下のようなデータテーブルが考えられるでしょう。

入力 1入力 2期待される結果
1212144
1550750
-118-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日の記事を元にしています。)