性能测试是使用自动化测试工具对产品按一定的性能指标进行测试,解决性能瓶颈,给用户最好的体验。
高技性能测试工程师
外部支持(系统管理员、DBA)
*DBA:Database Administrator,数据管理员
响应时间就是用户感受软件系统为其服务所耗费的时间,对于网站系统来说,响应时间就是从点击了一个页面的计时开始,到这个页面完全在浏览器里展示计时结束的这一段时间间隔。
响应时间:2-5-8原则
指的是在单位时间内客户端和服务器成功传送数据的数量。
常见的资源有:CPU占用率、内存使用率、磁盘I/O、网络I/O。
指客户端每秒钟向服务器端提交的请求数量,如果客户端发出的请求数量越多,与之相对的平均吞吐量也应该越大。
指在客户端的一批用户同时执行一个操作的数量。并发数反映了软件系统的并发处理能力。
两种错误的理解:1、使用系统的全部用户的数
2、用户在线数量
init录制的一般业务流程开始之前的初始化工作。(如登录,服务器初始化)
action录制的一般是业务流程操作的事件
end录制的一般是退出的时候执行的操作。(如用户退出,注销)
*init和end不能迭代多次,只能运行一次,action可以迭代多次运行。
如果测试需求对业务流程没有重复的要求,可以都放在action部分。有重复的要求,如要求一个用户登录之后要求重复订票10次,就需要把订票部分放在action中进行迭代。登录部分脚本放在init,退出部分放在end。
脚本录制操作步骤(Recording):
启动web服务器
打开Virtual User Generator界面
选择脚本协议
进行页面操作
回放脚本(Replay),回放是验证脚本是否能够正常运行的依据
设置关联
许多应用程序都使用动态值,每次使用应用程序时这些值都会变化。例如,有些服务器会为每个新会话分配一个唯一的会话ID。回放录制的会话时,应用程序创建的新会话ID与录制的会话ID不同。LoadRunner通过关联解决了这种问题。关联将动态值(在本例中为会话ID)保存到参数中。运行模拟场景时,Vuser并不使用录制的值,而是使用服务器分配的新会话ID。
在默认情况下,选择“HTML-based script”,说明脚本中采用HTML页面的形式来表示,这种方式的脚本容易维护,容易理解,推荐以这种方式录制。
脚本中表示采用基于URL的方式,所有HTTP的请求都会被录制下来,单独生成函数,所以URL模式生成的脚本会显得有些杂乱。URL录制的脚本中web_concurrent_start函数是并发组开始的标记,web_concurrent_end是并发组的结束标记。在并发组中的函数不是立即执行的。在并发组开始时,所有的函数首先被记录下来,当并发组结束时,所有的函数并发执行。
事务(Transaction)是为了衡量某个操作的性能,在操作的开始和结束为止插入一个范围。
从性能测试的角度发出,我们需要知道不同的操作所花费的时间,这样我们就可以衡量不同的操作对被测系统所造成的影响,那么我们如何知道不同的操作所花费的时间,这就用到了事务,我们在操作之前插入一个事务开始标识,在操作完成后插入一个事务结束标识,这样我们就知道这个操作所花费的时间。
事务的作用:LoadRunner运行到该事务的开始点时,LoadRunner就会开始计时,直到运行到该事务的结束点,计时结束。这个事务的运行时间在LoadRunner的运行结果中会有反映。通俗的讲,LoadRUnner中的事务就是一个计时标识,LoadRunner在运行过程中一旦发现事务的开始标识,就开始计时,一旦发现事务的结束标识,则计时结束,这个过程中得到的时间即为一个事务时间。通常事务时间锁反映的是一个操作过程的响应时间。
事务开始函数共包括一个参数,就是事务的名称,事务结束函数共包括两个参数,第一个参数是事务的名称,第二个参数是事务的状态。事务状态可以为LR_PASS :返回“PASS”返回代码;LR_FAIl:返回“FAIL”返回代码;LR_STOP:返回“STOP”返回代码;LR_AUTO:自动返回检测到的状态。Duration表示实物店完成响应时间,wastedtime包括事务中函数自身执行所消耗的时间。
在应用事务的过程中,不要将思考时间(lr_think_time函数)放在事务开始和事务结束之间,否则在回放思考时间设置被允许的情况下,思考时间将被算入事务的执行时间,从而影响了对事务正确的执行时间的分析与统计。
顺序(Sequential):按照参数化的数据顺序,一个一个的来取值。
随机(Random):参数化的数据,每次随机的从中抽取数据。
唯一(Unique);为每个虚拟用户分配一条唯一的数据。
每次迭代(Each iteration):每次迭代时取新的值。
每次出现(Each occurrence):每次参数化时取新的值,这里强调前后两次取值不能相同。
只取一次(Once):参数化中的数据,一条数据只能被抽取一次。
Abort Vuser:中断虚拟用户
Countinue in a cylic manage:循环取参数化文件中的值
Countinue with last value:继续用最后一条数据
在录制和回放的时候,VuGen会分别把发生的事件记录成日志文件,这些日志有利于跟踪VuGen和服务器的交互过程。
脚本回放运行时的输出都记在这个Log里。
“输出”窗口的“回放日志”显示的消息用于描述Vuser运行时执行的操作。该信息可说明在方案中执行脚本时,该脚本的运行方式。脚本执行完成后,可以检查“回放日志”中的消息,以查看脚本在运行时是否发生错误。
“回放日志”中使用了不同颜色的文本:
黑色:标准输出消息。
红色:标准错误消息。
绿色:用引号括起来的文字字符串(例如URL)。
蓝色:事务消息(开始、结束、状态和持续时间)。
橙色:迭代次数信息
如果双击以操作名开始的行,光标将会跳到生成的脚本中的相应步骤上。
当录制脚本时,VuGen会捕获Client端(浏览器)与Server端(服务器)之间的对话,并且通通记录下来,产生脚本。在VuGen的Recording Log中,我们可以找到浏览器与服务器之间所有的对话,包含通信内容、日期、时间、浏览器的请求、服务器的响应内容等。
产生日志记录了脚本录制的设置、网络事件到脚本函数的转化过程。
错误处理函数lr_continue_on_error,用来在脚本中实时修改Vuser的出错设置。lr_continue_on_error函数语法结构如下:
void lr_continue_on_error(int value);
value是脚本运行出错设置的取值,具体取值及相应值的含义如表所示。在使用表中的参数时,即可以使用常量名称作为参数,也可以直接使用对于常量值作为参数。
常量名称 | 常量值 | 含义 |
---|---|---|
LR_ON_ERROR_NO_OPTIONS | 0 | 取消出错继续执行设置 |
LR_ON_ERROR_CONTINUE | 1 | 发生错误继续运行脚本 |
LR_ON_ERROR_SKIP_TO_NEXT_ACTION | 2 | 发生错误跳至下个Action运行 |
LR_ON_ERROR_SKIP_TO_NEXT_ITERATION | 3 | 发生错误跳至下一迭代来运行 |
LR_ON_ERROR_END_VUSER | 4 | 发生错误结束当前用户 |
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选项,这样即使遇到错误也不影响脚本的继续执行。
Java Vuser是自定义的Java虚拟脚本,脚本中可以使用标准的java语言。
一般在init中编写初始化脚本,在action中编写业务流程,在end编写释放资源的内容。
程序的开发通常要经过代码评审、编码和测试等流程后,才会趋于稳定。
通常验证一个脚本比较好的过程是这样的:
LoadRunner录制脚本时为什么不弹出IE浏览器?
当一台主机上安装多个浏览器时,LoadRunner录制脚本经常可能遇到不能打开浏览器的情况,解决办法:
启动浏览器,打开Internet选项对话框,切换到高级标签,去掉“启用第三方浏览器扩展(需要重启浏览器)”的勾选,然后再次运行VuGen即可。
提示:通常安装Firefox等浏览器后,都会勾选上面的选项,导致不能正常录制,且浏览器建议使用版本比较老的,不然无法使用。
录制Web脚本时,生成的脚本存在乱码该如何解决?
录制脚本前,打开录制选项配置对话框Record-Options,进入到Advanced标签,先勾选“Support charset”,然后选择支持UTF-8。再次录制,就不会出现中文乱码问题了。
录制的脚本为空?
脚本录制
Web脚本,APP脚本,
回放验证
关联设置,日志分析
脚本增强
添加事务,参数化,内容检查,错误处理
负载准备
SUSI,SUMI,MUSI,MUMI脚本验证流程