场景Scenairo
在LR中,场景是通过Controller组件来创建、设置、执行的。 脚本是模拟的单个用户的行为,而场景模拟的是多个用户的行为,是多个用户执行 相同/不同 的脚本的情形。
在性能测试过程中,一般来说,场景分为两种类型:
-
单一场景:只会运行一种业务请求脚本。 目的在于测试极端的场景,即用户都执行某一个请求的情况。 常见于负载、压力、容量、并发测试等
-
混合场景:会运行多个业务请求脚本。
Controller中场景相关的设置
我们通过Controller可以设置两种模式的场景:
-
目标场景(goal oriented scenairo ):以特定的性能目标为驱动来实现的场景,在该类场景中,我们只能选择和设置目标,不能够去控制具体的每一个虚拟用户的行为,多用于验收测试。
可选的目标有五个(edit scenairo goal):
-
Vusers:负载用户数。
-
Hits per second:每秒点击率,点击就是指协议级别的请求(包含子请求)。属于吞吐量类型的指标。
-
Transaction response time:事务响应时间,即响应时间。
-
Transactions per second:每秒事务数。属于吞吐量类型的指标。
-
Pages per minute:每分钟的页面数,仅对HTML模式的脚本有效。属于吞吐量类型的子场景
-
-
手工场景(manual scenairo ):以虚拟用户为驱动来实现的场景,在该类场景中,我们可以设置虚拟用户的数量、虚拟用户的启动、执行、停止等行为。 手工场景又有两种模式:
-
User group mode:用户组模式。
-
Percentage mode:百分比模式。
-
手工场景设置详解
Scenario分为两个tab:Design和Run。
-
Design:用来设置场景。
-
Run:用来运行场景、实时监控运行状态、添加集成监控的。
场景设置
-
Group:用户组,在LR中,虚拟用户和脚本是通过group来建立联系的。
-
Runtime-settings:场景中的不同的脚本(用户组)是独立设置运行时选项的。 每一个脚本(用户组)都是继承自Vugen中的runtime-settings的值,除了log和thinktime选项(一般根据需要在场景中需要检查)。
-
Details:场景中的不同的脚本(用户组)是独立设置的。这里一般都是去refresh(刷新)脚本的。
-
Service Level Agreement:简称SLA,服务体系评价。提供了一种分析的思路、方式给我们来辅助分析最终的运行结果。 SLA的规则可以在脚本运行之前,在Controller中添加;也可以在脚本运行之后,在Analaysis组件中添加。
SLA提供了一种目标+因素的区间分析法的思路。
Scenario Schedule 场景计划
-
Schedule name:计划名称,默认即可。
-
Schedule by:该选项是用来设置场景计划的作用范围,可选的有两个选项:
-
Scenario:场景,即全局计划。意味着整个场景中的所有的用户组中的所有虚拟用户遵循同一个计划。
-
Group:用户组,即用户组计划。不同的用户组就会有不同的组计划。用户组之间的计划是相互独立的。
-
-
Run mode:运行模式。
-
Real-world mode:真实世界模式,该模式下我们可以模拟虚拟用户的多个峰值变化情况。
-
Basic mode:基础模式,该模式下我们只能最多模拟虚拟用户的一个峰值变化情况。
-
一般情况下,性能测试是一种采取悲观策略的测试,我们会去模拟最大增速和最大用户数的组合情况。通常我们完成这个最极端的峰值变化情况之后,我们就认为系统能够适用于其它任何情况了。
-
Start time:调度器,是用来实现滞后执行的效果的。 调度器是在点击start scenario按钮之后生效的
Schedule的构成:一般来说,LR中的计划是由四个核心的action构成的
-
Initialize:初始化虚拟用户
-
Start Vusers:启动虚拟用户
-
Duration:持续运行
-
Stop Vusers:停止虚拟用户
LR对于虚拟用户的控制是和虚拟用户的状态有关的。
虚拟用户的状态(run界面)
-
Down:未启动。
-
Pending:准备中,表示Controller向负载机(Load generator)发送脚本的过程。
-
Init:初始化,表示LR初始化虚拟用户,包括编译脚本、启动线程、执行Run-logic中的Init部分的脚本。
-
Ready:就绪,表示虚拟用户已经执行完毕Init部分的脚本,等待执行Run部分的脚本。
-
Run:运行ing,表示虚拟用户正在执行Run部分的脚本,又叫迭代中
-
Rendezvous:集合,表示虚拟用户执行脚本到达集合点,等待其他虚拟用户的一个状态。
-
虚拟用户一旦开始run,则表示开始迭代,在虚拟用户停止之前,是默认一直不停的迭代的。
-
Run和Rendezvous是会相互切换的。
-
-
Passed:虚拟用户执行脚本完毕,并且最终的状态是成功的。
-
Failed:虚拟用户执行脚本过程中因为某些原因出现了一些非error的异常状态,则最终的状态就是Failed。
-
Error:是指虚拟用户从初始化开始,中间任意时刻出现了error状态。
-
Gradual Exiting:准备退出,是指虚拟用户已经接收到停止的信号,但是还没有去执行End中的脚本,其实还是在继续迭代的一个状态。 退出方式有三种:
-
立即退出:即接收到信号就马上跳转到End部分的脚本的执行。
-
当前action:接收到信号之后,会将当前正在执行的action(脚本)执行完毕。
-
当前迭代:接收到信号之后,会将当前正在执行的迭代(Run部分)执行完毕。 默认的退出方式就是当前迭代方式。
-
-
Exiting:退出中,是指虚拟用户正在执行run-logic中的End部分的脚本。
-
Stopped:停止,是指虚拟用户执行脚本完毕,并且最终的状态是成功的。Stopped等价于Passed,区别在于:Passed是主动停止,Stopped是被动停止
Schedule和虚拟用户的状态对应关系
-
Initialize:初始化虚拟用户 Down-->Pending-->Init-->Ready
-
Start Vusers:启动虚拟用户 Ready-->Run(包含Rendezvous)
-
Duration:持续运行 Run(包含Rendezvous),是用来设置Run的方式,有两种方式:
-
Run until completion:每一个虚拟用户将按照Run-time settings中所设置的迭代次数进行迭代,次数到达自动停止,对应的成功状态就是Passed。 Run-->Passed
-
Run for:持续时间,设置的是所有虚拟用户都启动之后,一起持续执行脚本的时间。Run-time settings中所设置的迭代次数不再起效。时间到达,就会准备退出。 Run-->Gradual Exiting
以上两种方式没有本质上的区别,最主要的就是要保证最终得到的是稳定可靠的数据。
-
-
Stop Vusers:停止虚拟用户:表示虚拟用户开始执行Stop部分的脚本。 一定是对应Duration选择Run for的。 Gradual Exiting-->Exiting-->Stopped