性能测试——Virtual User Generator

性能测试

一、性能测试基础

1.1 性能测试概念

​ 性能测试是使用自动化测试工具对产品按一定的性能指标进行测试,解决性能瓶颈,给用户最好的体验。

1.2 性能测试基本流程

1、前期准备
  1. 性能测试需求
  • 项目经理
  • 业务/构架专家
  • 产品经理
  • 高技性能测试工程师
  • 开发经理
  1. 性能测试计划
    • 高技性能测试工程师
    • 项目经理
    • 构架师
    • 产品经理
  2. 性能测试准备
    • 性能测试工程师
    • 外部支持(网络工程师、系统管理员)
2、步骤
  1. 开发脚本/执行测试
    • 高技性能测试工程师
    • 性能测试工程师
  2. 测试结果分析
    • 高技性能测试工程师

    • 外部支持(系统管理员、DBA)

      *DBA:Database Administrator,数据管理员

  3. 系统调优
    • 架构师
    • 产品经理
    • 高级性能测试工程师
    • 外部支持(DBA)
  4. 编写测试报告
    • 性能测试工程师
    • 高级性能测试工程师

1.3 web性能测试常用指标

1.响应时间(Response time)

​ 响应时间就是用户感受软件系统为其服务所耗费的时间,对于网站系统来说,响应时间就是从点击了一个页面的计时开始,到这个页面完全在浏览器里展示计时结束的这一段时间间隔。

​ 响应时间:2-5-8原则

  • 用户在2-5秒之间得到响应时,会感觉系统的响应速度还可以;
  • 当用户在5-8秒以内得到响应时,会感觉系统的响应速度很慢,但是还可以接受;
  • 而当用户在超过8秒后任然无法得到响应时,会感觉网站非常慢。
2.吞吐量(Throughput)

指的是在单位时间内客户端和服务器成功传送数据的数量。

3.资源使用率(Resource utilization)

常见的资源有:CPU占用率、内存使用率、磁盘I/O、网络I/O。

4.每秒点击数(Hits per second)

​ 指客户端每秒钟向服务器端提交的请求数量,如果客户端发出的请求数量越多,与之相对的平均吞吐量也应该越大。

5.并发用户数(Concurrent users)

​ 指在客户端的一批用户同时执行一个操作的数量。并发数反映了软件系统的并发处理能力。

​ 两种错误的理解:1、使用系统的全部用户的数

​ 2、用户在线数量

二、Virtual User Generator

2.1 测试脚本概要

1、Init,action,end说明
  • init录制的一般业务流程开始之前的初始化工作。(如登录,服务器初始化)

  • action录制的一般是业务流程操作的事件

  • end录制的一般是退出的时候执行的操作。(如用户退出,注销)

    *init和end不能迭代多次,只能运行一次,action可以迭代多次运行。

  • 如果测试需求对业务流程没有重复的要求,可以都放在action部分。有重复的要求,如要求一个用户登录之后要求重复订票10次,就需要把订票部分放在action中进行迭代。登录部分脚本放在init,退出部分放在end。

实例:登录WebTours订票网站,预定一张机票后退出。

脚本录制操作步骤(Recording):

  1. 启动web服务器

  2. 打开Virtual User Generator界面

  3. 选择脚本协议

  4. 进行页面操作

  5. 回放脚本(Replay),回放是验证脚本是否能够正常运行的依据

  6. 设置关联

    许多应用程序都使用动态值,每次使用应用程序时这些值都会变化。例如,有些服务器会为每个新会话分配一个唯一的会话ID。回放录制的会话时,应用程序创建的新会话ID与录制的会话ID不同。LoadRunner通过关联解决了这种问题。关联将动态值(在本例中为会话ID)保存到参数中。运行模拟场景时,Vuser并不使用录制的值,而是使用服务器分配的新会话ID。

    • 设置webtours网站,录制脚本使用户登录时会产生会话ID,从而导致回放失败。
    • 找到关联参数,进行手动关联,再次回放。

2.2 HTML模式和URL模式

​ 在默认情况下,选择“HTML-based script”,说明脚本中采用HTML页面的形式来表示,这种方式的脚本容易维护,容易理解,推荐以这种方式录制。

1、“URL-based script”说明

​ 脚本中表示采用基于URL的方式,所有HTTP的请求都会被录制下来,单独生成函数,所以URL模式生成的脚本会显得有些杂乱。URL录制的脚本中web_concurrent_start函数是并发组开始的标记,web_concurrent_end是并发组的结束标记。在并发组中的函数不是立即执行的。在并发组开始时,所有的函数首先被记录下来,当并发组结束时,所有的函数并发执行。

2、选择HTML还是URL录制的参考原则:
  1. 基于浏览器的应用程序推荐使用HTML-based script。
  2. 不是基于浏览器的应用程序推荐使用URL-based script。
  3. 如果基于浏览器的应用程序中包含了JavaScript并且该脚本向服务器产生了请求,使用URL-based script方式录制。
  4. 基于浏览器的应用程序中使用了HTTPS安全协议,使用URL-based script方式录制。

2.3 事务(Transaction)

1、定义

​ 事务(Transaction)是为了衡量某个操作的性能,在操作的开始和结束为止插入一个范围。

2、原因

​ 从性能测试的角度发出,我们需要知道不同的操作所花费的时间,这样我们就可以衡量不同的操作对被测系统所造成的影响,那么我们如何知道不同的操作所花费的时间,这就用到了事务,我们在操作之前插入一个事务开始标识,在操作完成后插入一个事务结束标识,这样我们就知道这个操作所花费的时间。

3、作用

​ 事务的作用:LoadRunner运行到该事务的开始点时,LoadRunner就会开始计时,直到运行到该事务的结束点,计时结束。这个事务的运行时间在LoadRunner的运行结果中会有反映。通俗的讲,LoadRUnner中的事务就是一个计时标识,LoadRunner在运行过程中一旦发现事务的开始标识,就开始计时,一旦发现事务的结束标识,则计时结束,这个过程中得到的时间即为一个事务时间。通常事务时间锁反映的是一个操作过程的响应时间。

4、函数构造

​ 事务开始函数共包括一个参数,就是事务的名称,事务结束函数共包括两个参数,第一个参数是事务的名称,第二个参数是事务的状态。事务状态可以为LR_PASS :返回“PASS”返回代码;LR_FAIl:返回“FAIL”返回代码;LR_STOP:返回“STOP”返回代码;LR_AUTO:自动返回检测到的状态。Duration表示实物店完成响应时间,wastedtime包括事务中函数自身执行所消耗的时间。

5、注意事项

​ 在应用事务的过程中,不要将思考时间(lr_think_time函数)放在事务开始和事务结束之间,否则在回放思考时间设置被允许的情况下,思考时间将被算入事务的执行时间,从而影响了对事务正确的执行时间的分析与统计。

2.4 参数化设置

1、Select next row(选择下一行):

​ 顺序(Sequential):按照参数化的数据顺序,一个一个的来取值。

​ 随机(Random):参数化的数据,每次随机的从中抽取数据。

​ 唯一(Unique);为每个虚拟用户分配一条唯一的数据。

2、Update value on(更新时的值):

​ 每次迭代(Each iteration):每次迭代时取新的值。

​ 每次出现(Each occurrence):每次参数化时取新的值,这里强调前后两次取值不能相同。

​ 只取一次(Once):参数化中的数据,一条数据只能被抽取一次。

3、When out of values(数据不够时的处理方式):

​ Abort Vuser:中断虚拟用户

​ Countinue in a cylic manage:循环取参数化文件中的值

​ Countinue with last value:继续用最后一条数据

2.5 录制日志

​ 在录制和回放的时候,VuGen会分别把发生的事件记录成日志文件,这些日志有利于跟踪VuGen和服务器的交互过程。

1、回放日志(Replay Log)

​ 脚本回放运行时的输出都记在这个Log里。

​ “输出”窗口的“回放日志”显示的消息用于描述Vuser运行时执行的操作。该信息可说明在方案中执行脚本时,该脚本的运行方式。脚本执行完成后,可以检查“回放日志”中的消息,以查看脚本在运行时是否发生错误。

​ “回放日志”中使用了不同颜色的文本:

  • 黑色:标准输出消息。

  • 红色:标准错误消息。

  • 绿色:用引号括起来的文字字符串(例如URL)。

  • 蓝色:事务消息(开始、结束、状态和持续时间)。

  • 橙色:迭代次数信息

    如果双击以操作名开始的行,光标将会跳到生成的脚本中的相应步骤上。

2、录制日志(Recording Log)

​ 当录制脚本时,VuGen会捕获Client端(浏览器)与Server端(服务器)之间的对话,并且通通记录下来,产生脚本。在VuGen的Recording Log中,我们可以找到浏览器与服务器之间所有的对话,包含通信内容、日期、时间、浏览器的请求、服务器的响应内容等。

3、产生日志(Generation Log)

​ 产生日志记录了脚本录制的设置、网络事件到脚本函数的转化过程。

2.6 VuGen错误处理函数

​ 错误处理函数lr_continue_on_error,用来在脚本中实时修改Vuser的出错设置。lr_continue_on_error函数语法结构如下:

​ void lr_continue_on_error(int value);

​ value是脚本运行出错设置的取值,具体取值及相应值的含义如表所示。在使用表中的参数时,即可以使用常量名称作为参数,也可以直接使用对于常量值作为参数。

常量名称常量值含义
LR_ON_ERROR_NO_OPTIONS0取消出错继续执行设置
LR_ON_ERROR_CONTINUE1发生错误继续运行脚本
LR_ON_ERROR_SKIP_TO_NEXT_ACTION2发生错误跳至下个Action运行
LR_ON_ERROR_SKIP_TO_NEXT_ITERATION3发生错误跳至下一迭代来运行
LR_ON_ERROR_END_VUSER4发生错误结束当前用户

​ lr_continue_on_error调用后将对其后面所有的语句产生影响。因此,脚本中较常用的是lr_continue_on_error(0)与le_continue_on_error(1)。这两个语句成对出现,期间包含着需要设置为发生错误停止执行的关键业务脚本。

​ 这种设置比较适合压力较大且在夜间自动运行的测试场景,而这类场景通常会在Run-time Setting 中开启Continue on error选项,因此需要通过lr_continue_on_error(0)关闭Continue on error选项,使一些关键业务发生错误停止执行。对于一些非关键业务,则需要通过lr_continue_on_error(1)开启Continue on error选项,这样即使遇到错误也不影响脚本的继续执行。

2.7 Java Vuser虚拟用户

​ Java Vuser是自定义的Java虚拟脚本,脚本中可以使用标准的java语言。

1、环境配置
  1. 安装jdk,最高支持1.6版本的jdk
  2. 配置环境变量
  3. 在lr中选择java Vuser协议
2、脚本结构

​ 一般在init中编写初始化脚本,在action中编写业务流程,在end编写释放资源的内容。

3、适用范围
  1. 不太适合录制业务功能点的性能测试,如视频播放,http文件下载
  2. 利用java语言开发的应用系统
4、脚本编写最佳实例:

​ 程序的开发通常要经过代码评审、编码和测试等流程后,才会趋于稳定。

​ 通常验证一个脚本比较好的过程是这样的:

  1. Generate:录制或开发脚本
  2. SUSI(Single User Single Iteration,单用户单循环):运行录制生成的脚本,解决可能存在的关联问题。
  3. SUMI(Single User Multi Iterations,单用户多循环):参数化脚本,在Run-time中设置Iteration,再次运行,验证参数化问题。
  4. MUSI(Multi User SIngle Iterations,多用户单循环):Controller里多用户运行脚本,验证脚本中可能的多线程同步问题。
  5. MUMI(Multi User Multi Iteration,多用户多循环):即性能测试开始。
5、LR常见报错处理方法:
  1. LoadRunner录制脚本时为什么不弹出IE浏览器?

    ​ 当一台主机上安装多个浏览器时,LoadRunner录制脚本经常可能遇到不能打开浏览器的情况,解决办法:

    ​ 启动浏览器,打开Internet选项对话框,切换到高级标签,去掉“启用第三方浏览器扩展(需要重启浏览器)”的勾选,然后再次运行VuGen即可。

    ​ 提示:通常安装Firefox等浏览器后,都会勾选上面的选项,导致不能正常录制,且浏览器建议使用版本比较老的,不然无法使用。

  2. 录制Web脚本时,生成的脚本存在乱码该如何解决?

    录制脚本前,打开录制选项配置对话框Record-Options,进入到Advanced标签,先勾选“Support charset”,然后选择支持UTF-8。再次录制,就不会出现中文乱码问题了。

  3. 录制的脚本为空?

    • 选择的协议不对,这个需与开发人员沟通;
    • 没有选择jar包;
    • 检查防火墙杀毒软件
6、Virtual User Generator小结:
  1. 脚本录制

    Web脚本,APP脚本,

  2. 回放验证

    关联设置,日志分析

  3. 脚本增强

    添加事务,参数化,内容检查,错误处理

  4. 负载准备

    SUSI,SUMI,MUSI,MUMI脚本验证流程

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值