63_利用Loadrunner做手机APP的压力测试

1 引言

LoadRunner,是一种预测系统行为和性能的负载测试工具。通过模拟千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner能够对整个企业架构进行测试。LoadRunner功能强大从测试脚本的生成、场景的设置、服务器性能的监控到测试报告的生成,覆盖了性能测试的整个生命周期。各个部分既能独立使用,也能无缝集成,能最大限度地缩短测试时间,优化性能和加速应用系统的发布周期。 LoadRunner可适用于各种体系架构的自动负载测试,覆盖各种主流协议。随着APP应用程序得到了越来越广泛的应用,LoadRunner12为手机端的APP应用程序提供了多种解决方案,极大地提高了测试效率。

本文主要从LoadRunner框架的组成和工作原理方面,来讲述如何利用LoadRunner提供的工具来实现手机APP的性能测试。

2 正文

2.1 LoadRunner简介

2.1.1 LoadRunner框架

LoadRunner通过建立虚拟的用户(Virtual Users)代替真正的用户来操作客户端软件,如Internet Explorer使用HTTP协议(HTTP Protocol)发送请求到IIS或Apache应用服务器。来自许多虚拟用户的客户端的请求由“负载生成器(Load Generators)” 所产生,以创建一个对不同服务器下的测试(server under test)的负载。这些负载生成器代理都通过Mercury的“控制器(Controller)”程序被启动(start)和停止(stop)。控制器调用已编译“脚本(Scripts)”和相关的“运行时设定(Run-time Settings)”基于“场景(Scenarios)”的运行来控制负载测试。脚本使用Mercury的“虚拟用户脚本生成器”(VUGen)来制作,它生成由虚拟用户执行的C语言的脚本代码,捕获(capture)在互联网应用的客户端和服务器之间的网络包。在Java客户端(Java Clients),VuGen捕获挂接在客户端的JVM内的调用。在运行时,每台机器的状态由控制器监控(monitor)。在每次运行结束时,该控制器组合其监控日志(logs)与负载生成器所得日志,把它们提供给“分析(Analusis)”程序,然后可以创建运行结果的报告(reports)和图表(graphs),表现形式可以为Microsoft Word,水晶报告(Crystal Report),或HTML格式的报表。在每个运行中发生的错误储存在一个数据库中,该数据库可以使用Microsoft Access来读取。“图一”所示为LoadRunner的体系架构图和各部分的相互调用关系。

图一:LoadRunner体系架构图.png

                                                                                                                                                                图一:LoadRunner体系架构图

2.1.2 LoadRunner工作原理

    LoadRunner三个组件VuGen、Controller和Analysis的工作机理及关键技术:

  •   虚拟用户Vugen

虚拟用户通过录制客户端和后台服务器之间的通讯包,分析其中的协议,自动产生脚本。用户在自动产生的脚本的基础上进行修改,从而快速开发出一个逻辑功能和客户端软件完全一样的压力脚本程序。但是在脚本的回放过程中会遇到一些问题,如:用户Session Id的动态数据的过期、重复数据的插入、IP地址的限制等,LoadRunner通过以下技术来解决脚本运行过程中的问题。具体包括:

  1.      参数的关联:把服务器返回的动态数据,通过函数web_reg_save_param()保存到一个参数中,在以后需要用到该动态数据时可以直接引用该参数,替换录制脚本时产生的原始的数据。

  2.      数据的参数化:录制业务流程时,Vugen生成一个脚本本来包含录制期间所用到的实际值。假设,您要使用不同于录制内容的值来执行该脚本的操作(查询、提交等)。要实现这一点,可以使用参数替换已录制的值,这被称为脚本参数化。通过脚本参数化可以避免重复数据的提交和模拟真实数据的场景等。数据的参数化可以通过数据文件,也可以通过定义查询语句,从数据库中提取数据进行数据的参数化;另外,还可以通过分配内部数据,包括日期/时间、组名、迭代编号、负载生成器名、随机编号、唯一编号和Vuser ID以及调用用户定义的函数即DLL生成的数据等。

  •   负载生成控制器Controller

在LoadRunner的体系结构中,Load Generators是负载生成器,而Controller在整个体系结构中起到了“智慧家”的角色,即控制Load Generators的运行,负载生产器如何运行脚本,由controller来决定,Controller和Load Generators实际上是一套框架程序,具体执行什么功能,是由脚本来完成的。Controller和Load Genertors的体系结构如图2所示。Controller上面有若干个进程/线程,每种进程的作用如下:

图二:.png

                                                                                                                                           图二:Controller和Load Generator体系结构

Center进程是整个调度的核心进程,它从场景设置界面得到信息,对Agent和Monitor进程发起启动命令;

Load Generator进程负载和远程的Load Generator机器种对应的Agent进程通讯。负责把编译好的脚本传送到Load Generator的机器上,在脚本运行的时候,定期从Load Generator机器上获取运行信息,保存每个虚拟日志的运行日志;

Monitor进程负责对被测试系统的各个环节进行监控,并把监控的内容写入Controller机器的本地磁盘。同时,把监控的内容传送给Center进程,实时地显示在场景运行界面上;

Load Generator机器的进程有两种,一个是Agent进程,一个是Load Generator进程。Agent负责和Controller机器通讯,它根据Controller的指示,在本机器上派生出指定数目的Load Generator进程,这些进程负责具体执行相应的脚本,Load Generator进程个数就是虚拟用户个数。

  • 对数据进行分析的Analysis

此组件是一个数据处理组件,通过对Controller收集的大量数据进行综合分析,以图的形式展现给用户。用户通过分析各种参数指标,如Web应用的页面吞吐量、每秒点击次数和事务平均响应时间,系统资源如CPU利用率、内存利用率、磁盘I/O,中间件服务器的各性能参数指标来确定系统的性能瓶颈问题。

2.2 LoadRunner测试手机APP的解决方案

一般来说,手机APP是通过HTTP协议来与应用服务器进行通讯的。LoadRunner12共提供了四种手机APP脚本录制的解决方案。如图三所示:

图三:LoadRunner12录制手机APP的四种方式.png

                                                                                                                                                                              图三:录制手机APP的四种方式

1、记录并分析通讯包  2、分析通讯包  3、使用模拟器记录  4、使用代理记录

表一:四种操作方式比较

方法名称 操作方法 复杂度
记录并分析通讯包

1、为手机和LoadRunner设置网络共享;

2、在服务器端安装网络捉包软件

分析通讯包

1、在手机端安装抓包软件;

2、将生成的数据文件,导入到LoadRunner机进行分析;

使用模拟器记录 1、在LoadRunner机上安装手机模拟器,在模拟器上模拟手机APP的操作;
使用代理记录 1、在手机端的网络上设置网络代理,将手机APP产生的数据包转发到LoadRunner机器上;

经过上面的比较,我们认为使用代理记录的方式简单易行,决定选用该测试方式进行照护平台的性能测试。

2.3 LoadRunner测试手机APP在照护平台中的应用

照护平台系统是公司为了适应医院改革的新形式,实现患者与主诊医师在院外的有效沟通,使患者在院外也能得到专业照护,便于对患者治疗全过程进行管理,使患者就医体验得到提高,医患关系得到改善开发的一款手机端APP应用软件。

在本文中,我们选择业务复杂度较高的“医生预约”模块为例,说明如何利用LoadRunner提供的技术来模拟千万各患者进行“医生预约”操作。

2.3.1 “医生预约”模块业务介绍

“医生预约”是患者根据医生的排班情况(图四:医生排班界面)进行咨询预约,并在线支付咨询费用成功后,系统自动生成咨询订单的过程。

图四:医生排班界面.jpg

                                                                                                                                                                        图四:医生排班界面

2.3.2 “医生预约”模块脚本录制

  1.         手机端网络代理设置

在手机端的网络设置中设置“代理”,在“主机名”处填写安装VuGen机的IP地址:192.168.12.25,“端口”处填写默认的端口8888。如下图五所示。

图五:手机端网络代理.png

                                                                                                                                                                                          图五:手机端网络代理

2. VuGen录制脚本选项的设置,将LoadRunner的代理端口号设置成与手机端网络的代理端口号一致。如图六所示。

LoadRunner网络代理端口.png

                                                                                                                                                                      图六:LoadRunner代理端口号

3. 生成LoadRunner的脚本

LoadRunner录制的脚本.jpg

                                                                                                                                           图七:LoadRunner录制的脚本

4. 利用LoadRunner提供的技术进行脚本的增强

从图七的脚本我们可以看到,在录制脚本时,患者选择的预约为2018-07-17日,咨询的时间端为16:30-17:00,系统为该患者的预约咨询生成的预约单号为“206E0612BB384789BBFBD349706738CB”。在实际的性能测试环境中,所有排班的预约日期和时间都有可能被预约,每次预约生成的订单号也是唯一的。所以我们需要替换脚本中的预约时段和预约单号为变量,这可以利用Loadrunner提供的函数和关联技术为录制的脚本进行增强来实现。如图八所示。

图八:增强后的脚本.jpg

                                                                                                                                              图八:增加后的脚本

我们看到通过增强后的脚本,每次运行时都使用不同的日期、时间段和咨询单号。真实的模拟了系统的操作。在多用户并发操作时,我们可以利用参数化技术对登陆的用户进行参数化,来模拟多个用户登陆。在Controller组建中,设置用户的并发数,系统将启动多个进程/线程来对被测系统进行操作。

3 总结

本文分析了LoadRunner的体系框架和工作原理,讨论了LoadRunner做手机APP测试的四种工具,并用一个实例说明了如何用LoadRunner提供的工具和技术完成实际的性能测试任务。

本文取得的主要成果有:

1、阐述了LoadRunner的整体框架;

2、展现了LoadRunner技术在实际任务中的应用。

参考文献

[1] 性能测试工具LoadRunner的工作机理及关键技术研究 《科学技术与工程》 Vol 7 No.6 Mar 2007 桑圣洪

[2] 海豚医生照护平台需求分析说明书


猜你喜欢

转载自blog.51cto.com/13693838/2170530
今日推荐