スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

scirocco

Scirocco


androidのUIテストのためのツールという前情報だけでsciroccoに突撃してみました。
結果いろいろなことがわかりましたが、それは最後に。
とりあえず心の中の突っ込みと回答を博士と助手風に・・・

ドキュメントの大部分は引用になり、そこに補足を入れていく形です。
権利侵害とかでしたらお手数ですがご連絡いただければ・・・・

 
http://code.google.com/p/scirocco/wiki/QuickStartScirocco_JP

実際にEclipseにSciroccoを導入する手順は以下のようになります.
  1. Eclipse を起動 *1)
  2. メニューバーから[ヘルプ]を選択
  3. [Install New Software] をクリック
  4. Work with 欄の右にある [Add...] ボタンをクリック
  5. それぞれ下のテーブルのように入力してOKボタンをクリック
  6. Select Allを選び、[Next] をクリック
  7. リストにSciroccoFeatureが有る事を確認して[Next] をクリック
  8. I accept the terms of the license agreement を選んで Finish を押すとインストールが開始 *2)*3)


*1 もしEclipseがまだインストールされていない場合、http://www.eclipse.org/helios/へアクセスし、 Eclipse 3.6 (Helios) をインストールしてからSciroccoの導入作業を行って下さい.
*2 もしSecurity Warningのダイアログが表示された場合はOKを選択してインストール作業を続行して下さい下さい.
*3 もしSoftware Updatesのダイアログが表示された場合はRestart Nowを選択して、Eclipseを再起動して下さい.
Q:eclipse3.5だとエラーが出ます
A:Heliosを使えって書いてあるもの。


Sciroccoの設定
  1. Eclipseメニューの[環境設定] > [Scirocco] を選択し、Android SDK Locationを指定してOKをクリック

Scirocco TMS URLの設定についてはSciroccoTMS導入時に行います.詳しくはQuickStartSciroccoTMS_JPを参照して下さい.

サンプルアプリを使った動作確認

サンプルアプリとサンプルテストコードのダウンロード

  1. ブラウザからhttp://code.google.com/p/scirocco/downloads/listへアクセス
  2. リストからExampleApplicationProject_v1.0.zipをダウンロードしてworkspaceへ置く
  3. ExampleTestProject_v1.0.zipも同様

Q:使い方が今のところよくわからない・・・
A:きっとこのサンプルを落とせばわかるに違いない。概要とかなくても不安になる必要はない。コードを見た方がわかるのがプログラマだ!JavaDocとか特に期待するな。そんな大きいライブラリじゃないので不要なんだきっと。

Q:テストプロジェクトが2つあるけど・・・
A:とりあえずバージョン合わせて1.1にしとけばよかろう


ファイルのインポート

  1. Eclipseを開く
  2. メニューバーから[File]を選択
  3. [import]をクリック
  4. [Existing Project into Workspace]を選択して[Next] をクリック
  5. Select achieve file欄の右にある[Browse] ボタンをクリック
  6. ExampleApplicationProject_v1.0.zipも同様

注意

Mac 環境の場合はDLした際にファイルが自動解凍されている場合が有ります。その場合は手順5,6において、Select achieve fileではなくSelect root directoryを選んで、対象のファイルを[import]して下さい。

サンプルアプリの設定確認

アプリケーションプロジェクトのAndroidManifest.xmlを開き、以下のパーミッションが設定されている事を確認してください。この設定はテスト時にスクリーンショットを取得する場合に必要です。
       <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Q:パーミッションがないです!
A:テストプロジェクトにじゃない。対象のプロジェクトに必要なんだ。


サンプルテストコードの設定確認

ExampleTestProjectのlibフォルダ内に以下のjarファイルが有る事を確認して下さい。
  • robotium-solo-2.3-javadoc.jar
  • robotium-solo-2.3.jar
  • scirocco.jar

*これらのファイルはExampleApplicationProjectには有りません。
Q:svnの設定がついてきていますけど・・・
A:素直に切断してやるのが大人だ。むしろそうしないとエラーが解決できないぞ。


Scirocco JUnit Test の実行

Scirocco によるテストの実行方法です。Scirocco JUnit Test は実機でもエミュレーターでも実行する事が出来ます。
実行方法は以下のようになります。
  1. 対象のテストクラスを右クリック
  2. メニューの中から[Run As] > [Scirocco JUnit Test]

以上の手順だけでScirocco によるテストが開始します。 テスト中は操作が自動で行われます。
テストの実行が終わると、テストプロジェクト内にsciroccoフォルダが作成されます。テスト結果が記述されたテスト報告書は、sciroccoフォルダ内に格納されています。

結果

JUnitのビュー


結果


report.htmlを開いてみる。
サマリと
TestCase毎のスクリーンショットなど。


なかなか素敵な結果レポートを作ってくれますね。
単体風ではないですが、まぁそのへんはどうせあやふやになるのでいいか


というわけでSciroccoExampleTestProjectを見ていこうと思います。

ExampleTestProject

まずは何はさておき、Manifest.MFだ。
先ほど権限の確認がてら開いたかもしれないけども、必要なのは以下2定義。あとは普通だ。
<instrumentation android:targetPackage="com.example.android.notepad" android:name="android.test.InstrumentationTestRunner" />
<uses-library android:name="android.test.runner" />


※ちなみにTest対象のtestsには以下記載
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.example.android.notepad.tests">

<!-- We add an application tag here just so that we can indicate that
     this package needs to link against the android.test library,
     which is needed when building test cases. -->
<application>
    <uses-library android:name="android.test.runner" />
</application>

 <instrumentation android:name="android.test.InstrumentationTestRunner"
  android:targetPackage="com.example.android.notepad"
  android:label="NotePad sample tests">
 </instrumentation>

</manifest>


いよいよNotePadTest
import android.test.ActivityInstrumentationTestCase2;
public class NotePadTest extends ActivityInstrumentationTestCase2<NotesList>{
          public NotePadTest() {
                        super("com.example.android.notepad", NotesList.class);
          }

この辺は、普通のandroidTestCaseだ。
わからない場合、以下を読むべし
https://sites.google.com/site/androidtestclub/translation/activity-testing
https://sites.google.com/site/androidtestclub/translation/testing-and-instrumentation

private static SciroccoSolo solo;
public void setUp() throws Exception {
          solo = new SciroccoSolo(getInstrumentation(), getActivity());
}

@Override
public void tearDown() throws Exception {
    try {
            //Robotium will finish all the activities that have been opened
            solo.finalize();    
    } catch (Throwable e) {
            e.printStackTrace();
    }
    getActivity().finish();
    super.tearDown();
}

ここがScirocco独特といった感じか・・・実際のところ、TearDownに関してはSciroccoではないですけども

また、テストケースにはアノテーションが2つほど。
@Scirocco(testProcedure="2件のノートを追加する。<br> 1件目:Note 1 <br> 2件目:Note 2",
confirmationContents="2件のノートが追加されること")
@Smoke

@Sciroccoに関しては結果レポートに表示される内容を記述しています。

@Smokeに関してはよくわかりませんが、、、
Marks a test that should run as part of the smoke tests. The android.test.suitebuilder.SmokeTestSuiteBuilder will run all tests with this annotation.


testAddNoteを見る。日本語でコメント入れてみました。
//スクリーンショットを撮ります(ここがシロッコ)
solo.takeScreenShot();

//メニューのアイテムをクリックさせる。方法としてはラベル指定
solo.clickOnMenuItem("Add note");

//起動するActivityを検証する
solo.assertCurrentActivity("Expected NoteEditor activity", "NoteEditor");
solo.takeScreenShot();

//0番目のテキストフィールドにNote 1と入力
solo.enterText(0, "Note 1");
solo.takeScreenShot();

//NotesListというActivityに戻る。
solo.goBackToActivity("NotesList");

solo.takeScreenShot();

//再度メニューのアイテムをクリック
solo.clickOnMenuItem("Add note");

//先頭のEditTextに入力
solo.enterText(0, "Note 2");

//NotesListというActivityに戻る。
solo.goBackToActivity("NotesList");
boolean expected = true;
//画面上の文字列を検索して、入力したテキストが見つかるか?
boolean actual = solo.searchText("Note 1") && solo.searchText("Note 2");
assertEquals("Note 1 and/or Note 2 are not found", expected, actual);
solo.takeScreenShot();


ラベルを元に~などちょっと気持ち悪いですよね・・・
こういうのが嫌なので
Mockitoが好きだったりするのですが、まぁそれはそれとして、嫌な部分を書き直すとこんな感じか。
一部はちゃんとIDを元に指定できるのはいいですね。Optionはなさそうなので残念。
//メニューのアイテムをクリックさせる。⇒テキスト以外の指定は出来ない
solo.clickOnMenuItem(context.getText(R.string.menu_insert).toString());
//⇒テキスト以外の指定は出来ない

//起動するActivityを検証する⇒classによる指定も可能
solo.assertCurrentActivity("Expected NoteEditor activity", NoteEditor.class);

Activity currentActivity = solo.getCurrentActivity();
EditText editText = (EditText) currentActivity.findViewById(R.id.note);
//EditTextを指定で入力値を設定
solo.enterText(editText, "Note 1");

//戻るボタン
solo.goBack();

//再度メニューのアイテムをクリック
solo.clickOnMenuItem(context.getText(R.string.menu_insert).toString());

//参照が変わっているので再取得
currentActivity = solo.getCurrentActivity();
editText = (EditText) currentActivity.findViewById(R.id.note);
//先頭のEditTextに入力
solo.enterText(editText, "Note 2");



robotium

http://code.google.com/p/robotium/
結局はこいつが本体です。
sciroccolib-javadoc.jarが入っていて、中を見ればわかるけど、Soloのみ記載がある。結局のところ、そういうことだ。Soloをわかればいいんだ。ということで。

まとめ

scirocco自体はrobotiumの便利拡張といった認識でいればいいかと思います。
単体テストはまあ別のも(robotium)ですね。


いじょうざk




NativeDriverというのもあるらしいです。
http://code.google.com/p/nativedriver/
関連記事

コメントの投稿

非公開コメント

スポンサードリンク
アプリ一覧
最新記事
最新コメント
最新トラックバック
検索フォーム
月別アーカイブ
カテゴリ
RSSリンクの表示
リンク
QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。