为什么猴子不生成相同的事件序列?



我正在使用Monkey在Android上运行压力测试来生成工作负载。对于我要做的分析类型,我需要为每个实验生成相同的事件序列。因此,在每次实验中,我总是使用adb shell monkey命令与相同的种子。例如:

while true; do

adb shell monkey -p com.android.chrome -s 1 --pct-appswitch 100 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --monitor-native-crashes -v -v 1 

sleep 1
adb shell monkey -p com.facebook.katana -s 1 --pct-appswitch 100 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --monitor-native-crashes -v -v 1

sleep 1
adb shell monkey -p com.google.android.apps.maps -s 1 --pct-appswitch 100 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --monitor-native-crashes -v -v 1 
done

我总共启动了十个应用程序。然而,从测量数据来看,在我看来,每次运行时系统的压力都是不同的。特别是,我发现应用程序的平均启动时间在每次实验中都有不同程度的下降。一切正常吗,还是我可能做错了什么?

因为monkey的全部意义在于确保整个应用通过随机引发事件进行测试,从而增加你发现破坏应用的异常测试模式的机会。这就是为什么它被称为"monkey"的原因——它模拟猴子敲击键盘(或屏幕)。这完全在意料之中。也要预料到人类不可能出现的奇怪情况——我有很多猴子发现的bug,需要毫秒级的精度来修复。

你可以设置一个种子,但是你没有在这里这样做——也许你期望第二个-v是-s?这将使用相同的随机数生成器,但不能保证相同的行为——应用程序响应的几毫秒差异可能导致触摸出现在不同的屏幕上。这会产生蝴蝶效应——随着时间的推移,两次试运行的分歧会越来越大。

最新更新