近年、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は自動化のためにサブプロセスも考慮するようになります。
ただし、使用するOSによっては、さらに設定が必要な場合があります。
Windows OSでは、フッキングは「オプトイン」です。つまり、テスト自動化に関連する子プロセスへのフッキングを明示的に有効にする必要があります。
最も簡単でAUTへの変更を最小限に抑えられるアプローチは、実行バイナリをSquishに同梱されているツールに置き換えることです。
c:MyApp> rename mychildapp.exe myapp_.exe
C:MyApp> copy SQUISHDIRbindllpreload.exe mychildapp.exe
この変更により、mychildapp.exeのすべての呼び出しによりdllpreload.exeが実行されることで、それが自動的にmychildapp_.exeが実行し、Squishによってフッキングされるようになります。こちらついては、Squishユーザーガイドを参照してください。このガイドでは、Windowsプロセスにフックするための別のアプローチについても説明しています。
macOSおよびLinuxで必要な作業は、Squish IDEでサブプロセスの検出を有効にすることのみです。チェックボックスをオンにすると、Squishはすべてのサブプロセスにフックするようになります。しかし、子プロセスの一部 (または大部分) を無視したい場合もあります。幸い、これは2つの設定を使用して簡単に行うことができます。
USE_WHITELIST=1
これにより、Squish は 「マップされた」アプリケーションのみをフックするようになります。これらは、Squish IDEのServer Settings -> Mapped AUTs、またはコマンドラインから設定することができます。たとえば、/usr/local/bin にあるmyappをマップされた AUT として登録するには、次のように実行します。
$ bin/squishserver --config addAUT myapp /usr/local/bin
これにより、squishserverに登録されていないプロセスは、すべて無視されます。
これは、サブプロセスが未知であっても、明示的に無視したい既知の子プロセスがいくつかある場合に有効な方法です。
以上が、記事の内容となります。
SquishをはじめとするQtのQA(品質保証)ツールにご興味のおありの方は、Qt JapanのEメールアドレス:japan@qt.ioまでお気軽にご連絡ください。
概要のご説明から詳細な技術的相談、また無料のツールトライアルのご案内もいたしております。