【Squishノウハウ】Squish for Qt によるマルチプロセスアプリケーションのGUIテスト自動化

こちらの記事はAutomating Multi-Process Applications using Squish for Qtの抄訳です。

 

近年、Qtアプリケーションの多くはマルチプロセスアーキテクチャを採用しています。このようなシナリオでは、グラフィカルユーザーインターフェイスは単一のプロセスでレンダリングされるのではなく、複数のプロセスが使用され、それぞれがユーザーインターフェースの特定の部分を担当します。そして、中心となる(通常は非常に単純な)プロセスが、画面に表示される最終的なGUIを構成するために使用されます。

つまり、GUI テストのセットアップは、複数のプロセスを単一のアプリケーションと見なし、それぞれにフック(Squishからのアクセス)をすることができなければなりません。そうすれば、GUIがどのプロセスでレンダリングされたかに関係なく、GUIのどの部分に対して行われたユーザ操作や検証もテストスクリプトとして記録され、テストケース実行時に再現できるようになります。

同時に、サブプロセスが自動化されないケースも多くあります。例えば、ユーザーインターフェイスを全く描画しないものです。テストスクリプトを不必要な waitForApplicationLaunch関数で満たすと、テストの実行が遅くなり、GUI テストが AUT(Application Under Test : テスト対象のアプリケーション)の実装の詳細に依存するようになってしまうためです。

したがって、商用利用されるGUIテストツールにとって、自動化すべきサブプロセスとそうでないものを非常に細かく考慮し、制御することが重要となります。この記事では、Squishがフックすべきかどうかを決定する際に、特定のプロセスを含めたり除外したりする方法について説明します。

アプリケーションから起動されたサブプロセスの検出

デフォルトでは、Squish for Qt は、Squish を介して起動されたアプリケーションのみを自動化し、サブプロセスはすべて無視します。この挙動はSquish IDEで変更できます。Test Suite Settingsセクションで、AUT**セクションを開くと、そこにHook into sub-processes launched by the applicationと書かれたチェックボックスがあります。このボックスにチェックを入れると、Squishは自動化のためにサブプロセスも考慮するようになります。


AUT Settings In Test Suite Configuration

ただし、使用するOSによっては、さらに設定が必要な場合があります。

Windowsシステムでの明示的なオプトイン

Windows OSでは、フッキングは「オプトイン」です。つまり、テスト自動化に関連する子プロセスへのフッキングを明示的に有効にする必要があります。

最も簡単でAUTへの変更を最小限に抑えられるアプローチは、実行バイナリをSquishに同梱されているツールに置き換えることです。

  1. まず、子プロセスとなる実行ファイルのファイル名にアンダースコアを追加してください。つまり、使用するAUTがmychildapp.exeという名前の子プロセスを生成する場合、その子プロセスの名前にアンダースコアを追加します。

c:MyApp> rename mychildapp.exe myapp_.exe

  1. 次に、dllpreload.exeと呼ばれるSquish独自のツールを、元の実行ファイルのファイル名にコピーします。

C:MyApp> copy SQUISHDIRbindllpreload.exe mychildapp.exe

この変更により、mychildapp.exeのすべての呼び出しによりdllpreload.exeが実行されることで、それが自動的にmychildapp_.exeが実行し、Squishによってフッキングされるようになります。こちらついては、Squishユーザーガイドを参照してください。このガイドでは、Windowsプロセスにフックするための別のアプローチについても説明しています。

MacOSとLinuxシステムでのインクルード&エクスクルードリスト

macOSおよびLinuxで必要な作業は、Squish IDEでサブプロセスの検出を有効にすることのみです。チェックボックスをオンにすると、Squishはすべてのサブプロセスにフックするようになります。しかし、子プロセスの一部 (または大部分) を無視したい場合もあります。幸い、これは2つの設定を使用して簡単に行うことができます。

  • AUTの既知のサブプロセスのみをSquishにアクセスさせることも可能です。これを行うには、以下の環境変数ををテストスイートの suite.conf ファイルに追加します。(環境変数の設定はSquish IDEでも可能)

USE_WHITELIST=1

これにより、Squish は 「マップされた」アプリケーションのみをフックするようになります。これらは、Squish IDEのServer Settings -> Mapped AUTs、またはコマンドラインから設定することができます。たとえば、/usr/local/bin にあるmyappをマップされた AUT として登録するには、次のように実行します。

$ bin/squishserver --config addAUT myapp /usr/local/bin

これにより、squishserverに登録されていないプロセスは、すべて無視されます。

  • SQUISHDIR/etc/ignoredauts.txt のテキストファイルを編集することで、特定の実行ファイルを Squish が無視するように指定することもできます。各エントリは、別々の行に記述する必要があります。

これは、サブプロセスが未知であっても、明示的に無視したい既知の子プロセスがいくつかある場合に有効な方法です。

 

おわりに

以上が、記事の内容となります。

SquishをはじめとするQtのQA(品質保証)ツールにご興味のおありの方は、Qt JapanのEメールアドレス:japan@qt.ioまでお気軽にご連絡ください。

概要のご説明から詳細な技術的相談、また無料のツールトライアルのご案内もいたしております。


Blog Topics:

Comments