转载:http://blog.csdn.net/gb112211/article/details/42354671
一个简单的测试需求如下:
测试相机的过程中发现一极低概率性问题,在进入相机拍照后退出的过程中相机可能会crash,概率大概为千分之一。
相机的使用场景相当的平凡,所以千分之一(0.001)的概率看似很小,但对于相机拍照的场景,相对而言,这个概率就很高了。
所以我们需要在未抓取到有效的log信息时,想办法将这个问题进行复现,抓取有效的log信息供开发人员快速地解决问题,另外在开发解决问题之后,如何回归验证该bug,也是我们需要考虑的。
业务流程很简单,启动相机应用>点击拍照按钮拍照>按返回键退出相机应用。
如果脱离自动化,那就只能人工的拿着手机使用相机执行该拍照流程1000次,想想就觉得可怕!
因此我们需要用到自动化,使用脚本去重现或者回归验证这个问题。如何选择脚本语言?个人觉得,使用自己最擅长的语言就行,只要能拿到自己想要的测试结果。但在测试团队里面,为了方便脚本的维护,一般会要求固定的使用某种语言。我自己一般采用python,当然也会视脚本的复杂程度而选择shell或者java,甚至直接使用批处理脚本。
对于此处的这个简单的业务,我想分别使用shell、python、java语言和monkeyrunner脚本去完成这个脚本(脚本很简单!)
相机拍照界面Activity:com.android.camera.CameraLauncher //可以使用“adb shell dumpsys window w | grep \/ | grep name=”,windows系统可将grep换为findstr
拍照按钮的坐标:(550,1760) //可以使用sdk tools目录下的hierarchyviewer工具获取按钮的坐标值,也可以在设备的开发者选项中开启“指针位置”,手指触摸拍照按钮时会在设备的屏幕顶部显示出触摸位置的坐标值
下面使用脚本实现该业务流程:
shell脚本:
Java:
使用monkeyrunner脚本:
实现自动化,可选择的方法有很多,很多时候并不需要只局限于一些框架,例如monkeyrunner,脱离框架,单纯的调用adb命令就可以实现我们的需求。
以上的脚本只是很简单的实现业务流程,缺陷是无法自动地在相机出错的情况下获取log信息,而只能在执行脚本的适合,单独开启logcat命令,将运行脚本时产生的log信息重定向到一个log文件中,在脚本执行完成后分析log文件。
因此要将该脚本完善,可以增加自动判断是否出错并且自动获取log的功能。
补充:
因为我是在windows使用,所以写了以下Bat脚本:
@echo off
set times=0
adb devices
ping 127.0.0.1 -n 1 > null
:teststart
rem 点击后置相机
adb shell input tap 82 714
ping 127.0.0.1 -n 3 > null
rem 开始拍照
adb shell input tap 110 250
ping 127.0.0.1 -n 3 > null
rem 点击拍照
adb shell input tap 352 1093
ping 127.0.0.1 -n 5 > null
rem 点击Pass
adb shell input tap 540 1122
set /a times+=1
echo retry time = %times%
if %times%==1000 goto exit
ping 127.0.0.1 -n 4 > null
goto teststart
:exit
pause