CI環境で失敗したテストケースを再現する

さまざまな構成で自動化テストを実行する際、ほとんどの場合、仮想マシンを使用します。しかし、あらゆる物事と同様に、問題が発生する可能性はあります。

本記事では、異なるテスト構成を使用する仮想マシンのCI環境で自動回帰テストを実行する際に起こりうる問題を示し、それらの問題をRanorex Remote(Ranorex Agent)で解決する方法について説明します。

  • 問題の発生
  • 解決方法 1:エラー状態を手動で再現する
  • 解決方法 2:CI環境でテスト実行をトリガーする
  • 解決方法 3:仮想マシン上で自動化ステップをローカル実行する
  • 解決方法 4:Ranorex Remoteを使用して、 仮想マシン上で 自動化ステップを実行する

問題の発生

アジャイル環境で品質保証に取り組んでいるとしましょう。その場合、特定の仮想マシンでのみテストが失敗するという問題が発生する可能性があります。テストを作成したローカルマシンでは、問題なくテストが実行できます。

なぜこのようなことが起こるのでしょうか ?

これには、たとえば以下のような原因が考えられます。

  • 更新ウィンドウなどの予期しないポップアップ
  • 仮想マシンでブラウザーウィンドウが期待どおりにクローズされない
  • テスト対象システムの動作がローカルマシンと異なる
  • 地域固有のシステム設定 (システム言語など) がローカルマシンの設定と異なる

では、どのようにこのエラーになる動作を解決できるでしょうか?

解決方法 1:エラー状態を手動で再現する

最初に考えられる解決方法は、エラーにつながる条件を手動で再現することです。
つまり、テスト結果レポートを確認し、エラーの場所とその前のステップを調査し、エラーの原因を特定する必要があります。エラーの再現方法が分かったら、リモートマシンに接続し、失敗状態を正確に再現するのに必要なすべての手順を繰り返すことができます。

テストのワークフロー全体が複雑でない場合、このアプローチは正しい方法と考えられます。しかし、正確なシステムの状態を再現するために必要な手順が多いほど、対応に時間がかかり、この解決方法を選ぶ意味が低下します。したがって、この方法はほとんどのユースケースで実用的ではありません。

解決方法 2:CI環境でテスト実行をトリガーする

2つ目の解決方法として、「解決方法 1」で説明した手動による手順を自動化するのが自然なことのように思えます。エラー発生時にテスト対象システムの実際の状態を得るための自動化された手順がテスト自動化プロジェクトとして既に存在する場合、手動テストを置き換えるには、CI環境のテスト実行ビルドで、コマンドライン引数を変更して、失敗したテストケースのみを実行します。またデータ駆動型テストを使用し、テストケースに設定された外部データ(テストデータ)がある場合は、テスト実行時間を最小限に抑えるために、使用するデータ範囲を指定する必要があります。

※Ranorexにおける、コマンドライン引数の詳細については、ユーザーガイドにある「ランタイム/リモート実行」を参照してください。

この方法を採る場合、実行できるテストケースは 1 つだけです。これは、グローバルセットアップ(前処理)およびティアダウンセクション(後処理)を実行したり、モジュール(テストスクリプト)を無効にしたりといった操作ができないことを意味しますが、これらの操作は、目的のシステム状態を復元するために必要な場合があります。

この制限を克服するには以下の方法があります。

  1. 新規にテスト実行の構成を用意するか、既存の構成を変更し、必要に応じて、データソースのデータ範囲を指定して、目的のテスト対象のシステム状態にします。
  2. バージョン管理システムに変更をコミットします。
  3. 変更した構成を使って、CI環境でテスト実行ビルドをトリガーします。

しかし、不要な変更をバージョン管理システムにコミットすると、改訂履歴が台無しになるため、この方法には問題があります。不透明で複雑なバージョン履歴は、特に開発チームと連携して作業する場合には望ましくありません。

解決方法 3:仮想マシン上で自動化ステップをローカル実行する

「解決方法 2」で説明した理由により、テスト実行の構成の変更をバージョン管理システムにコミットする必要はありません。CI環境を使用せずに、仮想マシン上のテスト環境で自動化した手順を実行することは理にかなっています。テスト環境にリモート接続し、自動化プロジェクトを確認します。 次に、テスト実行の構成を変更し、失敗したテストケースのみが実行されるようにします。

しかし、ほとんどの場合において、ビルドとテストの実行後、継続的インテグレーションシステムではマシンをクリーンアップします。そのため、仮想マシン上にあるテスト環境には、自動化プロジェクトが存在しないことになります。そのため、自動化プロジェクトを仮想マシンに手動でコピーする方法が考えられますますが、これには共有ネットワークドライブなどが必要です。

これに対し、 Ranorex Remoteを使用することで、上記の問題を解決し、テスト対象システムでのエラーの再現を、より簡単な方法でおこなうことができます。

解決方法 4:Ranorex Remoteを使用して、仮想マシン上で自動化ステップを実行する


Ranorex Remoteを使用するには、以下の操作を実行します。

  1. Ranorexのユーザーガイドにある「Ranorex Agent」で説明しているように、テスト環境にRanorex Agentをインストールします。
  2. エラーが発生した状態に到達するのに必要な手順だけを実行するように、テスト実行の構成を変更します。
  3. Ranorexのユーザーガイドにある「Agentによるリモート実行」セクションで説明しているように、Ranorex Agentでリモートテストを実行します。

これらの手順を行うと、テスト対象システムは、エラーが発生したときと同じ状態になります。これで、仮想マシンに接続し、失敗したテストケースを調べることができます。Ranorex Remoteは、仮想マシン上で失敗したテストケースを再現するための、最も迅速で快適な方法であると言えます。

失敗したテスト実行の調査に加えて、Ranorex Remoteはテストの作成時にも役立ちます。新規に作成したテストスクリプトをリモートエージェント(Ranorex Agent)で実行するだけです。リモート先のマシン上でテストが実行されている間、自身のマシンで自由に作業を行うことができます。

テスト実行後、レポートが生成され、自動的に通知がおこなわれます。レポートからすべてが期待どおりに動作しているかどうかを再確認した後、バージョン管理システムに変更をコミットします。