用Robotium对android进行自动化测试的探索

一.简介

Robotium是一款国外的Android自动化测试框架,主要针对Android平台的应用进行黑盒自动化测试,它提供了模拟各种手势操作(点击、长按、滑动等)、查找和断言机制的API,能够对各种控件进行操作。Robotium结合Android官方提供的测试框架达到对应用程序进行自动化的测试。另外,Robotium 4.0版本已经支持对WebView的操作。Robotium 对Activity,Dialog,Toast,Menu 都是支持的。

二.相关背景

市面上已经有很多关于Robotium的介绍与教程,大部分都是人工编写执行动作,对android界面进行点击,并且记录点击结果或者进行相关判断,很少有对app进行随机自动点击的测试脚本,所以本人决定尝试编写对app进行随机点击的自动化测试。但中途遇见了很多坑,所以写此博客将相关内容记录下来。

三.初始思路

1.对app界面基于位置进行随机点击,即先获得手机屏幕大小,随机生成坐标点,利用robotium的api进行点击
2.对app基于控件进行随机点击,即先获取当前界面所有控件,随机选取控件进行点击。

考虑过后决定采用第二种方法,第一种方法开销太大,并且效率不高

四.实现过程

由于一个app可能由多个activity组成,每个activity又可能有多个可选控件,如果递归遍历的话会出现组合爆炸的情况,所以决定随机选择控件并点击。
Robotium提供了一些获取控件的api,如
solo.getCurrentViews(),solo.getCurrentViews(Class classToFilterBy, View parent)等。

但是这些api可能获取到的并不是实际的控件内容,可能会有一些隐藏的控件也会被获取到,所以就要对获取到的控件进行一些处理,这里主要用到了控件的三个属性
isClickable
isEnable
isFocusable
isClickable为true的控件即为可以点击的控件,isEnable为true的控件即为有效控件,isFocusable的控件即为可以获得焦点的控件,通过这三个属性即可判断这个控件是否是我们需要点击的有效的控件。

接下来就是要随机选择常用的控件来进行点击,这里选择了Button,ImageButton,EditText,ListView,CheckBox,RadioButton,RadioGroup,ActionMenuView,SeekBar,LinearLayout,TextView,ImageView,RelativeLayout,FrameLayout,CheckedTextView,Spinner这些常用的控件。

如果要选择获取某一类型的所有控件,可以运行以下代码
List list1=solo.getCurrentViews(ImageButton.class);
即可获得当前页面的所有ImageButton

List list1=solo.getCurrentViews();
则会获得当前界面所有的控件

这里对这些控件进行点击或者进行一些操作可能会出现另外一个问题
Method getText() must be called from UI thread
这是由于我们在测试类中调用了改变界面控件内容的方法,而这些方法只能在UI线程中调用,关于android中的UI线程和非UI线程在这里不做过多说明,网上有很详细的解释。所以我们不能直接对控件进行操作,需要采用下面的这种方式来操作控件:

solo.getCurrentActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
editText.setSelection(editText.getText().length(), editText.getText().length());
editText.setText("test");
}
});

五.应用场景

这种随机自动化测试一般不会独立存在,需要结合其他的测试方法或者工具来进行使用,比如结合图像对比等技术,这里只是粗略的对robotium工具进行了探索与尝试,并描述了一种随机自动化测试的方法,以后还将进行更深入的探索。

你可能感兴趣的:(用Robotium对android进行自动化测试的探索)