首先我也是刚开始熟悉自动化测试这一块,算是边学习边记录分享,如有不足可以指出,万分感谢
单元测试相信对于大家算是最熟悉的陌生人了,很多人都听过,但是一般很少有人写,尤其是自动化的测试代码 对于Android这样重UI的程序来说,更是难以测试
Espresso是Google官方开源的一款测试框架,使用比较简单 它提供了控件定位、各种测试动作、判断等一系列方便的API用于编写自动化测试的代码, 它还可以检测到主线程空闲的状态, 能让系统在适当的时间运行测试命令, 简而言之就是如果你的应用某个按钮会触发网络请求等耗时的操作, 那么Espresso会检测这个请求完成后再继续执行下面的代码,无需手动去Sleep一段时间等待请求完成, 当然对于网上各种各样的框架是需要进行一定设置改造的,这个会在后面具体介绍
名字是Espresso意式浓缩咖啡,意思是在你编写完测试代码运行后,就可以端着个咖啡在旁边悠哉了
首先帖下官方的资料
Google Github io 的介绍主页 https://google.github.io/android-testing-support-library/docs/espresso/index.html
安卓开发者中心的Training教程中的介绍 http://developer.android.com/intl/zh-cn/training/testing/ui-testing/espresso-testing.html
环境搭建的方法教程里都有,我这里再介绍一遍 首先我的开发环境是Android Studio, 如果用Eclipse的同学暂时就爱莫能助啦
修改Project 中的 build.gradle 主要修改3处:
1) 在defaultConfig内增加
1
2
3
defaultConfig {
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
2) 增加packagingOptions,避免编译时候Liscens的冲突;
1
2
3
4
5
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE'
}
3) 在dependencies中增加Espresso相关的引用
1
2
3
4
5
6
7
8
9
10
11
12
androidTestCompile('com.android.support.test:runner:0.3') {
exclude module: 'support-annotations'
}
androidTestCompile('com.android.support.test:rules:0.3') {
exclude module: 'support-annotations'
}
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2') {
exclude module: 'support-annotations'
}
androidTestCompile('com.android.support.test.espresso:espresso-intents:2.2') {
exclude module: 'support-annotations'
}
注意:
修改3中, 如果项目中没有导入过annotations可以单独加一个 compile ‘com.android.support:support-annotations:22.2.0’ 然后修改3中的 { exclude … } 就可以删掉了,比如只要 androidTestCompile(‘com.android.support.test:runner:0.3’) 如果其他地方有导入或包含annotation,且存在版本上的冲突,则按照修改3那样即可
然后环境搭建就OK啦 Android Studio新建项目时会默认生成一个 src/androidTest/java/com.example.package/ 目录 没有的话也可以自己手动创建
然后我们在其中添加测试类即可,一般来说测试页面的话最好在androidTest包下建个和开发代码通目录的类, 比如登录页LoginActivity那么对应的测试类一般是LoginActivityTest在类名后面加个Test, 当然这种都是习惯问题,不用完全遵守 (其实我也不太清楚存放规则,有熟悉的可以和我说下)
系列下一章我们介绍具体代码编写