
データ駆動テスト(Data-driven testing)は Parameterized testingやTable-driven testingとも呼ばれる方法です。mablではテストデータを活用したテストをデータ駆動テストと呼んでいます。今回はDatatableを使ったテストの紹介です。
データ駆動テストの動きとその恩恵
データ駆動テストは以下のような動きをします。
- データソースからテストデータを取り出します
- アプリケーションのフォームに取り出したデータを入力します
- 実行結果を予測していた結果と比較して確認します
- 次に使いたい入力データをつかってテストを繰り返し実行します
データ駆動テストからは様々な恩恵を受けられます。
- 再利用性: どんなテストでも、何回でも、異なった入力値を使ってテスト実行できます
- 多重性: データ駆動テストは通常ひとつのケースやその実行で使いますが、データを変えることで様々なバリエーションのテストケース実行ができるようになります
- 効率性: データ駆動テストは、少ないコードでたくさんのケースを生成できます
- ロジックの分離: テストケースのロジックと実際のテストデータを明確に分離できます
- テストカバレッジの向上: 継続的に入力データを増やしていくことで、テストの網羅性も高めていけます
データテーブル(DataTable)の作成
データテーブルはConfiguration > DataTablesから作成します。CSVをアップロードしたり、スプレッドシートやエクセルからコピーして作ることもできます。

ここでは、ログイン画面で使うEメールアドレス、パスワードをデータとして定義しました。それぞれ「ログイン成功」と「ログイン失敗」というシナリオを想定しています。
データテーブルの設定

データテーブルを読み込む方法はいくつかあります。まず、テストを作成する際に上記のようにデータテーブルを設定できます。データテーブルは複数設定可能です。

データテーブルがテストに紐付いている場合、上記のようにPlanのStage設定に表記されます。右上の鉛筆マークをクリックし・・・

データテーブルを設定も可能だし・・・

上記のように「Ignore DataTables」を選べば、特定のPlanでデータテーブルをはずして実行も可能です。
データテーブルの利用

テストにデータテーブルを設定すると自動的にデータが読み込まれます。変数({x}) > Viewを開くと上記のようにemailとpasswordが読み込まれているのがわかるはずです。

データテーブルの初期値(デフォルト値)は、トレーナーの変数({x}) > Createから設定します。DetaTableではなく「Data source」を選択するのがポイントです。

変数({x}) > Viewを開くと、Data-driven scenarioに変数が追加されているのがわかります。データもデフォルト値になっています。

テストの詳細画面を見てみます。Data-driven variablesにデフォルト値の設定が入っていました。またDataTablesに上記のようなメッセージが表示されています。
データテーブルにない変数(Column)が追加されています。テスト実行するとデフォルト値(ここではadmin)が全テスト実行で使われます。
つまり、このRole変数やそのデフォルト値の設定はConfiguration > DataTablesに保存されません。

さらに、変数のManageを開いてみましょう。デフォルト値が「Default value」とだけ表示されています。emailとpassword にはデータテーブル1行目のデータが入っていますが、デフォルト値をここから設定することも可能です。
データテーブルはその列データで変数を自動的に作成し、行ごとのデータを上書きしていきます。もし、特定の列データが設定されていない場合は、デフォルト値が設定されていればそれが使われます。
ちょっとややこしいですが、データの一元管理を考えると、全データはデータテーブルで管理すべきでしょう。さらにデフォルト値がある場合は、上記のように設定するのも手ですが、データテーブル内で指定すればわかりやすそうです。
取得したデータは様々な場所で利用可能です。
- アサーションでの利用
- 今回のように入力値として利用
- 遷移先のURLとして利用
- 他の変数を生成する時に利用
- カスタムJavascriptで利用
データテーブルのシナリオ名

データテーブルでテスト実行すると、どれがどのシナリオかわからなくなるため、上記のように「Invalid case data-driven variables」とシナリオ名を表示してくれます。
データテーブルで乱数を設定する

データテーブルでは乱数も設定可能です。
まとめ
データテーブルで網羅性を高めるのは利点ですが、実行回数が増えるという欠点もあります。データテーブルを使うと実行回数が劇的に増加します。例えば以下のケースで考えてみましょう。
- テストは3ケース
- ケースA: データテーブルなし
- ケースB: データテーブルあり(7行)
- ケースC: データテーブルあり(11行)
- ブラウザはChromeとFirefoxの2つ
実行回数は (1+7+11) x 2 = 38 となり、1回の実行で38 test runになります。mablは実行回数ベースの金額設定なのでご利用は計画的に。
また、テストで共通して使うデータをテーブルに1行で設定すれば、変数を完結に管理できます。ただし、やりすぎるとたくさんのデータテーブルができてしまい管理が煩雑になるため注意が必要です。