データベースの値の検証2

Ranorex では、データベースの値を比較する専用の機能は用意しておりませんが、Ranorex が持ついくつかの機能を組み合わせることで、実現することが可能です。
過去に投稿したブログ記事「データベースの値の検証」にてご紹介している方法を利用することで、テスト実行中に更新されたデータベースの値検証なども可能になります。
今回は、こちらの記事でご紹介した「ユーザーコードを使用する方法」に焦点を当て、SQL Server の値の検証方法をご紹介します。サンプルコードでは、Ranorex のデータ駆動型テストの機能を使用して、期待値を用意したデータソースとデータベースのデータを比較します。
※本記事では、Ranorex v10.2.2 を使用しています。
ユーザーコードコレクションの作成
ユーザーコードコレクションに作成したメソッドは、すべてのモジュールで使用できます。
1. Ranorex Studio のツールバーから、「ユーザーコードコレクションの追加」を選択します。

2. 任意のユーザーコードコレクション名を入力し、「作成」ボタンを押します。

3. 追加された「ユーザーコードコレクション名.cs」にて、「using System.Data.SqlClient;」を追加します。

4. 「public class ユーザーコードコレクション名」のクラス内で右クリックし、「新しいメソッドの追加」を選択します。

5. 「メソッド名」に任意の名前を設定します。

6. 追加されたメソッド内で、データベースの接続、データの取得、値の検証などの処理を記述します。
今回は、SQL Server で作成した以下の「Ranorex」データベースの「Product」テーブルのデータを使用します。
※別のデータベースをご利用の場合、コード内容は異なります。

上図のデータベーステーブルの ProductName 列の値と 下図の データソースの expectedValue 列の値を比較します。
※データベーステーブルの ProductId と データソースの id を紐づけます。

以下がサンプルコードになります。今回は、メソッド引数を後に変数化し、データソースと連携します。
public static void DatabaseValidation(string databaseName,string id,string expectedValue)
{
//データベースのサーバー名、データベース名、Windows認証設定の情報
var builder = new SqlConnectionStringBuilder();
builder.DataSource = @"サーバー名";
builder.InitialCatalog = databaseName;
builder.IntegratedSecurity = true;
var connectionString = builder.ToString();
//SQLQuery文(ProductテーブルでProductIDが{id}のProductNameを取得する)
var sql=$"select ProductName from Product where ProductID = {id}";
using (var connection = new SqlConnection(connectionString))
using(var command = new SqlCommand(sql,connection))
{
connection.Open();
using(var reader = command.ExecuteReader())
{
reader.Read();
var productName = Convert.ToString(reader["ProductName"]);
//Ranorex のAPIで用意されているValidate機能を使用
Validate.AreEqual(productName,expectedValue,"データベースの更新値検証:実際の値="+productName+","+"期待値="+expectedValue);
}
}
}
このサンプルコードでは、Ranorex API の Validate.AreEqual メソッドを使用しています。こちらは、テスト実行時の値と期待値を比較する機能になります。
詳細につきましては、こちらをご参照ください。API ドキュメントは、Ranorex Studio のメニュー > 「ヘルプ」>「API ドキュメント」からご確認できます。
ユーザーコードアクションの使用
1. 対象のモジュールを開き、上のアクションテーブルで右クリックし、「新しいアクションの追加」 > 「ユーザーコード」 > 「ライブラリから選択」をクリックします。

2. ライブラリから作成したユーザーコードメソッドを選択します。

3. 追加されたユーザーコードアクションを選択し、「databaseName」に接続先のデータベース名を入力します。(今回は、接続先のデータベースは1つのため、固定値で入力します。)

4. 「id」と「expectedValue」は変数化します。
- ▼をクリックし、「As new variable」を選択します。
- 任意の変数名を入力します。


変数化後は、先頭に$が付き、緑の文字列になります。

データソースと変数の連携
ユーザーコードアクションの使用-手順4で作成した変数とデータソースを連携します。
変数とデータソースの連携についての詳細は、以下のユーザーガイドをご参照ください。
テスト実行と結果の確認
1. テストスイート画面から「RUN」ボタンをクリックし、テスト実行します。

2. レポート結果を確認します。
データ駆動型テストにて、3行分のデータが検証されたため、テストケースが3回実行されています。

まとめ
今回のようなユーザーコードを記述することで、データベースの値検証がおこなえます。今回のサンプルコードは、Ranorex の Validation (検証)とデータ駆動型テストの機能を使用した検証になります。そのため、テスト結果がテストケースごとの出力になりましたが、データソースの取り込みや反復処理などの複雑なコードを記述することで、1つのテストケースですべての行と列の値を検証することも可能になります。