Android自动化测试

一自动化测试简述

单元测试只能测试一个方法,测试的粒度比较细,对于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模式下,下面以灵机作为例子说明,如图:


Android自动化测试_第1张图片

可以看到在java文件夹下有三个一样的文件夹名字,第一个是源代码目录,第二个是放自动化测试代码的目录,

第三个是放单元测试代码的目录。现在在第二各目录放自动化测试代码。

新建LoginTest类:


Android自动化测试_第2张图片

这是测试登录功能,测试有个奇特的地方,测试代码要配置要测试的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这个方法,效果见视频。

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