【DataSpider】テスト自動化のためのテスティングフレームワークの活用
BI技術者の雑記
DataSpiderのテスティングフレームワークを利用すると、テストスクリプトを簡単に作成し、開発した機能の自動テストを実行することができます。
今回は、DataSpiderのテスティングフレームワークを使ったテストの一部をご紹介します。
1.概要
テストスクリプトとは、DataSpiderで開発した各機能を自動的にテストするためのプログラムです。
テストケースに基づいて、各機能が正しく動作するか確認できます。
テストスクリプトは、DataSpiderのGUIから作成することができるので、コーディングの知識がなくても比較的簡単に作成できます。
テストスクリプトを作成することで、テストの反復実行や自動テストの実行が可能となり、開発の効率化にもつながります。
用意されているテストを支援する機能として以下があります。
機能 | 目的 |
---|---|
テストプロジェクト | プロダクションプロジェクトとテストの分離 |
別プロジェクトのスクリプト呼び出し | サービス登録前のプロダクションスクリプトのテスト |
アサーションアダプタ | データやフロー分岐の確認など、プロダクションスクリプトが期待通りの動作をするかを検証 |
スクリプトの一括実行 | テストの実行 |
テスト結果レポートの出力 | 自動レポーティング機能 |
これらの機能を使用し、プロダクションスクリプトのテストを行います。
<用語の説明>
用語 | 説明 |
---|---|
プロダクションプロジェクト/スクリプト | 実際のサービス運用で使用するプロジェクト/スクリプト |
テストプロジェクト/スクリプト | プロダクションスクリプトをテストするためのプロジェクト/スクリプト |
以下、今回のテスト対象とするプロダクションスクリプトのスクリプトイメージです。
- logging_startで、開始ログをログテーブルに書き込みます(スクリプト呼び出し)
- transaction~commit間で、トランザクションを開始してターゲットテーブルに対してDeleteInsert処理を行います(トランザクション、SQL実行<更新系>、SQL実行<検索系>、マッピング、書き込み<更新/挿入>)
- 例外が発生しなかった場合
- logging_endで、終了ログをログテーブルに書き込みます(スクリプト呼び出し)
- Endで、戻り値「0」を返します(end)
- 例外が発生した場合
- logging_errorで、エラーログをログテーブルに書き込みます(スクリプト呼び出し)
- exceptionで、戻り値「-1」を返します(例外通知)
次に、上記のプロダクションスクリプトをテストするためのテストスクリプトを作成していきます。
事前準備として以下を行います。
- テストケース、テストシナリオの洗い出し
- テスト対象となる機能について、期待される結果を確認します
- テストデータの用意
- テストケースに必要な入力データや期待データなどを用意します
2.テストプロジェクトの作成
プロダクションスクリプトをテストするためのテストプロジェクトを作成します。
- 「新規プロジェクト」画面を開きます。
- [テストプロジェクトを作成]にチェックを入れてテストプロジェクトを作成します。
※特に制約はありませんが、プロダクションプロジェクトとテストプロジェクトは1対1で作成すると分かりやすいです。
「project-A」というプロダクションプロジェクトに対し、「project-A_test」というテストプロジェクトを作成するイメージです。
3.テストスクリプトの作成
- テストプロジェクトを右クリック > [新規作成] > [スクリプト]を選択して、テストスクリプトを作成します。
- テスト対象であるproject-Aの動作を確認するためのテストスクリプトを、以下のように作成しました。
スクリプトキャンバスに配置したテストに必要な処理は主に以下となります。
- プロダクションスクリプトを呼び出す処理「スクリプト呼び出し」
- テスト対象のプロダクションスクリプトが想定通りに動作するかを検証(アサート)する「アサーションアダプタ」
3-1 正常系のテストスクリプト
ここで使用するアサーションアダプタと検証内容は以下です。
- 変数比較処理: スクリプト変数検証、実行スクリプトの戻り値検証
- テーブルモデル比較処理: 実行ログ検証
- in_args、でテスト対象のプロダクションスクリプトに渡す引数の設定をします(変数代入)
- scriptで、テスト対象のプロダクションスクリプトを呼び出し実行します(スクリプト呼び出し)
- assert_var、assert_exitStatusで、スクリプト変数の設定値と戻り値が期待と一致しているか確認します(変数比較)
- select_imp_table、filter_impで、ターゲットテーブルの確認対象データを取得します(テーブル/ビュー読み込み、マッピング)
- assert_imp_tableで、取得したデータと事前に準備した期待データ(csv)が一致しているか確認します(テーブルモデル比較)
- log_start~write_log_enc間で、ログテーブルに登録される想定データを作成します(マッピング、CSVファイル書き込み)
- select_log_table、filter_logで、ログテーブルの確認対象データを取得します(テーブル/ビュー読み込み、マッピング)
- assert_log_tableで、作成した想定データとログテーブルの対象データが一致しているか確認します(テーブルモデル比較)
3-2 異常系のテストスクリプト
ここで使用するアサーションアダプタと検証内容は以下です。
- 変数比較処理: スクリプト変数検証、実行スクリプトの戻り値検証
- テーブルモデル比較処理: 出力データ検証、実行ログ検証
- アサーション例外:
プロダクションスクリプトが正常終了した場合、アサーション例外を発生させます。
アサーション例外処理は、異常系のエラーチェックなどでフロー上到達してはいけない場所のアサーションを行います。
- in_argsで、テスト対象のプロダクションスクリプトに渡す引数の設定をします(変数代入)
- lock_tableで、指定テーブルをロックします(SQL実行<更新系>)
- scriptで、テスト対象のプロダクションスクリプトを呼び出し、実行します(スクリプト呼び出し)
- assert_failで、例外が発生しなかった場合は、テスト結果を失敗とするため、アサーション例外を発生させます(アサーション例外)
- プロダクションスクリプトが異常終了となった場合は、例外監視処理(try~catch)の例外処理(catch)に到達するので、ここで異常系の検証を行うことができます
- assert_var、assert_exitStatusで、スクリプト変数の設定値と戻り値が期待と一致しているか確認します(変数比較)
- log_start~write_log_enc間で、ログテーブルに登録される想定データを作成します(マッピング、CSVファイル書き込み)
- select_log_table、filter_logで、ログテーブルの確認対象データを取得します(テーブル/ビュー読み込み、マッピング)
- assert_log_tableで、作成した想定データとログテーブルの対象データが一致しているか確認します(テーブルモデル比較)
※アサーション例外は、ログレベルがFINFO以下の場合のみ実行されるので、ログレベルをINFO以下に設定します。
4.テストスクリプトの実行
テストスクリプトの実行は、デザイナからテストスクリプトをプロジェクト単位で一括実行できます。
- テストプロジェクトの右クリックメニュー[スクリプトを一括実行]を選択します。
- [実行]ボタンをクリックします。
- 実行が完了すると、テスト結果レポートの情報が表示されます。
5.テスト結果レポートの確認
テストスクリプトを一括実行すると、テスト結果レポートが出力されます。テスト結果の合否を確認し、必要に応じてテストスクリプトやプロダクションスクリプトの改修を行います。
※テスト結果レポートはスクリプトの一括実行時のみ出力されます。
実行結果が失敗した場合は、どの箇所でどのような問題があるのか大体分かるように結果レポートに出力されます。
6.おわりに
DataSpiderのテスティングフレームワークの活用について、テストスクリプトの作成方法や実行手順についてご紹介しました。
慣れるまで多少時間がかかるかもしれませんが、テストスクリプトを活用することで以下のようなメリットがあります。
- テストの実施時間の短縮
- 人的ミスの軽減
- 品質の維持や開発プロセスの改善
追加修正に伴う確認作業が簡単にでき、全リグレッションテストも可能なのでこれだけも取り入れる価値は十分にあります。
さらに、テスト仕様もテストスクリプトを見れば一目瞭然なので、テストにおける面倒な作業から解放されるメリットもあります。
また、ケースやデータパターンを増やしてテストの網羅性を高め、スクリプトの可読性を向上させることで、品質の向上やコストの削減も期待できます。
ぜひ積極的に活用してみてください。
<参考サイト>
●DataSpider Servistaヘルプ
※DataSpiderは、株式会社セゾン情報システムズの商標または登録商標です。