您的位置:首页 > 编程语言

使用Record Espresso Test功能自动生成测试代码

2016-10-30 00:06 876 查看
上一篇文章介绍了如何使用Espresso框架编写自动化测试代码,算是一篇Espresso的入门文章吧,如果还不知道Espresso如何编写测试代码的,建议看一下上一篇文章,毕竟这篇文章是以上一篇文章为基础的.

传送门:Android自动化测试–Espresso框架使用

在上一篇文章文章的结尾我们说到,如果项目一旦很大,针对每个功能模块全部手动编写测试代码的话,非常耗时耗力,所以如果有个能自动生成测试代码的工具将是非常棒的事情.

自Android Studio2.2版本开始,google就在Android Studio中集成了Record Espresso Test功能,目前该功能还属于测试阶段,所以可能还不是特别好用.

关于如何使用Record Espresso Test功能,其实官网有有专门的一篇文章来介绍,我本来想把那篇文章翻译过来当做本篇博客的内容,但是在试着翻译的过程中发现有很多单词不认识,并且有时候即便知道那个单词是什么意思也组不成一句通顺的话,所以为了不传播错误知识还是不翻译了,不过本篇文章也是在官方文档的基础上写的.这里贴出官方文档的链接,英语好的可以直接阅读官方文档(需要翻墙),不用看我下面的内容了.

Create UI Tests with Espresso Test Recorder

下面开始正文:

Record Espresso Test功能位于Android Studio菜单栏中的“Run”功能菜单下.如下图:



点击该功能后会弹出一个对话框让你安装你要测试的app,就和我们平时运行软件一样.



点击“OK”进行安装,安装好之后Android Studio 会弹出如下对话框:



该对话框中有2个地方需要说一下:

Add Assertion:添加一个断言,这样说可能不好理解,具体的表现就是,当你点击这个按钮之后,Android Studio会捕获你当前测试设备的屏幕,然后你可以在捕获的屏幕上进行点击操作,注意目前只有点击操作能响应,滑动操作是不响应的,如下图,当你点击“开始体验”按钮后,会有一个红色框包裹住这个按钮,然后点击“Save Assertion”“Save And Add Another”按钮,然后回到之前的对话框中,会发现界面有变化了,如下图:





可以看到,之前的对话框中出现了一句话:Assert Button with child position 0 exists. (每个人测试显示的结果可能不一样).

“Complete Recording”:完成UI测试的记录,点击这个按钮之后,会弹出一个对话框用来命名这个测试类.根据自己的喜好命个名就行了,如下图:



然后点击”Save”,Android Studio会根据你之前的操作并结合Espresso框架自动生成测试代码,如下是我刚才点击”开始按钮”之后,自动生成的测试代码:

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

@Rule
public ActivityTestRule<StartActivity> mActivityTestRule = new ActivityTestRule<>(StartActivity.class);

@Test
public void startActivityTest() {
ViewInteraction button = onView(
allOf(childAtPosition(
childAtPosition(
withId(R.id.viewPager),
1),
0),
isDisplayed()));
button.check(matches(isDisplayed()));

}

private static Matcher<View> childAtPosition(
final Matcher<View> parentMatcher, final int position) {

return new TypeSafeMatcher<View>() {
@Override
public void describeTo(Description description) {
description.appendText("Child at position " + position + " in parent ");
parentMatcher.describeTo(description);
}

@Override
public boolean matchesSafely(View view) {
ViewParent parent = view.getParent();
return parent instanceof ViewGroup && parentMatcher.matches(parent)
&& view.equals(((ViewGroup) parent).getChildAt(position));
}
};
}
}


可以看到除了测试用例之外,还自动生成了个私有静态方法childAtPosition(),该方法主要用来判断所指定的view是否正确的匹配,如果没有正确的匹配,在你执行这个测试用例的时候会直接报Exception.

另外在你点击”Complete Recording”按钮的时候可能会因为没有在app的Gradle中集成相应的测试框架依赖,会弹出一个对话框,主要意思就是说Android Studio检测到你没有集成相应的测试框架依赖,是否要自动帮你集成上,然后你点击“Yes”,他就会帮你自动把相关的依赖包给你加上.

然后同步一下项目即可.



ok,到此为止,我们已经把如何使用Record Espresso Test功能说的差不多了(其实官网上说的比我的还详细),讲道理的话,大家应该差不多都会使用这个功能了.

下面,我们来说一说这个功能的不足,至少是在2.2版本中发现的不足:

1, 前面也已经说到,该功能不能记录滑动事件,也就是说像上一篇文章中的ViewPager的滑动测试代码是不能自动生成的,还是得需要我们自己手动敲上去.还有一些其他功能貌似也不支持自动生成代码.所以这样看来这个功能做的也挺操蛋的!!!

2,每次使用Record Espresso Test功能都要重新安装一遍软件,这个倒是说的过去,但是说不过去的是他总是把能记录的所有操作都记录了,这句话好像自相矛盾,举个例子大家就明白了:由于每次使用Record Espresso Test功能都要重新安装一遍应用,所以每次都要从启动界面开始,如果启动界面有按钮,比如像前文中的”开始体验”按钮什么的,只要你点击,它就会记录,那么郁闷的事情就发生了.如果我想测试软件里的某个界面,而这个界面恰好又藏得很深,我需要进行好些个操作才能到达这个页面,这中间的每一步操作,他都会给你记录上,但是本宝宝只需要测试那个藏得很深的界面啊,其他记录并没有什么用,而Record Espresso Test又没有提供动态删除记录的功能,你只能等测试代码生成完之后,然后再把多余的代码删掉.

以上两点是我目前发现的不足,不知道是我的使用姿势不对还是Android Studio确实没有提供相关功能.不过不管怎么说,Record Espresso Test功能都在一定程度上减少了我们编写测试代码的工作量.

[b]最后在说几句:[/b]

自动化测试这个工作有非常重要的意义,这两篇文章其实最多也就是带着大家入门,会编写基本的自动化测试代码,当你深入去了解自动化测试的时候会发现你所知道的测试知识其实只是皮毛,你可能会感觉这两篇文章说的连皮毛都达不到.另外如果你真的对测试感兴趣想系统全面的研究的话,可以去阅读官方的培训文档,这里附上官网文档地址:Test Your AppBest Practices for Testing

最后,Good Night!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息