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

MTC脚本录制+eclipse回放

2015-07-02 11:07 281 查看
最近测试课涉及到了移动应用测试,用到了这些技术,在做练习的时候遇到不少坑爹的地方,这里特别记录下来分享给大家,也以便自己查阅。

1 MTC录制部分

MTC,这里用到的准确来说是MTC客户端,它是baidu研发的一个自动化录制android测试脚本的工具。

下载地址 http://mtc.baidu.com/?pname=replayhome
这个工具能够方便的录制长脚本,可能节省我们大量的时间,但是本身暂时存在很多缺陷,按我之前用的版本来说:

- 不支持android5.0 以上的系统 推荐还是android 4.1 - 4.4

- 部分脚本录不到,比如调用系统发短信,飞信的朋友圈等

- 自动截图是傻瓜式的,一个操作截一张,建议手动截图,可以采用cafe.jar 自带的工具 这个问题在eclipse回放中我会讲

- 不支持快捷键,最简单的delete删除也做不到

- 导出成eclipse工程的时候 比较傻瓜式,如果一个脚本集中有多个脚本,那我们重录一个脚本 还是需要把整个项目替换掉,虽然我们可以导到其他地方然后把对应的脚本复制进去,但我认为如果支持选择直接显示脚本代码,这样的交互性应该会更好

- 脚本之间的顺序调整不了

使用的时候需要注意的方面

- 需要等开始脚本的提示框消失之后再开始操作录制,虽然有时候在进度条没消失时还是能录制到,但这并不能保证

- 录下来的脚本并不一定直接能用,部分东西需要修改,比如删除一些冗余操作,还有一些类似检查更新之类的弹窗,等待时间间隔等

- 录下来的东西不一定的全的,比如我遇到过录漏了一个操作的情况,这个在回放的时候根据上下文代码 推断一下补充就好了

- 录制的时候存在不可以回放的部分,比如注册,添加指定好友等

anyway, MTC客户端进行脚本录制还是能帮我们节省很多时间,我也相信他们会做的越来越好。

闲话讲到这里,下面是录制的教程

- 首先是连接手机或者开启模拟机,如果MTC能检测到,那么客户端的左下角会有一个小图标(如果连上手机检测不到,那么可以尝试下载百度手机助手,手机助手能连接上,那么客户端也能连接上, 鉴于百度手机助手太流氓,辅助完连接就可以删掉了)



- 接下来是新建脚本集, 先选择你要测试的apk,然后选择存储的位置,(之前已经有脚本集的 可以直接打开脚本集)



另外之前说过了,这里把自动截图选项勾掉

- 点击下一步进行录制



点击1选择新建脚本,可以自定义脚本名字,然后点击2 选择录制脚本,

MTC客户端录制脚本的过程推测为

- 检查连接上的设备内是否有持有对应签名的APP (这里的app 应该是你选择的apk 被MTC客户端重新签名过后的)

- 有则跳到下一步

- 没有则安装app 然后进行下一步

- 重新打开应用

- 进行录制(设备上每一个关于app有意义的操作产生时 都会发送一个消息给MTC客户端,客户端记录操作 已经与上一个操作之间的等待间隔)

- 点击3停止录制,MTC客户端会自动保存脚本,

- 如果你不满意录制,你可以点击该脚本名,然后图中的2处会显示重新录制,你就可以重新录制该脚本

- 如果对于这个apk还有别的测试任务,你可以再新建一个测试脚本,重复上一步指导录制完成

- 导出为eclipse 工程



这个地方比较坑爹,我一直以为是注释,但是这个地方相当于一个按钮,选择之后可以选择工程存放的路径,注意他需要保存在一个空文件夹下

- 录制部分到这里结束

2 Eclipse回放

这部分的坑主要集中在签名和自动导出脚本存在缺陷这两个问题上,

eclipse安装adt 我就不说了,需要有一个不低于你测试环境版本的sdk

- 导入工程

导入到eclipse的工程需要在build path -> android 勾选对应的SDK ,这样程序的报错便解决了

(导出的程序需要自动生成一个/gen 的文件夹, 这个问题在你首次从MTC导入到空文件夹然后导入Eclipse 时不会出错,但是如果你重新录制的脚本想要导入该文件夹覆盖该工程时,工程就会报错, 所以重录制时,只要将对应的junit测试脚本复制进来替换掉就好了)

- 配置签名

eclipse 需要运行和监听应用,所以需要配置和需要运行的apk 一致的签名

签名文件的生成 自行百度

懒得生成的可以拿MTC 自带的 路径是mtc客户端下 MtcClient/workspace/build/debug.keystore

在eclipse中 windows -> preference->android->build 里把debug.keystore 的路径进去,选择apply, 然后确定就可以了

(如果还是报permission denial 的问题 那么就手动签一下apk 命令在下面

jarsigner -verbose -keystore %1 -signedjar %2 %3 androiddebugkey -digestalg SHA1 -sigalg MD5withRSA  这个命令

%1是debug.keystore的路径  %2 是重新签名后生成的文件  %3是需要重新签名的文件




- 运行脚本

eclipse 中的测试脚本 就是junit 脚本,你可以看到lib 里面有个cafe.jar 这格式baidu 对 robotium框架的封装,可以再网上找到api和源码,当然自己反编译也行,他们的代码没做混淆

那么接下来问题就在于junit 和MTC运行项目的区别方面了

MTC中的一个测试脚本对应了junit的一个测试方法

MTC录制的时候,每一个测试脚本会重新运行程序,而junit 却不会这么做(这个应该属于导出的工程的缺陷)

解决方案:

修改teardown() ,这个方法在每个测试方法执行完之后会运行,那么我们可以选择在这里关闭应用,下次运行方法的时候检测到应用不在运行会自动重启

@Override
protected void tearDown() {
try {
local.finishOpenedActivities();
local.finishOpenedActivities();
super.tearDown();
} catch (Exception e) {
e.printStackTrace();
}
}


这里的finishOpenedActivities 方法 会关闭应用,但是并不能保证应用完全退出, 我们在平时操作时候也会遇到这种情况,一个应用会要求你再点一次退出才能完全退出,这里的连续运行两次该方法 基本能保证了正常的退出,这里用了try catch 保证了,对于一次就能退出的应用也不会产生异常。

另外MTC的回放是脚本顺序回放,而junit 是按照字典序运行测试方法

解决方案:

如果要求脚本存在一个确定的先后顺序, 那么我们可以手动将测试方法的名字改成符合字典序的形式

在运行测试脚本之前 我们需要先在对应环境上安装apk

之后就可以跑了

右击工程 -》run as -》 android junit test

eclipse运行测试的顺序是

- 选择/检测模拟机或者真机

- 安装测试证书

- 检查签名

- 运行应用

这里会出现一些奇怪的问题,如果是crashed 检查是否程序冲突, 清空一下手机进程,干掉冲突一般就可以了

如果涉及到permission 那么就是apk签名的问题了

其他的问题 要么是暂时没发现 或者是我还没找到解决方案

在run的过程中我们可以通过观察手动修改一部分代码,来优化代码,主要是减少不必要的等待时间,删除多余的操作,清除掉不可以回放的部分,比如偶发性弹窗

如果需要特殊情况可以手动操作手机 来辅助单元测试,比如程序需要系统权限,那就手动给他,这样测试程序也能继续顺利的跑下去

junit测试一个测试方法跪了 可能导致卡住,我们可以通过在手机上清除进程 或者断开手机连接 来强行终止测试,当然可以关掉eclipse progress里面的两个相关进程(运行程序,和测试树收集),当然这种方法可能会很慢,还是推荐强关

如果录制出现问题,那么可能存在几种情况

1测试脚本本身有问题

解决方案

重录重新测试

2 莫名其妙跪了(我测试的一个应用也出现了这种情况,脚本一直不能顺利的跑完全程,需要切几次 才能全部覆盖)

重新测试该方法

以上就是我可以分享的经验 thanks 2015年7月2日12:23:39
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: