关于Android自动化测试Monkey和MonkeyRunner不能正常运行的说明
程序员文章站
2022-07-12 18:39:15
...
前言:
哈喽,感谢一直关注和支持我的人,好久没更新博客了,今天逛了一下发现多了很多关注。所以写篇博客压(填)压(下)惊(坑)!
前段时间看了一本腾讯出的自动化测试Android的书籍,至于为什么会看书,因为最近穷。古人云:“书中自有黄金屋”。看完后还是穷,不知道是不是看的方式不对,并没有发现黄金。[/苦笑]
既然看了书,今天就来说说和书上无关的东西吧!
以前很少关注测试这一块,最多也就做做单元测试,自动化测试都是给测试组去完成。
什么是自动化测试,网上很多解释,总结起来就一句话,模拟人的操作,对应用完成测试。提到自动化测试,有很多成熟而且很好用的测试框架,今天我这里只说两个Android自带的自动化测试框架(因为这段时间研究这两个发现很多资料上面有坑)。
1.Monkey
这个框架很简单。不仅仅是实现起来简单,测得功能也很简单,基本就只能模仿手指乱点,主要测试应用的抗压性俗称压力测试。
它是基于shell运行在设备上的
执行方式:
-->命令行到你的..\platform-tools目录下并且在shell下输入如下:
monkey -p [包名] -v [模拟点击次数]
回车
此时你可以看你的模拟器或者真机,会出现一顿乱点的现象(前提是你的包名是对的);
这时候就说明你已经完成了自动化测试了,此处可以暂时装下逼!
Monkey就是这么简单,操作简单,测得功能也简单,但是能帮你测出很多问题。
2.MonkeyRunner
看名字就知道,与上面Monkey是两个兄弟。简直不要太聪明,暗爽一下,膜拜自己3秒!好了,其实并不是,这两个差别很大。不信你看!
MonkeyRunner是运行在是在工作站上通过API定义的特定命令和事件控制设备或模拟器。怎么理解,就是它是运行在你的电脑上面的,可以在你的电脑上面通过命令来控制你的手机或者模拟器完成各种操作。这也就说明,你的电脑必须有Java环境。这仅仅还不够,因为它可以用Python脚本来做批处理,所以你还要安装Python。
你是不是觉得作为一名正宗的24k纯Android程序猿,还要我去学Python?不用担心,那些都是很基本的,而且我这种技术那么烂的都能看懂一二,你们就可以放心大胆的去使用了。就算不会,我们有程序员三大宝剑嘛,搜索然后ctrl+c、ctrl+v,改一下里面的的路径啥的,完美收工。
但是,有坑有坑有坑有坑,为什么说四遍,因为我被坑了。
首先网上很多资料都是默认把你的Monkeyrunner可以正常运行来处理的:
定位到你的..\tools目录,直接输入monkeyrunner 然后你就可以按照命令来控制你的模拟器或者手机了,也或者是你编写了(网上搜了)个脚本monkeyrunner [你的脚本] 来执行一些操作。正常情况是这样的,但是我这就出现了不正常的情况,WTF,我的tools下没有Monkeyrunner这个东西。
当我输入Monkeyrunner直接提示:
无fuck说,我就请教三剑客,基本是没有什么有用的信息。国内的网站(百度)答案基本都是抄的。
最后,想到既然是android自带的,不应该我这里没有,难道我的是盗版sdk?开源的也盗版?我笑出了声,旁边大哥以为我神经病!我就在我的sdk下用了全局搜索
搜到了这几个.py结尾的你们肯定没有,是不是?因为这是我写的python文件。不过那几个你们肯定有,找到.bat。右键查看详情,你会发现它并没有在..\tools下而是在..\tools\bin下面。找到了,开瓶82年雪碧庆祝一下,于是我又到bin下面使用monkeyrunner
error:Unable ro access jarfile ..\framework\archquery.jar
SWT folder '..\framework' does not exist
Please set ANDROID_SWT to point to the folder containing swt.jar for your platrorm
呵呵呵呵,82年的雪碧直接扔垃圾桶了,浪费了一瓶82年的雪碧。
这里没用图片是方便大家复制粘贴这个错误信息查询,我是敲出来的,因为命令行里面的我不知道怎么复制。
如果你查询了,会有很多答案,但是我没看到一个有用的。至少这时候不是提示“不是内部或外部命令”了说明我们找到了,详细看这个错误信息,其实就可以发现问题,基本就是某个路径错误,找不到路径下的文件。
然后我就用Editplus打开了这个monkeyrunner.bat文件:
打开过的同学会发现跟你们的不一样,你们上面还有很多rem开头的行,其实我的也有。但是猜得到,那些肯定是注释,所以就没截图了。
直接看这些代码,仔细读会发现语法不懂,但是逻辑基本是你理解的那样,没错,大概意思就是:
判断有没有这个文件,没有就赋值。到最后没有就直接打印错误,你会发现最后面那几句,就跟上面那错误信息一样,只是替换了占位符。
于是我试探性的改了一下:
if exist %frameworkdir%\%jarfile% goto JarFileOk
set frameworkdir=..\framework
改成了:if exist %frameworkdir%\%jarfile% goto JarFileOk
set frameworkdir=..\lib
保存,运行Monkeyrunner,提示是找不到..\framework下的jar,而不再是上面那种提示了。
你会发现确实底下还有一行包含了:..\framework 这个,既然前面替换成了lib可以,所以我就想都没想替换成..\lib,结果报错。
然后我就在lib的同级创建了一个叫framework的文件夹,并且把monkeyrunner.bat所有修改还原,记住所有修改,这是添加后的文件图:
这是再次运行Monkeyrunner,提示的错误是在你创建的这个framework中没发现一个文件monkeyrunner_x_x_x.jar。但是在lib中有,这是我直接把lib里面的素有文件都复制到了刚刚创建的Framework中,运行Monkeyrunner:
成功了,这次真的成功了,于是首先我是把垃圾桶那瓶82年的雪碧又捡起来了。可能有些同学会提示什么adb.exe没找到的错误,息怒,继续往下面看。
当然我还做了一步,是把Platform-tools中的adb.exe复制到了framework文件夹;
坑填了,你可以去使用monkeyrunner测试你自己的应用了,脚本可以去搜,很多的。
最近有位出版社的编辑私信我,要我写书,但是还是担心自己能力不够,看过很多书,很多都是打着高级进阶的幌子讲解一些皮毛。本人也确实想写一本高级进阶的干货书籍。还在策划中,如果写了,希望大家支持。
上一篇: Appium自动化测试-入门
下一篇: 层模型的思考