MDN’s new design is in Beta! A sneak peek: https://blog.mozilla.org/opendesign/mdns-new-design-beta/

この記事は、実際のFireFox OS 端末やB2Gデスクトップ、Gaia 自身内部にあるものに合わせた、Gaia UI テストの実行の仕方・流れの詳細を配信してます。Gaia プロジェクトは、コミット毎の継続的インテグレーションとプルリクエストテストをする為に、Treeherder を使用しています。

Gaia UI テスト は、実際の端末やエミュレーター、B2G Desktop クライアントで実行する性能をもって開発されています。もっとずっと簡単な方法は、B2G デスクトップに対して実行させることです。あなたがお使いのFirefox OS のバージョンと対して実行させる為に、Gaia の正しいブランチを選ばないといけないことを、忘れないで下さい。

 

B2G デスクトップ上でテスト

B2G クラインアントは、次のようなものです。:デスクトップから楽にFirefox OS上でwebアプリケーションのテスト実行に使える、B2Gのデスクトップ・バージョンです。もし、このテストに詳しくなければ、B2G デスクトップ・クライアント・テストの使用をお読み下さい。この項目では、B2GデスクトップでのUI テストの仕方を教えています。

ショートカット:手作業でのPCの環境設定が嫌でしたら、MozITPを使用できます。このツール・セットは自動で、仮想マシンのUbuntu と、任意のタイミングで1クリックで実物のデバイスやMulet 上でのテストを開始できる、gaia UI テスト環境を準備・設定してくれます。

 

前提条件

 ●デスクトップ版B2G をビルドして下さい。 ご自分のPCか仮想マシンのディレクトリに、こちら(試用版を含む)をダウンロードするか自身でコンパイルし、mozconfig ファイルに、ENABLE_MARIONETTE=1 この1行を追加して下さい。

Gaia Github repository がクローン(コピー)を生成し、確認します。ここでプロフィールを生成する必要があります。プロフィールの生成をしている間、DEBUG=1 で通過していけないことを、注意して下さい。Gaia プロフィールのデバッグの使用は、Gaia UI テストからB2G デスクトップ・インスタンスへ接続への失敗の原因となります。

testvars.json ファイル で以下を確認して下さい。

Configuring test variables

実物のデバイスが使用できず、電話レベル機能が必要ない場合、デスクトップ B2G クライアントは、テスト開発に理想的です。テストの実行が速く、入手しやすく、MacやWindows、Linux で行えます!

テストの実行

新しいテストの実行を確認して見ていきましょう。自分達の変更点が即拾い上げられるように、私達は、Gaia のリポジトリーから直接、gaiatest の作業tree内のバージョンをインストールしています。あなたがクローンを生成したGaiaのバージョンで、gaia/tests/python/gaia-ui-tests  へ移動し、下記の設定のコマンドを実行して下さい。

python setup.py develop

これは、仮想環境内で実行されない時、権限の拒否によるエラーを与えることがあります。その場合では、まだインストールされていないなら virtualenvvirtualenvwrapper をインストールします。

pip install virtualenv
pip install virtualenvwrapper (perhaps need to use sudo here)
export WORKON_HOME=~/Envs
source /usr/local/bin/virtualenvwrapper.sh
echo "source /usr/local/bin/virtualenvwrapper.sh" >> .bash (rc or _profile)

それから、仮想環境を作って入って下さい。

mkvirtualenv gaia-ui-test

私達がテストを始める場合、Marionette経由で gaiatest はB2Gデスクトップを起動できます。これをするには、B2GバイナリーファイルとB2Gプロファイルへのパスを渡しておく必要があります。下記の例では $HOME 変数に b2g バイナリーと b2g プロファイルを含めています。これは単に、B2Gデスクトップをダウンロード後に、zip展開した場所です。全てのテストを実行するコマンドは下記の通り:

gaiatest --binary=$HOME/b2g/b2g-bin --profile=$HOME/b2g/gaia/profile --testvars=testvars.json --restart --type=b2g ./gaiatest/tests/functional/manifest.ini

B2G デスクトップに互換性のないテスト — 例えば電話をかけたりSMS送信したりするもの — はテスト実行から自動的に省かれます。

コマンドライン上でファイルを直接呼んでテスト実行できます:

gaiatest --binary=$HOME/b2g/b2g-bin --profile=$HOME/b2g/gaia/profile --testvars=testvars.json --restart ./gaiatest/tests/functional/clock/test_clock_set_alarm.py

Firefox OS デバイスの上でのテスト

実際のFirefox OSデバイス上でのテストは、より複雑です。しかし、テストの中で実際のデバイス上でAPIにアクセスする(+ etc...)ため、より正確な結果を得る事ができます。全てのデバイスAPIや、ハードウェア機能といったものへアクセスできます。しなしながら、Firefox OS の実端末を持っていない場合や、使っている機能が実際のハードウェアを必要としない場合は、エミュレータ内で一般機能をテストすることもできます。

If you don't want to setup the environment manually. You can try MozITP, it will automatically setup a pre-configured Ubuntu VM and Gaia UI Test environment, so you can start testing on real device or simulator in one-click.

前提条件

  • Android Debug Bridge がPCにインストールされていること、udev rules configured が済んでいること
  • Marionetteが有効になっているビルドのソフトがフラッシュされた、Firefox OSデバイス
  • あなたのFirefox OSデバイスにフラッシュされたソフトをビルドした際、cloneしてcheck outしたものと同じブランチの、gaiaレポジトリ (Gaia Github repository
  • testvars.json ファイル  (詳しくは、他の関連セクションで説明されています)

テストを実行する

The gaiatest package is needed to run the tests. We need to install this for the branch that we want to run the tests on. Navigate to the gaia/tests/python/gaia-ui-tests/ directory and install gaiatest with this command:

python setup.py develop

Note: Before you start to run the test, read through this warning in order to acknowledge that running gaia-ui-tests on a device may cause data to be deleted from the device!

Debug Firefox OS builds: Firefox OS builds built with DEBUG=1 will need a greater timeout than the default (20 seconds). Try adding to the command line --timeout 60000 or higher, depending upon the speed of the device.

Marionette on the device awaits commands on port 2828. We need to forward our local port to the remote port on the device using adb. Run the following command:

adb forward tcp:2828 tcp:2828

Please be reminded that you'll need to start your emulator before the command, if you are not running on a real Firefox OS device.

You can use the following command to execute all the gaia-ui-tests:

gaiatest --address=localhost:2828 --testvars=<TESTVARS_FILE> --restart --type=b2g gaiatest/tests/functional/manifest.ini

Or use the following if you want to run a single test (substituting the last part for the actual test you want to run):

gaiatest --address=localhost:2828 --testvars=<TESTVARS_FILE> --restart gaiatest/tests/functional/clock/test_clock_create_new_alarm.py

After the test, you will see all the pass/fail results and stacktraces for each file.

Gecko とGaia 開発者向けの Treeherder を用いてテストを行う

In this section we will focus upon replicating a Treeherder test locally. Before testing locally with a Treeherder configuration, you need to be aware that it builds a Gaia profile separately. The profile that comes packaged with the Treeherder build or rel-eng build is NOT the same Gaia profile that Treeherder uses.

前提条件

  • A B2G desktop build. You can either download it (including from a Try push) and unpack to a directory on your computer or virtual machine or compile it yourself, with the addition of ENABLE_MARIONETTE=1 in your mozconfig.
  • The Gaia Github repository checked out (for making the Gaia profile, and installing gaiatest and the test files).
  • A testvars.json file; see Configuring test variables.

Treeherder 設定を使って Gaia プロファイルを作成する

Before building a profile we need to check the environment variables that were used to build the profile. Searching in the "brief log" of the Gu test run, find this command block:

Using env: {'DEBUG': '0',
            'DESKTOP': '0',
            'DESKTOP_SHIMS': '0',
            'NOFTU': '0'}

These settings can drastically change the way desktop B2G behaves. It is very important to match Treeherder's settings.

The next step is to checkout the git commit that matches the hg commit that Treeherder ran with. You can also find the hg commit in the "brief log" of the Treeherder run but you will need to correlate that with the git commit yourself.

The gaia test repository includes a make script for building a Gaia profile. Navigate to the Gaia repo that you have cloned locally, and build the profile using the environment variables we found on Treeherder:

DEBUG=0 DESKTOP=0 DESKTOP_SHIMS=0 NOFTU=0 make

テストを実行する

Using the same git commit that Treeherder used to run the test, go to the gaia/tests/python/gaia-ui-tests directory and install gaiatest using the following command:

python setup.py develop

Now that you have built the Gaia profile, the only significant difference to running these tests is that you must direct gaiatest to the binary location and profile location.

Inside the gaia-ui-tests directory, run the below command, with the following substitutions made:

  • $BINARY_PATH: The path to the b2g-bin file in the directory you have built or unpacked desktop B2G to.
  • $PROFILE_PATH: The path to your locally build Gaia profile. If built from the Gaia repository it will be ~/gaia/profile.
gaiatest --binary $BINARY_PATH/b2g/b2g-bin --profile $PROFILE_PATH/profile --restart --testvars testvars.json gaiatest/tests/manifest.ini --type=b2g

Note: There is no need to forward port 2828 unless you have set the Marionette server to use a different default port.

Important: Try to keep your mouse cursor clear of the b2g window so that pointer events do not pollute the test run.

入り組んだ Treeherder ジョブの中から HTML レポートを見つける

All Treeherder jobs (both pass and fail) have an HTML report output generated and stored.

  1. For the commit and Gip job, click the chunk of interest (e.g., f1, f2).
  2. In the status bar at the bottom of the screen find the section titled: output.html.
  3. Click link to view the report.

既に実行済みのデスクトップ B2G バイナリをテストする

In this section we will look at running the tests against an already running Desktop B2G binary with modified source code.

前提条件

  • A B2G desktop build with your Gecko changes. You can either download it (including from a Try push) and unpack to a directory on your computer or virtual machine or compile it yourself, with the addition of ENABLE_MARIONETTE=1 in your mozconfig.
  • Your debugger of choice attached to the B2G binary.
  • The Gaia Github repository checked out (for installing gaiatest and the test files).
  • A testvars.json file; see Configuring test variables.

テストを実行する

Running tests against an existing b2g process is quite easy — you've already gone through the hard parts to build B2G!

If you have not already installed gaiatest then do so now by going to gaia/tests/python/gaia-ui-tests and running the following:

python setup.py develop

Once you have started the b2g binary process and attached your debugger you need to direct gaiatest to the port using the --address command. Do not use --binary or --profile, otherwise gaiatest will just send commands directly to the port without attempting to start or close the binary.

gaiatest --testvars testvars.json gaiatest/tests/functional/test_that_is_being_debugged.py

Note: We have omitted the --restart command too. As gaiatest does not attempt to stop or start the binary, some data from your test run may be left behind in Firefox OS databases or even in the DOM. It is your responsibility to reset B2G back to a basic state before trying to run the test for a second time.

テスト変数を設定する

You can customize variables used during the test using a testvars.json file. The gaia-ui-tests will wipe the databases on your phone in order to give the test a clean profile to run against. Gaiatest contains protection against running and wiping your device's data. Please read the warning before you set up your test variables file.

We use the --testvars option to pass in local variables, particularly those that cannot be checked into the repository. For example in gaia-ui-tests these variables can be your private login credentials, phone number, or details of your WiFi connection.

To use it, copy testvars_template.json to a different filename but add it into .gitignore so you don't check it into your repository.

When running your tests add the argument: --testvars=(filename).json

(端末用の) testvars.json  を使って WiFi 設定する方法

By setting the WiFi key in testvars.json you can configure the Firefox OS Settings database with your WiFi configuration. Then the test cases can use your WiFi connection.

No WiFi authentication:

"wifi": { "ssid": "MyNetwork"} 

WEP authentication:

"wifi": { "ssid": "MyNetwork", "keyManagement": "WEP", "wep": "MyPassword" } 

WPA-PSK authentication:

"wifi": { "ssid": "MyNetwork", "keyManagement": "WPA-PSK", "psk": "MyPassword" } 

Note: Due to バグ 775499, WiFi connections via WPA-EAP are not possible at this time.

トラブルシューティング

この節では、いくつかのよくあるエラーメッセージを、潜在的な解決策を挙げつつ解説します。

テスト開始前によくある問題

エラーメッセージ 対応策
error: [Errno 111] Connection refused

"adb forward tcp:2828 tcp:2828" コマンドを再発行する

B2G プロセスが実行されていない

Element ... not visible before timeout テストするアプリにて、要素(element)が表示されている事を確認する
TimeoutException: Condition timed out アプリの条件が、期待しているのと同じである事を確認する
marionette.errors.MarionetteException: localhost:2828 is unavailable. 何者か、よくあるのが `adb forward` コマンドがポートをブロックしている。`adb kill-server` で解決するか、アプリを停止することでポートは開放される
ImportError: No module named bluetooth

コマンド内で、 --type=b2g
--type=b2g-bluetooth
に置き換える、あるいは pybluez Python bluetooth パッケージをインストールする

OSError: [Errno 2] No such file or directory: '~/moz/gaia/profile' コマンドラインにて、 $HOME のつもりで ~ を使っていないかどうか確認する

 

ドキュメントのタグと貢献者

 このページの貢献者: chrisdavidmills, Uemmra3, hamasaki, Keikocanary, tsuyogoro
 最終更新者: chrisdavidmills,