一自动化测试简述
单元测试只能测试一个方法,测试的粒度比较细,对于app来说,用户频繁与运行中的APP交互,为了模拟这个场景,在运行中的APP中进行测试,需要一个自动化测试工具进行模拟用户与APP交互。现在选取的工具是espresso.
二espresso接入
首先在要运行的module的gradle文件添加如下依赖:
testCompile'junit:junit:4.12'
compile'org.apache.commons:commons-lang3:3.0'
androidTestCompile'com.android.support.test:runner:0.5'
androidTestCompile'com.android.support:support-annotations:25.3.1'
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
excludegroup:'com.android.support',module:'support-annotations'
})
并在defaultConfig添加一句:
testInstrumentationRunner'android.support.test.runner.AndroidJUnitRunner'
至此,依赖添加完成。
三编写测试代码进行测试
开始测试代码的编写,把项目切换到Android模式下,下面以灵机作为例子说明,如图:
可以看到在java文件夹下有三个一样的文件夹名字,第一个是源代码目录,第二个是放自动化测试代码的目录,
第三个是放单元测试代码的目录。现在在第二各目录放自动化测试代码。
新建LoginTest类:
这是测试登录功能,测试有个奇特的地方,测试代码要配置要测试的activity,启动测试时将直接打开该activity,但在测试过程中可以跳转到其他activity,并继续测试。配置activity语句为:
@Rule
publicActivityTestRulemActivityRule=newActivityTestRule<>(LoginActivity.class);
用到了注解,以为测试登录,将用代码生成用户名,密码,代码如下:
publicStringGetRandomUserName() {
String path = RandomStringUtils.random(random.nextInt(8),'4','的','到','G','B','C','分','个',
'从');
returnpath;
}
publicStringGetRandomPassword() {
String path = RandomStringUtils.random(random.nextInt(8),'E','G','B','C','K',
'G');
returnpath;
}
测试的思路是利用代码模拟用户输入及点击登录按钮,在espresso,利用onView(withId(R.id.XXX))寻找activity的控件,再利用perform()方法进行相应的动作,例如输入文字或点击按钮,
在灵机的登录界面,输入用户名及密码的语句为:
onView(withId(R.id.eit_login_userName)).perform(replaceText(GetRandomUserName()));
onView(withId(R.id.eit_login_userPassword)).perform(replaceText(GetRandomPassword()));
replaceText方法是输入文字的意思。、
输入后就点击登录按钮:
onView(withId(R.id.btn_login_sumbit)).perform(click());
因为想不停输入用户名密码,点击登录,在外层加了个循环,整个LoginTest类如下:
@RunWith(AndroidJUnit4.class)
@LargeTest
public classLoginTest {
privateRandomrandom=newRandom();
@Rule
publicActivityTestRulemActivityRule=newActivityTestRule<>(
LoginActivity.class);
publicStringGetRandomUserName() {
String path = RandomStringUtils.random(random.nextInt(8),'4','的','到','G','B','C','分','个',
'从');
returnpath;
}
publicStringGetRandomPassword() {
String path = RandomStringUtils.random(random.nextInt(8),'E','G','B','C','K',
'G');
returnpath;
}
@Test
public voidloginWithWrongPassword() {
while(true) {
onView(withId(R.id.eit_login_userName)).perform(replaceText(GetRandomUserName()));
onView(withId(R.id.eit_login_userPassword)).perform(replaceText(GetRandomPassword()));
onView(withId(R.id.btn_login_sumbit)).perform(click());
}
}
}
测试逻辑在loginWithWrongPassword()方法,很简单。
点击右键直接run这个方法,效果见视频。