移动端测试

当前位置:首页 > 移动端测试

大话移动APP测试Android 与iOS应用测试指南(第六章)


第6章常用框架介绍和实践

上- -章我们对移动互联网客户端常用的测试工具做了介绍,虽然框架从广义.上来讲也是工具的一种,但为了让读者各取所需,专门为框架另开-一章。本章会对常用框架做一定的介 绍和实践分析,如果读者对其他框架感兴趣的话,可自行搜索,这里就不做特别介绍了。


6.1 Instrumentation

Android提供了- -系列强大的测试工具,针对Android的环境,扩展了业内标准的JUnit测试框架。尽管可以使用JUnit测试Android工程,但Android工具允许我们对应用程序的各个方面进行更为复杂的测试,包括单元层面及框架层面。

Android执行测试活动的核心就是Instrumentation框架,在该框架下我们可以实现界面化测试、功能测试、接口测试甚至单元测试。Instrumentation 框架通过在同-一个进程运行主程序和测试程序来实现这些功能。

从整体框架来看,Instrumentation 和JUnit测试的框架有很多相同之处,测试环境结构如图所示。.

大话移动APP测试Android 与iOS应用测试指南(续)

在Android系统中,测试程序也是Android程序,因此,它和被测试程序的构建方式有很多相同的地方。SDK工具能帮助用户同时创建主程序工程及它的测试工程。可以通过Eclipse的ADT插件或者命令行来运行Android测试工具。Eclipse 的ADT提供了大量的工具来创建测试用例,运行以及查看结果。更多有关Instrumentation的资料可查询: htp://developer.android.com/reference/android/app/Instrumentation.html 。

在Instrumentation框架中,被继承使用最多的类是ActivitylnstrumentationTestCase2,在Android自带的例子中可以很清楚地看到该类,或者说Android junit test具体的试用方法,这里就不再多说了。众所周知, robotum. athrun等框架都是基于Instrumentation的,也都很火,它们都将调用接口封装成了日常的操作,使得测试工程师能够更方便地编写测试用例。但也有部分测试工程师觉得它们并不是特别好用,这就会产生-一个疑问,真的有很多公司使用这类测试工具在实际项目中自动化吗?接下来,我们主要就围绕这个问题说一一说。

先说Instrumentation。在上文已经提到过该框架几乎能够做你想得到的所有类型的测试,那么,基于该框架的、我们熟知的其他框架是不是也是如此呢?答案是“是”。不要以为robotium只是一一个Android.上模拟用户操作的功能自动化框架,它也许是、也许不是,框架是死的,你是活的。

我们再来说说为什么有的测试人员觉得robotium等框架不适合使用,有以下3种原因(当然,如果你也觉得自己有以下情况,那么要提高警惕,否则最终将一事无成):

(1) 自己根本没有尝试过,觉得自动化根本做不起来,觉得没有用。

(2)项目迭代周期太快,界面变化太快(- 般这个原因较多)。

(3)产品本身过于复杂,界面自动化投入产出会非常悬殊。


提示:原因(1 )的同学不要放弃治疗,我就不在这里评论了。对于原因(2)和(3)来说,的确大部分的移动互联网企业存在这样的问题,所以在这点上我们只能是具体问题具体分析。“遇神杀神, 遇佛杀佛”,关键不在于我们杀谁,而在于我们是否只有robotium 这个唯一的武器。我用过国内外很多应用,不得不承认,应用与应用之间的差距真的比人与猪之间的差距都大,面对不同的测试对象我们需要随机应变,而不是放弃治疗,你说呢?


当然在我们使用Android测试框架的时候也需要掌握--些技巧,不能直接根据Android工程例子中的Spinner或者robotium的NotePad的例子,上来就画葫芦,那样的话,尽管你能够画得出几个倭瓜,但还是不知道怎么放入到项目使用,最终回归到放弃治疗状态。

6.1.1 技巧一

在模拟用户操作之前,我们需要先写出整个测试环境是否符合用例执行要求的测试用例,比如如下显示的应用,虽然- -般应用都会比这个例子复杂很多,但思路都是一一样的。

大话移动APP测试Android 与iOS应用测试指南(续)

在我们的测试自动化跑起来之前,首先肯定是准备测试数据,启动被测应用,然后再开始做和功能业务相关的测试。在这之前,我们可以先写些测试用例以确保之后的用例可以被正常执行。如上图所示4个控件对象的定义如下:

Activity mActivity;
Edi tText mEdi tText;
RadioButton mTest1 ;
RadioButton mTest2 ;

我们首先应该写的用例如下:

public final void testActitvity() {
assertNotNull (mActivity) ;
public final void testInputs() {
assertNotNull (mEditText) ;
}
public final void testRadiobuttonchecked() {
assertTrue (mTest1. isChecked()) ;
assertFalse (mTest2. isChecked()) ;
}
public final void testFieldstartempty() {
asser tNull (mEditText.getText() . toString()) ;
}
public final void testFieldstartempty() {
assertNull (mEditText.getText() . toString());
}
public final void testwindowsOnScreen() {
final Window window ■mActivity .getwindow() ;
final View og = window.getDecorview() ;
ViewAsserts.asser tOnScreen (og, mEditText) ;
ViewAs serts .assertonScreen (og, mTest1) ;
ViewAsserts . asser tOnScreen(og, mTest2) ;
)

在开始执行正式用例之前,我们先要确认Activity 是否启动,必要的控件是否都显示出来了,等等。


相关内容

文章评论

表情

共 0 条评论,查看全部
  • 这篇文章还没有收到评论,赶紧来抢沙发吧~