LoginSignup
41
39

More than 5 years have passed since last update.

AndroidのUIテスト(Spoon+Robotium)としてスクリーンショットを撮れるようにしてみた。

Last updated at Posted at 2014-11-08

テストとしてスクリーンショットを撮れるようにした

Android開発してて、いい加減テストをしたほうが良さげなので、テストコードを作成しようと思う。(イマゴロだけど・・・

まずはスクリーンショット撮れたら便利じゃね?ということで色々調査した結果、Spoonを採用した。
採用理由として、画像保存を端末内ではなく、テストの実行環境に保存してくれる。CIとか考えると便利。Square製というのも決め手の一つ。
Spoonの補助として、Robotiumを画面遷移とか、データ入力用に採用した。

開発環境

Android Studio v0.8.14
Mac OS X v10.10

実際にやってみた

ライブラリの設定

app/build.gradle
buildscript {
    repositories {
        jcenter()
    }

    dependencies {
        classpath 'com.stanfy.spoon:spoon-gradle-plugin:0.10.0'
    }
}

apply plugin: 'android-sdk-manager'
apply plugin: 'com.android.application'
apply plugin: 'spoon'

android {
    compileSdkVersion 20
    buildToolsVersion "20.0.0"

    defaultConfig {
        applicationId "com.github.shiraji.myapplication"
        minSdkVersion 15
        targetSdkVersion 20
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])

    androidTestCompile 'com.jayway.android.robotium:robotium-solo:5.2.1'
    androidTestCompile 'com.squareup.spoon:spoon-client:1.1.0'
}

Android Studioで簡単に起動したかったので、Spoonプラグインも導入した。
Spoonプラグインの設定のdependenciesはこのファイルに記載する。

実際にテストするActivityはHello WorldのレイアウトにEditTextを追加したもの。

activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <TextView android:text="@string/hello_world" android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/textView" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/edit_test_view"
        android:layout_below="@+id/textView"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true" />

</RelativeLayout>

それでは実際のテストコード

MainActivityTest.java
public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActivity> {

    private Solo mSolo;

    public MainActivityTest() {
        super(MainActivity.class);
    }

    @Override
    protected void setUp() throws Exception {
        mSolo = new Solo(getInstrumentation(), getActivity());
        super.setUp();
    }

    @Override
    protected void tearDown() throws Exception {
        mSolo.finishOpenedActivities();
        super.tearDown();
    }

    public void testMainActivity() {
        Spoon.screenshot(getActivity(), "start");
        mSolo.enterText((EditText)getActivity().findViewById(R.id.edit_test_view), "しらじ");
        Spoon.screenshot(getActivity(), "after_edit");
    }
}

setUpでRobotiumのSoloインスタンスを生成し、tearDownで開いた全アクティビティーをfinishしている。
testMainActivityが実際のテストで、起動直後にSpoonでスクリーンショットを撮影し、EditTextにしらじと入力し、再度スクリーンショットを撮影した。
スクリーンショットのタグ名はファイル名と同じ扱いなので、スペースなどは入力不可。

起動方法はSpoonプラグインを使っているので、Android StudioでGradle Tasksから実行すると

> Could not find class: apple.awt.CGraphicsEnvironment

こんな感じのエラーが出る。ただし、コマンドラインで./gradlew spoonDebugTestをするとしっかり動いてくれる。
調査しようかと思ったけど、別にコマンドで動くんだからそっち使えよってことで、気がむいたら調べる。

最終的に結果ファイルはapp/build/spoon以下に生成される。

こんな感じのgifファイルも含まれています。
testMainActivity.gif

実際に動かしたテストケースを端末別に、テストケースごとに保存してくれる。

スクリーンショット 2014-11-08 23.00.29.png

ログも取得できる。

スクリーンショット 2014-11-08 23.00.47.png

イマゴロだけど、夢が広がりだした。

41
39
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
41
39