问题描述
使用 Android 的 Monkey 工具进行压力测试时发现,即使每次都设置相同种子(seed),每次运行也产生了不同的事件序列。具体表现为不同应用的启动时间在各次实验中存在差异。
对于这种现象原因,有人建议如下几点:1. 每次重新启动后是否清除了所有应用程序的状态;2. 是否仅进行部分重置而未完全重启系统或清理应用数据;3. 应用内部状态对事件序列的影响等。
解决方案
方案1: 清除启动时的应用程序状态
为了确保每次 Monkey 运行中的应用程序都处于相同的起始状态,需要定期清除每个应用的私有存储和初始化状态。可以通过使用 adb shell pm clear packageName
命令来清空一个应用的全部数据。
步骤:
- 编写脚本来自动清空指定的应用程序
“`bash
#!/bin/bash
APK_PACKAGES=”com.android.chrome com.facebook.katana com.google.android.apps.maps”
for pkg in $APK_PACKAGES; do
adb shell pm clear $pkg
done
“`
在 monkey 之后运行该脚本
添加如下命令行,确保所有应用的状态被清除后再进行 Monkey 测试:
“`bash
while true; do
# 清空已有的应用数据以便从一个干净状态开始
./clear_app_data.shadb shell monkey -p com.android.chrome -s 1 –pct-appswitch 100 –ignore-crashes –ignore-timeouts –ignore-security-exceptions –monitor-native-crashes -v -v 1
# 其余应用按类似方式继续
done
“`
方案2: 彻底重启设备
完全重置设备有助于避免残留的系统状态影响 Monkey 的运行结果。虽然只是重启进程,但某些低级数据可能仍会残留。
初始步骤:
使用 adb 命令彻底清空所有应用和系统设置
添加如下命令到你的测试循环中:
“`bash
while true; do
# 重启并清除所有应用及其私有存储空间, 确保干净的启动状态
sleep 2; adb reboot recovery
adb shell pm clear com.android.chrome com.facebook.katana com.google.android.apps.mapsadb shell monkey -p com.android.chrome -s 1 –pct-appswitch 100 –ignore-crashes –ignore-timeouts –ignore-security-exceptions –monitor-native-crashes -v -v 1
done
“`保持一致的设置和种子
确保使用相同的参数(如相同的种子值)进行每次测试。
注意:
- 确保将此脚本或方法纳入整个集成试验过程中。这有助于保证每一轮测试从一个已知状态开始,从而使得性能测量更加可靠。
- 考虑到设备和应用程序的启动时间可能会因网络延迟、内存使用等因素而有所不同,请继续监测这些因素的影响。
通过上述方案,应该能够有效解决 Monkey 测试中产生不同事件序列的问题。如果仍有其他问题或无法解释的现象,则需要进一步检查与测试环境相关的细节参数及条件变化。