Controller组件是LR的控制中心,主要包括场景设计和场景执行两部分。在VuGen中编辑完脚本并将脚本加载到Controller组件中,即开始对脚本运行时的场景进行设计,当场景设计完成后,即可执行该场景。

场景类型介绍

Controller控制器提供了手动设计和面向目标两种测试场景。一般情况下使用手动测试场景设计方法,因为能够更灵活地按照需求来设计场景模型,使场景能更好地接近用户的真实使用。面向目标场景则是测试性能是否能达到预期的目标,在能力规划和能力验证的测试过程中经常使用到。

启动方式有两种:第一种是在开始菜单中启用;第二种是在VuGen发生器的Tools菜单中启动,如图1所示。

                               

图1

1、手动测试场景

启动Controller控制器后,会弹出‘新建场景’对话框,如图2所示。

图2

这里选中的是手动测试场景,该场景包含两种模式:用户组模式与百分比模式,不同之处在于计算虚拟用户的方式不同。

手动用户组模式如图3所示。

图3(手动用户组模式)

百分比模式如图4所示。(scenario->convert senario to the percentage mode,即可切换到百分比模式)

图4(手动百分比模式)

2、面向目标测试场景

首先定义要达到的目标,接着LR会自动基于该目标创建场景,在场景运行过程中,LR会不断地将结果与目标相比较,以决定下一步如何执行。

该场景提供了Virtual Users、Hit per Secnod、Transactions per Second、Transaction Response Time和Pages per Minute一种目标。

如图5所示是面向目标测试场景界面。

图5

场景设计

这里主要介绍Schedule、View Script和Generator参数的设置。而两种场景模式的区别主要体现在Schedule参数的设置上,另外两个参数的设置都是一致的。

1、手动场景Schedule配置

主要是用来设置用户的行为方式,这里包括按场景计划和按用户组计划(切换为用户组模式才会有group选项)两种(如图6所示)。

图6(scenario schedule配置界面)

1)场景名称(schedule name)

2)按场景计划(schedule by scenario)

initialize :设置脚本运行前如何初始化每个虚拟用户。包含3种方式:

   a.同时初始化所有虚拟用户;b.每隔一段时间初始化一定数量的虚拟用户;c.在脚本运行之前初始化所有虚拟用户。(通常情况下选择方式三)。

start vusers :设置虚拟用户加载的过程(是指总的虚拟用户数)。包含2种加载方式:

    a.同时加载所有的虚拟用户;b.每隔一定的时间加载一定数目的虚拟用户。(在实际测试过程中不会选择方式一进行加载虚拟用户)

duration :设置场景执行的时间,包含2种方式:

    a.一直运行,直到所有的虚拟用户运行完成后,结束整个场景的运行;b.设置场景持续运行时间,一般情况下在进行压力测试时,只需测试15~30min即可,但如果需要测试系统的可靠性和稳定性时,则需要持续运行24h或3*24h。

stop vusers :设置场景执行完成后虚拟用户如何释放的策略。(只有duration设置为按指定时间运行时才需要设置该项)

    a.当场景运行结束后,同时释放所有的虚拟用户;b.每隔一段时间就停止一定量的虚拟用户。(一般情况下,虚拟用户如何添加就如何停止)

3)按用户组计划(schedule by group)

比按场景计划多出了start gruop选项,在该场景中,是以组为单位进行计划的,每个组都要设置自己的start vusers、duration和stop vusers。比较灵活,能够创建实际应用中脚本与脚本之间的约束关系。如一组用户执行后产生的数据记录为另一组用户的输入,这种情况就需要使用该方式来配置场景。使用该场景时,LR默认将每个脚本定义为一个组。

这里只对start group选项卡进行分析,包含3种方式:

    a.场景执行时立即开始运行该脚本;b.场景执行一段时间后才开始运行该脚本;c.在某个特定的用户组运行结束后才开始运行该脚本,即就是在某个脚本运行结束后才开始运行。

一般情况下使用场景组方式来运行场景时,会选中每个脚本分别进行设置。如果同时设置则与普通的场景设置没有什么区别。

4)场景开始时间(scenario start time)

如图7所示,有3种方式(针对run页面的start scenario):

    a.场景立即开始,没有延误时间;b.推迟指定的时间后才开始运行;在指定的时间开始运行,如晚上8点运行。

图7

5)百分比模式

是先设定好虚拟用户总数,然后按百分比的形式对所有的虚拟用户进行分配。该场景适合综合业务模型明确的性能测试。(比如银行的查存取业务)

2、面向目标场景Schedule配置

在面向目标场景中,首先定义测试需要达到的目标,然后LR会自动根据这一目标创建场景。

在场景设置界面,单击edit scenario goal,进入编辑该目标场景对话框,如图8所示,以hit per second目标类型为例,讲述其各项设置。

图8

1)scenario settings选项卡

  run time:表示当执行达到目标后,该场景还会持续运行一段时间(设置的时间值)才结束运行。

if target cannot be reached:表示如果目标无法达到,controller将如何处理场景。有2种选择:a.停止运行场景并保存结果;b.继续运行场景直到达到目标。

2)load behavior选项卡

设置加载行为,有3种方式:a.让controller自动加载用户;b.设定一个时间,在该时间后达到目标;c.每隔一段时间增加一定的目标量。

3)目标类型

a.virtual users

主要是用来测试服务器对并发用户的处理能力,假如将虚拟用户设置为100个,那么LR会逐渐递增虚拟用户,直到加载到100个为止,如不能达到,将采取if target cannot be reached中设置的策略来继续运行当前的场景。(如图9所示)

图9

b.hits per second

设置的目标是点击数/秒,如图10所示,同时要设置最大和最小虚拟用户数。因为点击率的值大小与虚拟用户数成正比,假设测试出来的点击率的值达不到目标值,那么就必须增加虚拟用户数,否则点击率的值就不可能增加,所以在设置点击率的值为目标时,就必须限定虚拟用户数的范围,也即最大和最小虚拟用户数的值。

运行原理:当场景执行时,controller会先用最小虚拟用户数去执行,结束后判断点击率的值是否达到目标值,如果达到了则停止当前运行的场景;否则继续增加虚拟用户,再判断结果是否达到预期目标值。一直重复,直到达到目标 。如果使用最大虚拟用户数还是无法达到目标值时,那么场景将会停止运行,并保存相应的结果。

图10

c.transaction per second

设置的目标为每秒处理的事务数,如图11所示,注意在脚本中一定要定义事务,否则事务名称栏为空白。

图11

如果从业务的角度看,每秒钟处理的事务数即为系统每秒钟处理的业务笔数,所以该项指标更多的是用于衡量系统每秒钟处理的业务数。同样的也要设置最大和最小虚拟用户数,因为要改变每秒钟处理的事务数就必须通过虚拟用户数来改变,但要注意的是,当虚拟用户数成倍增长时,处理的事务数并不会成倍增长,因为随着虚拟用户数增多,事务的平均响应时间也增加了,这样在相同的时间内,每个虚拟用户处理的事务数就相当少了,所以处理的事务数不可能成倍增长。

运行原理:跟hits per second的原理相同

d.transaction response time

设置的目标为多用户并发时事务的响应时间,如图12所示

图12

运行原理:跟hits per second的原理相同,假设当前虚拟用户数为10个,那么说明系统最多只能处理10个用户同时请求。如果使用最大的虚拟用户数还是无法达到目标值时,那么场景将会停止运行,并保存相应的结果,同时也说明系统可以支持更多的虚拟用户同时运行。

e.pages per minute

设置的目标为每分钟处理的页面数,如图13所示。

图13

每秒钟处理的页面数与每秒钟处理的事务数,其本质是一样的,因为一个事务可能由多个页面组成,当一个事务只由一个页面组成时,那么每秒种处理的页面数一每秒钟处理的事务数完全一致。

在以下情况下,hits per second、transactions per second、pages per minute类型的场景结果中会被置为failed状态:

   a.控制器使用指定的最大用户数,并且执行两次都没有达到目标;b.负载机不够;c.所有的用户都运行失败;d.控制器增加了几批虚拟用户后,hits per second、transactions per second、pages per minute的值没有增加。

3、配置View Script

在场景设计界面,脚本加载后,如需对加载的脚本进行修改,可以选中需要配置的脚本并单击右键,选择View Script对脚本进行修改。

要注意修改后,一定要重新加载该脚本才能确保场景执行中的脚本是修改后的脚本

4、配置Load Generator

Load Generator 又称负载发生器,当控制器发出执行命令时,Load Generator 负责和其他的负载机建立起联系并强制负载机执行。一个controller可以通过Load Generator 来控制多台负载机。如图14所示

图14

可以add负载机,完成后connect,测试负载机与控制机连接的情况,如果status为ready,表示连接成功;如果为failed,表示连接失败,这时就要检查网络是否存在问题。

在使用负载机模拟多用户测试系统时,需要注意以下几个问题:

1)计算需要负载机的台数。

在使用负载机时首先需要解决的第一个问题是测试时需要多少台负载机才能满足测试的需要(如测试时需要测试500个虚拟用户),在确定该问题之前需要先确定每个用户需要消耗的系统资源,当把每个虚拟用户按进行的方式来运行时,那么当场景运行时,每添加一个虚拟用户都会增加一个进程,而每个进程都是需要消耗内存和CPU资源的。通常情况下每个虚拟用户消耗多少资源受操作系统、录制时选择的协议及LR的版本3个方面的影响,可百度下官方公布的虚拟用户消耗内存资源参考值。

比如每个虚拟用户消耗的内存资源大概为6800KB左右,如果以500个虚拟用户为例大概需要消耗3320MB(6800KB*500/1024=3320MB)的内存,如果每台测试机的内存为1GB(3320MB/1024=3.2421875),那么至少需要4台这样的测试机。

2)控制器如何控制负载机运行。

控制器通过代理程序去控制负载机运行(代理程序的名称为loadrunner agent process),所以首先需要在控制器和客户端启动代理程序(开始菜单->HP LR->Tools->loadrunner agent runtimes..)。

启动后弹出loadrunner agent设置对话框,如图15所示

图15

a.允许所有的虚拟用户不用登录即可运行,但需要设置登录主机的名称、用户名和密码。

b.手动登录服务器。一般使用手动去登录即可。

启动代理程序后(注意控制器和负载机都需要启动代理程序),当场景在初始化时,控制器会向负载机发送一个二进制文件,该二进制文件中就包括所有待运行的脚本信息,当初始化后,负载机就会产生虚拟用户来模拟测试。

场景执行

1、场景控制

在Run选项卡中,主要包括场景运行控制信息和数据图两部分,如图16所示。(注:截图是手工测试场景模式,如果是目标测试场景模式的话,down是为空的,是根据设置的目标来加载的)

图16(run选项卡界面图)

关于scenario groups讲解:左边显示每个用户组的运行状态,右边为场景的控制操作。

start scenario:开始场景,此时controller开始初始化虚拟用户,并将这些虚拟用户服务分配到负载发生器,开始运行脚本。

stop:停止场景,对于如何控制场景停止运行有3种方式(tools->options),如图17所示:

a.等当前迭代运行结束后,再停止运行场景;b.等当前的action结束后,再停止运行场景;c.不等待,立即停止运行场景

图17(场景停止设置方式)

reset:将方案中所有的vuser组重置为方案运行前的‘关闭(Down)’状态,准备下一次场景的执行。

vusers:虚拟用户组,如图18所示,可以看到每个vuser的详细状态(ID、运行状态、脚本、负载发生器和所用时间),在这里可以选择单个vusers进行操作(那些右键的其他操作可以自己去点一下)

图18

run/stop vusers:(目标测试场景的该按钮是置灰的)设置继续执行还是停止某个用户组,如图19所示,在运行期间可以在这里手动控制新添加的vuser(注意:该对话框因运行场景的模式不同而有所不同)

图19(手动模式run/stop vusers设置)

图20,是在百分比模式下运行场景,能够根据定义的百分比,分配新的vusers数,以及运行这些添加 的vuser的负载发生器。

图20(百分比模式run/stop vusers设置)

2、场景执行期间查看场景

1、vuser运行状态。

2、事务详细信息

如图21所示,及各参数项的含义

        

图21

如图22所示,可以看到事务的详细信息。TPS:每秒的事务数;Passed/Failed/Stopped:表示运行已通过/已失败/已停止的事务数。

图22(事务详细信息)

3、查看‘输出’窗口

view->show output,可调出输出窗口,如图23所示,vuser和负载发生器会向controller发送错误、通知、警告、调试和批处理消息,这些信息可以在输出窗口中查看到。(重置时消息仍会保留)

图23

details可查看详细消息文本,如果需要查看更加详细的信息,可以单击相应列的蓝色链接,如图24所示。

图24

分析输出信息时,需要确定以下几个方面的问题:

1)出错是由于性能测试引起的还是由于脚本编写的错误引起;

2)找到出错的日志信息。

要找到出错的具体日志信息,必须通过输出的信息找到这几方面的信息,错误信息是来自哪台负载机,错误信息是来自哪个虚拟用户。确定这两方面的信息后就可以找到场景运行时的日志信息了,否则在运行大量虚拟用户时,如果一个一个地查看每个虚拟用户的日志信息,则效率很低。

loadrunner入门篇-Controller控制器的更多相关文章

  1. loadrunner入门篇-Analysis 分析器

    analysis简介 分析器就是对测试结果数据进行分析的组件,它是LR三大组件之一,保存着大量用来分析性能测试结果的数据图,但并不一定要对每个视图进行分析,可以根据实际情况选择相关的数据视图进行分析, ...

  2. loadrunner入门篇-Vuser发生器

    Vuser 发生器(Visual User Generator,VuGen),主要通过捕获客户端向服务器发送的HTTP请求,将这些请求录制成脚本,在回放时将捕获的HTTP请求再次发送,以达到模拟客户行 ...

  3. loadrunner提高篇-插入检查点与关联函数

    插入检查点   靠LR自动生成的脚本是不够的,很难达到业务要求,因此需要对录制完的脚本进行完善,使其能达到业务模拟的要求 ,这样尽可能地使虚拟用户模拟时更接近用户的实际使用. 在进行压力测试时,经常会 ...

  4. JMeter性能测试,完整入门篇

    1. Jmeter简介 Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件.相比Loadrunner而言,JMeter小巧轻便且免费,也越来越流行成为了主流的性能测试工具 ...

  5. .NET Core实战项目之CMS 第二章 入门篇-快速入门ASP.NET Core看这篇就够了

    作者:依乐祝 原文链接:https://www.cnblogs.com/yilezhu/p/9985451.html 本来这篇只是想简单介绍下ASP.NET Core MVC项目的(毕竟要照顾到很多新 ...

  6. SpringMVC.入门篇.一.HelloWorld

    SpringMVC.入门篇<一>HelloWorld 项目包结构如下: HelloController.java 代码 package com.charles.controller; im ...

  7. 【转】Spring Boot干货系列:(一)优雅的入门篇

    转自Spring Boot干货系列:(一)优雅的入门篇 前言 Spring一直是很火的一个开源框架,在过去的一段时间里,Spring Boot在社区中热度一直很高,所以决定花时间来了解和学习,为自己做 ...

  8. Java基础-SSM之Spring MVC入门篇

    Java基础-SSM之Spring MVC入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Spring MVC简介 1>.什么是Spring MVC 答:Sprin ...

  9. Spring Boot干货系列:(一)优雅的入门篇

    Spring Boot干货系列:(一)优雅的入门篇 2017-02-26 嘟嘟MD 嘟爷java超神学堂   前言 Spring一直是很火的一个开源框架,在过去的一段时间里,Spring Boot在社 ...

随机推荐

  1. 字符集UTF-8MB4 MySQL utf8mb4 字符集,用于存储emoji表情

    字符集UTF-8MB4 utf8mb4兼容utf8,且比utf8能表示更多的字符.看unicode编码区从1 - 126就属于传统utf8区,当然utf8mb4也兼容这个区,126行以下就是utf8m ...

  2. Strut、Spring、Hibernate如何实现资源整合(SSH)呢?

    Strut.Spring.Hibernate如何实现资源整合(SSH)呢? 其实很简单,我们从Spring与Hibernate的整合中可以看出来,由Spring的配置文件来管理Hiberbate的配置 ...

  3. apache 做负载

    首先说明一下,我感觉这种办法不太好,不能叫负载吧.不知道跳转到的服务器把数据返回给用户,还通不通过Apache的服务器,还有就是不能断点下载了 方法 1.打开httpd.conf  把如下模块前面的# ...

  4. Java Web快速入门——全十讲

    Java Web快速入门——全十讲 这是一次培训的讲义,就是我在给学生讲的过程中记录下来的,非常完整,原来发表在Blog上,我感觉这里的学生可能更需要. 内容比较长,你可以先收藏起来,慢慢看. 第一讲 ...

  5. JSP 初始化参数

    JSP 初始化参数: tomcat启动的时候就会执行那个函数: xml: <?xml version="1.0" encoding="UTF-8"?> ...

  6. 理解 Objective-C Runtime

    初学 Objective-C(以下简称ObjC) 的人很容易忽略一个 ObjC 特性 —— ObjC Runtime.这是因为这门语言很容易上手,几个小时就能学会怎么使用,所以程序员们往往会把时间都花 ...

  7. 使用PMD进行代码审查

    很久没写博客了,自从上次写的设计模式的博客被不知名的鹳狸猿下架了一次之后兴趣大减,那时候就没什么兴致写博客了,但是这段时间还没有停下来,最近也在研究一些其他的东西,目前有点想做点东西的打算,但好像也没 ...

  8. OVS vxlan 底层结构分析 - 每天5分钟玩转 OpenStack(148)

    上一节创建了 vxlan100_net 并部署 instance,今天我们来分析底层网络结构. 控制节点 执行 ovs-vsctl show: br-int br-int 连接了如下 port: ta ...

  9. json基础教程|理解Json

    一. 在异步应用程序中发送和接收信息时,可以选择以纯文本和 XML 作为数据格式.这一期讨论一种有用的数据格式 JavaScript Object Notation(JSON),以及如何使用它更轻松地 ...

  10. [译] 关于 Git 你需要知道的一些事情

    分支和合并 Git 跟其他版本控制系统最大的优势就在于其高级的分支模型. Git 允许而且 鼓励 你在本地使用多个完全独立的分支.这些分支的创建,合并和删除几乎都可以在几秒内完成. 这意味着你可以轻松 ...