Ubuntu Weekly Recipe

第257回 AutopilotでかんたんUIテスト

この記事を読むのに必要な時間:およそ 5 分

GUIアプリケーションにおいてユーザーインターフェースのテストは重要です。今回はUnityとUbuntuのインストーラーのUIテスト自動化のために開発された,Autopilotの使い方について紹介します。

Autopilotとは

冒頭でも述べたとおりUIのテストは重要なのですが,ユーザーの操作が必要になることから自動化が難しい分野でもあります。例えば過去のインストーラーの品質評価では,テスト項目を記載して複数のユーザーに手動でインストールを実行してもらい,問題を洗い出すという対応を行っていました注1)⁠

しかしこれでは作業コストがかかりすぎてしまいますし,アルファやベータリリースのようなマイルストーン毎でないとなかなかテストユーザーが集まりません。このためこれまでも,少なくともインストーラーのテストの自動化は急務であるという認識がありました。さらに,UbuntuはUnityという独自のインターフェースを開発・採用していることもあって,UI全般のテスト自動化の必要性も高まっていました。

そこで開発されたのがAutopilotです。AutopilotはPythonで書かれた,GUIユニットテストフレームワークであり,python-testtoolsやpython-xlibをベースにテストフレームワークの実行やインプットデバイスのエミュレーションができるようになっています。

また,DBusを使って各種ツールキットの状態を取得できるイントロスペクションも実装されているため,既存のアプリケーション側を変更することなく,ユーザー操作に対するアプリケーションの動作を確認することができるようになる予定です。ただし現時点ではこの部分はほぼUnityのみの対応になっています。

Autopilotを使うと,Ubuntu上のUIテストをPythonを書くだけでかんたんに自動化できるのです。

注1
例えばLibreOfficeのテスト項目はこんなに長くなっています。

インストールとUnityのテスト

それではまずAutopilotをインストールしましょう。Autopilotの動作にはUbuntu 12.04以上が必要です。12.10以上であれば公式のリポジトリにパッケージが存在しますので,12.10以上を使うことをおすすめします。

$ sudo apt-get install python-autopilot unity-autopilot

最後のunity-autopilotパッケージは,Unityのテストスクリプト集です。そこで実際にこのテストスクリプトを実行して,どんなことができるか確認してみましょう。listコマンドを使うと,実行可能なテストIDの一覧が得られます。例えばUnityのテストスイートの一覧を取得する場合は次のコマンドを実行してください。

$ autopilot list unity
    unity.tests.launcher.test_capture.LauncherCaptureTests.test_launcher_capture_while_not_sticky_and_hidden
    unity.tests.launcher.test_capture.LauncherCaptureTests.test_launcher_capture_while_sticky_and_hidden_moving_right
    unity.tests.launcher.test_capture.LauncherCaptureTests.test_launcher_captures_while_sticky_and_revealed
    unity.tests.launcher.test_capture.LauncherCaptureTests.test_launcher_not_capture_while_not_sticky_and_hidden_moving_right
    unity.tests.launcher.test_capture.LauncherCaptureTests.test_launcher_not_capture_while_not_sticky_and_revealed
(以下略)

同じテストを複数のテストパターン(シナリオ)で実行する場合は,テストIDの前に数字が表示されます。

実際にいくつかのテストを試してみましょう。UIテスト時は,自動的にマウスやキーボードの操作が行われます。不用意な設定変更やデータの消去を避けるためにも,ゲストアカウントでログインしてから実行した方が良いでしょう。ゲストアカウントは右上の歯車アイコンから「ゲストセッション」を選ぶことでログインできます。

ゲストセッションに移行したらrunコマンドに実行したテストIDを指定します。端末を開いて次のコマンドを実行してください。

$ autopilot run unity.tests.test_dash.DashKeyNavTests.test_lensbar_enter_activation
.
----------------------------------------------------------------------
Ran 1 test in 7.302s

OK

これは,Dashを開いてカーソルキーでフォーカスを移動し,最終的にアプリLensをEnterキーで表示させるテストです。AutopilotはDBus経由でUnityの状態を監視し,期待通りアプリLensのアイコンにフォーカスがあたること,アプリLensを表示後はアプリLensアイコンのフォーカスが外れる(入力欄にフォーカスが移動する)ことを確認します。

キーボードやマウスの操作をエミュレートできるため,ibus-anthyを使った日本語入力に関係するテストも可能です。次のテストは,DashやHUDから日本語を入力し注2)⁠その結果が期待通りになっているかを,いくつかのパターンで確認します。

$ autopilot run unity.tests.test_ibus.IBusTestsAnthy.test_anthy
............
----------------------------------------------------------------------
Ran 12 tests in 86.568s

OK

ちなみにunityテストスイートのすべてのテストを実行する場合は,テストスイート名を指定します。ただしかなり時間がかかります。

$ autopilot run unity
注2
入力文字列の最後に半角空白が入っているため,日本語変換までを入力時に行っています。つまり,変換の第一候補が異なる環境ではこのテストは失敗します。

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member株式会社 創夢所属。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。

コメント

コメントの記入