Google Espresso 环境搭建以及简单使用教程


2013 GTAC谷歌介绍了Android平台自动化测试框架“Espresso”(Video, Slides),10月18号谷歌正式开放“Espresso”,使用Espresso可以写出简洁,漂亮并且可靠的Android UI测试。例如:

@Test
public void greeterSaysHello() {
  onView(withId(R.id.name_field)).perform(typeText("Steve"));

  onView(withId(R.id.greet_button)).perform(click());

  onView(withText("Hello Steve!")).check(matches(isDisplayed()));
}

Google Espresso

自动化测试对开发人员来说很重要,它不但可以节省时间,也可以减少我们犯错的概率。
当然最重要的还是那句话 不会偷懒的程序猿,不是好程序猿


Espresso环境搭建

1. 配置测试环境

Google推荐在测试的时候关闭设备的System animations,不论你用的是模拟器或者是真机。

关闭System animations,进入“设置”->“开发者选项”,找到以下三个选项并关闭。

  • Window animation scale(窗口动画缩放)
  • Transition animation scale(过渡动画缩放)
  • Animator duration scale(动画程序时长缩放)

2. 安装Espresso

进入SDK Manager下载Android Support Repository,下载完成之后,就可以在Android Studio中module下的build.gradle文件中配置以下代码,其中的版本号,视情况而定。

androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
androidTestCompile 'com.android.support.test:runner:0.5'

然后在build.gradle中android下继续配置defaultConfig,完整配置如下:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "22"

    defaultConfig {
        applicationId "com.my.awesome.app"
        minSdkVersion 10
        targetSdkVersion 22.0.1
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
}

dependencies {
    // App's dependencies, including test
    compile 'com.android.support:support-annotations:22.2.0'

    // Testing-only dependencies
    androidTestCompile 'com.android.support.test:runner:0.5'
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
}

至此Espresso环境已经搭建完成了,接下来可以进行一个简单的测试。

这里只是一个最基本的案例,具体更多的使用方法,可以查看Google的官方文档Espresso。

新建一个Activity,编写好基本的代码。

public class MainActivity extends AppCompatActivity {

    TextView mTextName;
    EditText mEditName;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mTextName = (TextView) findViewById(R.id.text_name);
        mEditName = (EditText) findViewById(R.id.edit_name);
        findViewById(R.id.btn_ok).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                sayHello();
            }
        });
    }

    public void sayHello() {
        mTextName.setText("Hello, " + mEditName.getText().toString().trim() + "!");
    }
}

如下图

Google Espresso 环境搭建以及简单使用教程_第1张图片

布局代码就不在这里贴出来了。然后在androidTest包下新建一个测试类,代码如下

import android.support.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.LargeTest;

import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;

import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.action.ViewActions.click;
import static android.support.test.espresso.action.ViewActions.closeSoftKeyboard;
import static android.support.test.espresso.action.ViewActions.typeText;
import static android.support.test.espresso.assertion.ViewAssertions.matches;
import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
import static android.support.test.espresso.matcher.ViewMatchers.withId;
import static android.support.test.espresso.matcher.ViewMatchers.withText;


@RunWith(AndroidJUnit4.class)
@LargeTest
public class MainActivityInstrumentationTest {

    @Rule
    public ActivityTestRule mActivityRule = new ActivityTestRule<>(
            MainActivity.class);

    @Test
    public void sayHello() {
        onView(withId(R.id.edit_name)).perform(typeText("world"), closeSoftKeyboard());
        onView(withId(R.id.btn_ok)).perform(click());
        String expectedText = "Hello, world!";
        onView(withText(expectedText)).check(matches(isDisplayed()));
    }

}

其中代码都很好理解,简单易懂。编写相应的测试类,也不会给我们增加多少工作量,反而会帮我们省下很多的测试时间。

onView(withId(R.id.edit_name)).perform(typeText("world"), closeSoftKeyboard());

这段代码的意思就是找到id为edit_name的view,并且执行输入操作,输入的值为world,输入完成之后关闭软键盘。其他代码类似,不一一赘述。

编写完测试类之后就要运行起来看一看效果如何了。接下来要新建一个test configuration。步骤如下:

  • Open Run menu -> Edit Configurations
  • Add a new Android Tests configuration
  • Add a new Android Tests configuration
  • Add a new Android Tests configuration

指定instrumentation runner

android.support.test.runner.AndroidJUnitRunner

新建完之后,即可运行刚刚新建的配置了。在Android Studio中选择好相应的module启动即可。

可以看到,程序自动运行并且自动输入相应的值,执行相应的操作。此时在Android Studio中打印的log信息如下:

Google Espresso 环境搭建以及简单使用教程_第2张图片
测试已经全部通过了,当然我们也这里也只有一个测试方法,可以写多个方法并加上 @Test 注解,就可以一次运行多个方法了。

你可能感兴趣的:(android,Espresso,ui,自动化测试,Android)