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能检测到,那么客户端的左下角会有一个小图标(如果连上手机检测不到,那么可以尝试下载百度手机助手,手机助手能连接上,那么客户端也能连接上, 鉴于百度手机助手太流氓,辅助完连接就可以删掉了)
![](http://img.blog.csdn.net/20150702112859565?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDk1MzI2Ng==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
- 接下来是新建脚本集, 先选择你要测试的apk,然后选择存储的位置,(之前已经有脚本集的 可以直接打开脚本集)
![](http://img.blog.csdn.net/20150702113218661?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDk1MzI2Ng==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
另外之前说过了,这里把自动截图选项勾掉
- 点击下一步进行录制
![](http://img.blog.csdn.net/20150702113519811?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDk1MzI2Ng==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
点击1选择新建脚本,可以自定义脚本名字,然后点击2 选择录制脚本,
MTC客户端录制脚本的过程推测为
- 检查连接上的设备内是否有持有对应签名的APP (这里的app 应该是你选择的apk 被MTC客户端重新签名过后的)
- 有则跳到下一步
- 没有则安装app 然后进行下一步
- 重新打开应用
- 进行录制(设备上每一个关于app有意义的操作产生时 都会发送一个消息给MTC客户端,客户端记录操作 已经与上一个操作之间的等待间隔)
- 点击3停止录制,MTC客户端会自动保存脚本,
- 如果你不满意录制,你可以点击该脚本名,然后图中的2处会显示重新录制,你就可以重新录制该脚本
- 如果对于这个apk还有别的测试任务,你可以再新建一个测试脚本,重复上一步指导录制完成
- 导出为eclipse 工程
![](http://img.blog.csdn.net/20150702114357077?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDk1MzI2Ng==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
这个地方比较坑爹,我一直以为是注释,但是这个地方相当于一个按钮,选择之后可以选择工程存放的路径,注意他需要保存在一个空文件夹下
- 录制部分到这里结束
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 命令在下面
)
- 运行脚本
eclipse 中的测试脚本 就是junit 脚本,你可以看到lib 里面有个cafe.jar 这格式baidu 对 robotium框架的封装,可以再网上找到api和源码,当然自己反编译也行,他们的代码没做混淆
那么接下来问题就在于junit 和MTC运行项目的区别方面了
MTC中的一个测试脚本对应了junit的一个测试方法
MTC录制的时候,每一个测试脚本会重新运行程序,而junit 却不会这么做(这个应该属于导出的工程的缺陷)
解决方案:
修改teardown() ,这个方法在每个测试方法执行完之后会运行,那么我们可以选择在这里关闭应用,下次运行方法的时候检测到应用不在运行会自动重启
这里的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
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
相关文章推荐
- Java 操作 JSON
- 用java实现音乐的播放
- Spring 系列: Spring 框架简介
- 在阿里云服务器上搭建JavaWeb开发环境
- Eclipse中设置作者日期等信息
- 《Java并发编程实践》笔记8——Fork/Join框架
- 《Java并发编程实践》笔记8——Fork/Join框架
- Java MySQL 存储过程 入门
- 《Java课程实习》日志(周四)
- java中Struts2文件上传问题详解
- 《Java并发编程实践》笔记8——Fork/Join框架
- 配置DelegatingFilterProxy使用Spring管理filter chain
- java 中xml转换为json对象
- mac 安装maven 和修改java环境变量
- Spring中<context:annotation-config/>的作用
- spring4-5-事务管理
- java记录
- spring, 继承MethodBeforeAdvice时出现inconsistent的bug
- Java把字符串中的unicode码替换成相应的字符
- 《Java课程实习》日志(周三)