老李推荐:第5章3节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 启动脚本

时间:2022-02-11 08:12:26

老李推荐:第5章3节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 启动脚本

 

poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标。如果对课程感兴趣,请大家咨询qq:908821478,咨询电话010-84505200。

本节我们先看下Monkey是怎么启动起来的。在今后分析到MonkeyRunner的原理的时候我们会看到客户端是通过ADB往Android目标测试机器发送一个”monkey -port 12345”的命令来启动Monkey服务的。那么这个命令做了什么事情呢?它其实就是通过调用monkey这个shell脚本来把Monkey服务给启动起来然后监听目标设备上的端口12345,最后MonkeyRunner等其他主机端的应用就能通过连接上该端口来往monkey发送命令来模拟用户的操作了。

这个shell脚本默认是在Android系统自带的,存放位置时在系统的”/system/bin/”目录下面:

代码5-3-1 monkey启动脚本

# Script to start "monkey" on the device, which has a very rudimentary
# shell.
#
base=/system
export CLASSPATH=$base/framework/monkey.jar
trap "" HUP
exec app_process $base/bin com.android.commands.monkey.Monkey $*

整个脚本就简单的几行,做的事情也很简单,总的来说就是为Monkey的运行设置好环境变量,然后启动monkey。下面我们就对关键的代码进行解析:

  • 4-5行: 设置好运行Monkey的Java运行环境CLASSPATH.设置CLASSPATH的目的,在于告诉Java执行环境,在哪些目录下可以找到您所要执行的Java程序所需要的类或者包。在这里就是指定monkey.jar这个jar包的位置在哪里,然后把CLASSPATH给导出去到环境变量中。

  • 第6行:设置启动monkey的shell忽略HUB信号。其中trap命令代表去不捕获一个/系列信号并进行处理,代码中的第二个参数代表捕获的是系统的HUB信号,第一个参数代表如何处理该捕获到的信号,这里设置为空,代表不做任何处理,也就是忽略掉这些捕获到的HUB 信号。那么HUB信号是什么意思呢?这就需要读者有一些基本的Linux操作系统知识了。HUB信号也叫做SIGHUP信号,其实就是Signal Hangup的缩写,翻译过来就是终结进程的信号。系统对SIGHUP信号的默认处理是终止收到该信号的进程。所以若程序中没有捕捉该信号,当收到该信号时,进程就会退出。那我们这里是把该信号捕捉了,但捕捉后不做任何处理(因为trap的第二个参数对捕获信号的处理是为空的),这样做的好处就是尽量在比如发生异常等的情况下别的地方想通过SIGHUB信号终结monkey服务时,保证monkey还是会继续在目标Android机器上运行

  • 第7行: 这就是一个正常的Android启动Java应用的命令了。android中可以通过多种方式启动java应用,通过app_process命令启动就是其中一种。命令中的参数“com.android.commands.monkey.Monkey”指定了monkey的入口函数main所在类,”$@”即用户传进来的参数,比如”-port 12345”,最终会传到上面那个类进行解析。