因为应用上线需要,所以来学习一下monkey测试怎么使用。

需要先解决一个问题
在Android Studio的Terminal命令行中执行 adb,发现使用的adb.exe是在C盘下的
系统的命令行中执行也是同样的
G:\test_work\GuYuanTong>adb
Android Debug Bridge version 1.0.40
Version 4797878
Installed as C:\Windows\system32\adb.exe
global options:
-a listen on all network interfaces, not just localhost
-d use USB device (error if multiple devices connected)
-e use TCP/IP device (error if multiple TCP/IP devices available)
造成的问题就是执行在Terminal下执行adb其他命令,都是报错的
G:\test_work\GuYuanTong>adb -h
adb: usage: unknown command -h
开始排查问题,目的是要使用自己sdk路径下的adb.exe,也就是这个路径下的 D:\androidSDK\Sdk\platform-tools
查看环境变量
系统变量下新建了android变量,下面配置了D:\androidSDK\Sdk\platform-tools
和D:\androidSDK\Sdk\platform-tools
这两项,并在系统变量的path下添加了%android%
这个看上去没啥问题啊,百思不得其解。
突然想,把错误的这个adb.exe,也就是C盘下的这个删除了试试,果断的在C:\Windows\system32\adb.exe
目录下删除了adb.exe,然后在cmd窗口和Terminal窗口下执行adb,发现问题解决了,执行结果
如下:
G:\test_work\GuYuanTong>adb
Android Debug Bridge version 1.0.41
Version 29.0.2-5738569
Installed as D:\androidSDK\Sdk\platform-tools\adb.exe
global options:
-a listen on all network interfaces, not just localhost
-d use USB device (error if multiple devices connected)
-e use TCP/IP device (error if multiple TCP/IP devices available)
显然,找到了正确的位置。
开始monkey测试
Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。Monkey测试是一种为了测试软件的稳定性、健壮性的快速有效的方法。
根据我们要测试应用的包名启动app,随机操作1000次,com.xxx.xxx是要测试应用的包名
adb shell monkey -p com.xxx.xxx 1000
执行结果:
G:\test_work\GuYuanTong>adb shell monkey -p com.xxx.xxx 1000
bash arg: -p
bash arg: com.xxx.xxx
bash arg: 1000
args: [-p, com.xxx.xxx, 1000]
arg: "-p"
arg: "com.xxx.xxx"
arg: "1000"
data="com.xxx.xxx"
// activityResuming(com.xxx.xxx)
Got IOException performing flipjava.io.IOException: write failed: EINVAL (Invalid argument)
// Injection Failed
Got IOException performing flipjava.io.IOException: write failed: EINVAL (Invalid argument)
// Injection Failed
Got IOException performing flipjava.io.IOException: write failed: EINVAL (Invalid argument)
// Injection Failed
Events injected: 1000
## Network stats: elapsed time=10699ms (0ms mobile, 0ms wifi, 10699ms not connected)
重点看到这个Got IOException performing flipjava.io.IOException: write failed: EINVAL (Invalid argument) // Injection Failed
究竟算不算是一个报错呢?找了一圈,也没有找到相关的说明啊。这里执行时是未登录情况,排查了登陆页面逻辑,登陆后,再次使用相关命令进行测试。
monkey测试有很多的命令可以使用:
-s
-v:Level 0(缺省值)除 启动提示、测试完成和最终结果之外,提供较少信息。
-v -v :Level 1提供较为详细的测试信息,如逐个发送到Activity的 事件。
-v -v -v :Level 2提供更加详细的设置信息,如测试中被选中的或未被选中的Activity。
adb shell monkey -p com.xxx.xxx -v -v -v 1000
-s
伪随机数生成器的seed值
测试为了人员能够重现测试到的bug问题,需要能够对Monkey的随机生成事件有重现能力,monkey允许对随机事件的seed值做设置,当两次seed值一样,整个测试效果将会产生相同的事件序列
adb shell monkey -p com.xxx.xxx -s 123 -v 1000
先写这么多,用到了再摆渡。
先去按照小米测试给出的 [FC_Log文件] 解决bug了。
网友评论