自動テスト中にカバレッジ率を取得する方法について

こんにちは SmartBear 製品営業部です。GUI テスト自動化ツールの TestComplete の開発元である SmartBear 社では、アプリケーションのプロファイラーとして AQtime Pro を提供しています。
AQtime Pro は C0 レベルのカバレッジの取得、パフォーマンスのボトルネックやメモリーリークなどを検出することができ、32bit および、64bit の .NET、Java、Delphi、C++ Builder などのさまざまなアプリケーションを解析することができます。

TestComplete と AQtime Pro は連携することが可能であり、TestComplete で機能テストを自動実行し、同時にアプリケーションのプロファイリングも実行することができます。
今回のブログの記事では、TestComplete から AQtime Pro を起動し、プロファイリングを行う方法について紹介します。

  • テスト対象のアプリケーション: Coverage.exe (C# で作成。AQtime Pro のサンプルに含まれます)
  • プロファイラーの種類:カバレッジ (C0 レベルを取得)

まず、対象のアプリケーションをプロファイリングするには、管理者権限が必要となりますので、TestComplete を管理者権限で実行します。
TestComplete のプロジェクトを作成し、TestedApps に Coverage.exe を追加します。

Basic Prameters 項目の Run Mode: を Profile に変更します。
今回はテスト中のカバレッジを計測するため、Run-Mode Parameters 項目の Profiler: の種類は Coverage Profiler を選択します。その他の設定は必要に応じて行ってください。既存の AQtime のプロジェクトを用いることもできますが、デフォルトでは一時的な AQtime プロジェクトを生成します。(このプロジェクト ファイルはプロファイリング後に削除されます)

テスト中のプロファイリングを行う場合、AQtime Pro の起動後、対象のアプリケーションが実行されるまで、時間を要するケースがありますので、Run Tested App の後に Delay などを使用して待機時間を設けることを推奨します。

TestComplete でプロファイリング モードでテストを実行すると、はじめに AQtime Pro が起動し、その後シナリオ通りにテストが実行されます。
以下、実行結果のスクリーンショットです。
TestComplete のログには、AQtime Pro でプロファイリングが開始されたことがログに記録されています。
AQtime Pro の Result タブを開くことで、実行したテストのカバレッジ率が表示されます。

AQtime Pro のプロファイリング結果は、テスト対象のアプリケーションの終了時、または AQtime Pro に対してコマンドでリザルトの生成を指示したタイミングで生成されます。
TestComplete のログに AQtime Pro のリザルトを表示させることはできませんが、XML 形式で AQtime Pro のリザルトを出力し、TestComplete のログに XML ファイルへのリンクを記録することができます。AQtime Pro のリザルトを出力するには、TestComplete のテストシナリオ内で設定する必要があります。

次のステップでは、AQtime Pro のリザルトを TestComplete のログに記録する方法を紹介します。

TestComplete のプロジェクトを開き、TestedApp.Run メソッドより返される AQtime オブジェクトを変数に格納する準備をします。※ この情報はリザルトを出力する際に必要となります。

1. KeywordTest の Operations – Statements – Set Variable Value を選択し、Run TestedApp の直後に挿入します。

2. 今回は作成中のキーワードテストに変数を用意するため、対象のキーワードテスト (この場合 Test1 [Local]) を選択し、[Add Variable] ボタンをクリックして、変数を作成します。

3. Variable の Type は “Object” を選択します。

4. 作成した Variable (ここでは Var1) を選択し、[Next >] ボタンをクリックします。

5. 次のステップでは、 Mode、Value 共に “Last Operation Result” を選択します。

以下のようにキーワードテストに追加されます。

Set Variable Value は指定した情報をテスト中に変数に格納します。
今回のケースでは実行されたアプリケーションのオブジェクトを変数に格納しています。

次に、AQtime Pro のプロファイリングが完了するまでの一時的な待機と、リザルトを出力するための設定を追加します。

6. TestActions から Run Code Snippet を選択し、アプリケーションを終了した直後に挿入します。

7. コード内で AQtime オブジェクトを指定する必要がありますので、[Select Variable…] ボタンをクリックし、先程作成した Variable を選択します。
KeywordTests.Test1.Variables.Var1 の後に以下のコードを記述します。
WaitAndExportResults(“C:\\temp\Log\\MySummaryResults.xml”, “C:\\temp\Log\\MyResults.xml”)
※ 保存先のパスおよび、ファイル名は任意に指定していただけます。

以下のようにキーワードテストに追加されます。

実行結果のログは以下のように表示され、リンクをクリックすることで、XML ファイルを参照できます。

AQtime Pro と統合することで、TestComplete で作成した機能テストを実行しながら、アプリケーションのプロファイリングも行うことができますので、効率良くアプリケーションのテストを行うことができます。
今回はカバレッジ率を取得しましたが、AQtime Pro ではパフォーマンスや、メモリーのプロファイリングもサポートしています。

AQtime Pro との統合の詳細な情報や、スクリプトのサンプルコードは、以下のサイトでご確認いただけます。
https://support.smartbear.com/testcomplete/docs/working-with/integration/aqtime/index.html

AQtime Pro 製品概要:
https://www.xlsoft.com/jp/products/smartbear/aqtime.html

TestComplete / AQtime Pro 評価版申請サイト:
https://www.xlsoft.com/jp/products/smartbear/download.html