本发明属于电子信息科学,尤其涉及一种用于协议测试的android 模拟器及实现方法。
背景技术:
1、传统的服务器压力测试通常是在服务器端开启jmeter等类似服务,jmeter通过多线程的方式来进行协议的报文发送,从而模拟真实的用户负载,缺点在于非实际使用场景,未对协议报文在网路传输过程中的损耗进行计入;开启多线程占用服务器自身的资源,测试结果不真实;只考虑了服务器的接收压力,没有服务器的发送压力测试,测试结果不全面;没有图形化界面用于对测试结果进行展示,效果不直观。
2、为此,我们提出一种用于协议测试的android模拟器以解决上述技术问题。
技术实现思路
1、本发明的目的在于针对现有技术的不足,提供一种用于协议测试的android 模拟器及实现方法,解决了现有技术中由于未考虑网路损耗、系统资源占用、实际业务场景、用户体验导致的测试结果不真实的问题。
2、为实现上述目的,本发明提供了一种用于协议测试的android模拟器,包括:
3、模拟器构建单元:用于在一个android物理设备上创建多个android虚拟设备,并对android虚拟设备进行注册,所述多个android虚拟设备共享android物理设备的cpu和内存;
4、模拟器运行单元:用于对待测服务器进行压力测试,实现多个android虚拟设备与待测服务器的协议指令交互,并对压力测试结果进行图形化显示;
5、模拟器监控单元:用于对协议指令交互过程中的多个android虚拟设备的载体进行性能监控,所述多个android虚拟设备的载体即android物理设备,并根据监控结果动态调整android虚拟设备的并发运行数。
6、进一步地,所述模拟器构建单元的工作过程包括:在模拟器注册界面输入用户名、密码、物理设备的ip、端口、当前物理设备的唯一id、虚拟设备所需数量;模拟器根据android虚拟设备所需数量通过bindservice方法开启对应数量的service。
7、进一步地,所述service为android虚拟设备的容器,将其作为android服务组件注册到模拟器的应用清单上,注册的内容包括service运行的进程、service的名称,将service的名称和进程属性都设置为模拟器包名+虚拟设备序号的组合。
8、进一步地,所述service的注册过程为:通过在gradle构建脚本中插桩processdebugmanifest获取androidmanifest文件,对androidmanifest文件进行节点解析,在application节点下动态植入sevice注册内容的方式将待开启的service进行注册。
9、进一步地,所述模拟器运行单元的工作过程包括:所述android虚拟设备通过模拟器注册界面的输入参数调用loginin接口,实现服务器上线;注册服务器的协议参数包括用户名、密码、物理设备唯一id、物理设备的ip、端口;其中用户名和密码用于对用户进行有效性校验,用户名和密码供所有开启的android虚拟设备使用,且多个android虚拟设备共用同一个物理设备的ip和端口,每个android虚拟设备以物理设备唯一id+虚拟设备序号作为android虚拟设备的唯一id。
10、进一步地,所述模拟器运行单元的工作过程还包括:服务器向每个android虚拟设备发送指令;每个android虚拟设备将接收到的服务器指令通过指令分发器分发给对应的控制实现类,并直接向服务器返回处理成功的报文;服务器将该指令的发出设备数和成功接收该指令的android虚拟设备数进行对比,得到服务器的发的能力;将接收到的返回报文数量与发出该返回报文的android虚拟设备数进行对比,得到服务器的收的能力。
11、进一步地,所述模拟器的监控单元的工作过程包括:对模拟器运行过程中负载的android物理设备的cpu占用率、内存占用率进行监控,从而动态调整android虚拟设备的运行数量,以确保android物理设备处于最佳运行状态。
12、进一步地,所述对模拟器运行过程中负载的android物理设备的cpu占用率、内存占用率进行监控具体为:开启一个线程每隔1分钟通过top指令获取内存占用情况和cpu占用情况,将内存占用情况和cpu占用情况分别写入csv文件,通过gettext函数将csv文件内容读出并解析,判断当前android物理设备的cpu占用率、内存占用率是否超出阈值,
13、进一步地,所述动态调整android虚拟设备的运行数量具体为:若超出阈值,模拟器通过stopservice按照降序逐一关闭android虚拟设备,直至当前android物理设备的cpu占用率、内存占用率达到阈值以下。
14、为实现上述目的,本发明还提供了一种用于协议测试的android模拟器的实现方法,包括:
15、在一个android物理设备上创建多个android虚拟设备,并对android虚拟设备进行注册,所述多个android虚拟设备共享android物理设备的cpu和内存;
16、对待测服务器进行压力测试,实现多个android虚拟设备与待测服务器的协议指令交互,并对压力测试结果进行图形化显示;
17、对协议指令交互过程中的多个android虚拟设备的载体进行性能监控,所述多个android虚拟设备的载体即android物理设备,并根据监控结果动态调整android虚拟设备的并发运行数。
18、本发明的有益效果是:本发明可以模拟真实物理设备与远程服务器的指令交互来测试服务器的收发能力,且测试规模不局限于物理设备,一台物理设备可以模拟多台虚拟设备,从而减少了实际测试的物理设备量,同时对模拟器提供了人机交互界面,使用户可以及时获取到协议交互的成功数,进而判断服务器的收发负压能力,十分适用于服务器的压力测试等。
1.一种用于协议测试的android模拟器,其特征在于,包括:
2.如权利要求1所述的用于协议测试的android模拟器,其特征在于,所述模拟器构建单元的工作过程包括:在模拟器注册界面输入用户名、密码、物理设备的ip、端口、当前物理设备的唯一id、虚拟设备所需数量;模拟器根据android虚拟设备所需数量通过bindservice方法开启对应数量的service。
3.如权利要求2所述的用于协议测试的android模拟器,其特征在于,所述service为android虚拟设备的容器,将其作为android服务组件注册到模拟器的应用清单上,注册的内容包括service运行的进程、service的名称,将service的名称和进程属性都设置为模拟器包名+虚拟设备序号的组合。
4.如权利要求3所述的用于协议测试的android模拟器,其特征在于,所述service的注册过程为:通过在gradle构建脚本中插桩processdebugmanifest获取androidmanifest文件,对androidmanifest文件进行节点解析,在application节点下动态植入sevice注册内容的方式将待开启的service进行注册。
5.如权利要求1所述的用于协议测试的android模拟器,其特征在于,所述模拟器运行单元的工作过程包括:所述android虚拟设备通过模拟器注册界面的输入参数调用loginin接口,实现服务器上线;注册服务器的协议参数包括用户名、密码、物理设备唯一id、物理设备的ip、端口;其中用户名和密码用于对用户进行有效性校验,用户名和密码供所有开启的android虚拟设备使用,且多个android虚拟设备共用同一个物理设备的ip和端口,每个android虚拟设备以物理设备唯一id+虚拟设备序号作为android虚拟设备的唯一id。
6.如权利要求1所述的用于协议测试的android模拟器,其特征在于,所述模拟器运行单元的工作过程还包括:服务器向每个android虚拟设备发送指令;每个android虚拟设备将接收到的服务器指令通过指令分发器分发给对应的控制实现类,并直接向服务器返回处理成功的报文;服务器将该指令的发出设备数和成功接收该指令的android虚拟设备数进行对比,得到服务器的发的能力;将接收到的返回报文数量与发出该返回报文的android虚拟设备数进行对比,得到服务器的收的能力。
7.如权利要求1所述的用于协议测试的android模拟器,其特征在于,所述模拟器的监控单元的工作过程包括:对模拟器运行过程中负载的android物理设备的cpu占用率、内存占用率进行监控,从而动态调整android虚拟设备的运行数量,以确保android物理设备处于最佳运行状态。
8.如权利要求7所述的用于协议测试的android模拟器,其特征在于,所述对模拟器运行过程中负载的android物理设备的cpu占用率、内存占用率进行监控具体为:开启一个线程每隔1分钟通过top指令获取内存占用情况和cpu占用情况,将内存占用情况和cpu占用情况分别写入csv文件,通过gettext函数将csv文件内容读出并解析,判断当前android物理设备的cpu占用率、内存占用率是否超出阈值。
9.如权利要求8所述的用于协议测试的android模拟器,其特征在于,所述动态调整android虚拟设备的运行数量具体为:若超出阈值,模拟器通过stopservice按照降序逐一关闭android虚拟设备,直至当前android物理设备的cpu占用率、内存占用率达到阈值以下。
10.一种基于权利要求1-9任一项所述用于协议测试的android模拟器的实现方法,其特征在于,包括: