loadrunner 参数化 Unique Number

合集下载

03_LoadRunner参数化详解

03_LoadRunner参数化详解

一、参数化的方法选中需要参数化的数据方法一,右键---【Replace with a new parameter】方法二,菜单【insert】----【new Parameter…】Parameter Properties (参数属性对话框)----我们的参数化设置就通过这个对话框完成.二、参数化的方式:其实参数化得方式有很多种,这里简述几种比较常见人方式。

其实方式略有不同,但其结果都是将数据添加进来。

1、编辑数据点击Create Table 会出现表格,在表格,再次点击Edit with Notepad ,然后会打开一个记事本,我们可以对记事本进行添加数据2、添加dat数据文件点击File输入框后面的“Browse..”按钮,找到本地的txt数据文件,进行添加就可以了。

需要注意的是,文件里面的数据不要乱写,每条数据一行,不然会读取有误。

3、数据库添加数据在很多情况下,我添加的数据不是十条二十条,也不是一百两百,如果还通过上面的两种方式添加,我想会是一件非常纠结的事情。

所以我们可以通过数据库将数据导入。

你是否疑虑数据库的数据怎么弄,数据库的数据生成非常简单,可以写一段简单的代码生成,也可以通过数据库数据生成工具来完成点击Date Wizard 打开连接数据库向导。

通常不用这种方式,而是直接在数据库中把数据查询出来,然后放到参数化列表当中。

4、其他类型设置如果我们要参数化的不是一个文件,比如是特定的日期时间,可以从Parameter type列表中进行选择这里可以设置日期时间格式,循环迭代方式,不过除了file类型外,其他用的不多。

其他类型用法我也不是十分了解。

参数化之间的关联前面我们已经对用户名进行了参数化,或对密码进行了参数化,这样是不是脚本就能正常跑了,不好说。

因为用户名和密码不是一一对应关系,每次运行脚本时取的用户名和密码没有对应上的话肯定就会出问题。

假设,我们已经对用户名已经进行了参数化,参数名为【username】,下面设置密码参数化与用户名关联。

详细分析LoadRunner参数化

详细分析LoadRunner参数化

详细分析LoadRunner参数化在进⾏⽹页的性能测试时,对⽹页的登录界⾯进⾏压⼒测试情况下就会使⽤到多⽤户进⾏登录,就需要对登录名和密码进⾏参数化,那么loadrunner 怎么参数化设置呢?下⾯我们来详细分析⼀下。

⼀、我们这⾥通过loadurnner录制⼀个软件⾃带的航空⽹站登陆。

下⾯是截取的登录代码⼆、下⾯通过loadrunner对⽤户名和密码进⾏参数化设置。

1、双击jojo,右击选择Replace with a Parameter,弹出窗⼝Select or Create Parameter,在 Parameter name处输⼊变量名name,点击OK,密码重复名字的操作。

2、把⽤户名jojo改成变量name,密码bean改成变量psw三、下⾯对参数进⾏编辑添加。

第⼀种⽅法是直接在界⾯上添加编辑。

1、点击P图标或者按键盘ctrl +L 进⼊参数化设置界⾯,2、点击name进⾏编辑变量参数,点击Edit with Notepad,弹出记事本框,输⼊好⽤户名后,保存后,参数就设置完成了。

密码也是重复名字的操作。

3、也可以在界⾯上直接编辑,添加⾏、列或者删除⾏、列4、参数都添加后之后,我们要注意每个参数对应的名称5、也可以把所有的参数编辑在⼀个⽂件⾥⾯,⼀列对应⼀个参数。

6、当参数放在在⼀个⽂件⾥⾯时,设置处就要⼀⼀对应。

四、第2种⽅法对参数进⾏编辑添加,就是直接导⼊已编辑好了的数据。

1、在⽂件处选择已经编辑好的数据⽂件位置,点击打开后,⽂件111.dat的数据就⾃动导⼊进来了。

五、设置好参数后,就可以设置数据取值⽅式与更新⽅法。

1、Select next row: 选择下⼀⾏⽅法Sequential默认顺序的,按照参数化的数据顺序,从上往下⼀个⼀个的来取。

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

Unique唯⼀,唯⼀的向下取值,只能被⽤⼀次。

Same line as xxx,和xxx列取同⼀⾏的值,(⾏相同)步调⼀致例如:数据a b c d e f g ...,现有3个⽤户(甲⼄丙)取值;循环2次。

参数化数据唯一值设置

参数化数据唯一值设置

今天开发人员让最近刚写的一个游戏做性能测试,由于这款游戏是刚刚写了一部分,为了选择框架,所以想在前期做一个性能对比,但是要求比较多:
1、所有的链接进来的线程不能关闭并且不能重复,所以socket
这块就要设置惟一数
2、所有用户的use_id当然也不能重复,所以这也要一个惟一数
3、游戏的座位号也要求惟一数
由于以上需求,不得不对参数化这块要研究一下了,刚开始打算自己写一个呢,但是考虑的并发和多台压力机并发的时候无法保证其唯一性,所以感觉自己写一个压力不小,所以放弃了该想法。

于是尝试loadrunner自动的参数化功能,但是对这块的功能不是很了解,不过还好设置不多,多做几次试验就可以明白,于是着手研究。

经过多次测试终于发现了该规律,在下图注释一下:
例如:
如果start=1,Block size per Vuser=10000时,就相当于给每个用户分配了10000个惟一数字,第一个用户从1开始,第二个用户从10001开始,第三个用户从20001开始,依次加10000;但是如何设置好start 和Block size per Vuser这也是一门学问,设置不好就会出现数字不够用的情况,刚开始我就在这块走了很多弯路,经过百度发现如果一下个公式供大家参考:
设:块大小设置为:B(block),起始值为:S(start),当前用户
为:N(number),当前取值为V(value)
则:
V = B*(N-1)+S。

loadrunner脚本开发参数取值策略

loadrunner脚本开发参数取值策略

LoadRunner脚本开发参数化取值策略质量管理部2014年8月目录1.文档说明 (4)2.场景简述 (4)3.参数取值模拟 (7)3.1 Sequential (7)Sequential + Each Iterator (7)Sequential + Each occurrence (7)Sequential + Once (8)3.2 Random (9)Random + Each Iterator (9)Random + Each occurrence (9)Random + Once (10)3.3 Unique (10)Unique + Each Iterator (10)Unique + Each occurrence (11)Unique + Once (11)4.试验详述 (11)4.1 Sequential (12)Sequential + Each Iterator (12)Sequential + Each occurrence (13)Sequential + Once (14)4.2 Random (15)Random + Each Iterator (15)Random + Each occurrence (16)Random + Once (17)4.3 Unique (17)Unique + Each Iterator (17)Unique + Each occurrence (18)Unique + Once (19)5.其他类型参数说明 (19)6.联系方式 .............................................................................................. 错误!未定义书签。

1.文档说明在压力测试的过程中,根据应用程序对数据的要求不同,压力测试人员会选择不同的参数取值方式,下面对几种参数取值方式做一个简单的说明。

Loadrunner使用手册整理版

Loadrunner使用手册整理版

一、Loadrunner简介LoadRunner 是一种预测系统行为和性能的工业标准级负载测试工具。

通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner 能够对整个企业架构进行测试。

通过使用LoadRunner,企业能最大限度地缩短测试时间,优化性能和加速应用系统的发布周期。

目前企业的网络应用环境都必须支持大量用户,网络体系架构中含各类应用环境且由不同供应商提供软件和硬件产品。

难以预知的用户负载和愈来愈复杂的应用环境使公司时时担心会发生用户响应速度过慢,系统崩溃等问题。

这些都不可避免地导致公司收益的损失。

Mercury Interactive 的 LoadRunner 能让企业保护自己的收入来源,无需购置额外硬件而最大限度地利用现有的IT 资源,并确保终端用户在应用系统的各个环节中对其测试应用的质量,可靠性和可扩展性都有良好的评价。

LoadRunner 是一种适用于各种体系架构的自动负载测试工具,它能预测系统行为并优化系统性能。

LoadRunner 的测试对象是整个企业的系统,它通过模拟实际用户的操作行为和实行实时性能监测,来帮助您更快的查找和发现问题。

此外,LoadRunner 能支持广范的协议和技术,为您的特殊环境提供特殊的解决方案。

负载测试通常由五个阶段组成:计划、脚本创建、场景定义、场景执行和结果分析。

.(1)计划负载测试:定义性能测试要求,例如并发用户的数量、典型业务流程和所需响应时间。

.(2)创建 Vuser 脚本:将最终用户活动捕获到自动脚本中。

选择协议录制脚本编辑脚本检查修改脚本是否有误(3)定义场景:使用LoadRunner Controller 设置负载测试环境。

创建场景(Scenario)选择脚本设置机器虚拟用户数设置Schedule (场景计划表)如果模拟多机测试,设置Ip Spoofer (ip 欺骗)(4)运行场景:通过LoadRunner Controller 驱动、管理和监控负载测试。

LoadRunner中Action的迭代次数的设置和运行场景中设置

LoadRunner中Action的迭代次数的设置和运行场景中设置

LoadRunner中Action的迭代次数的设置和运⾏场景中设置LoadRunner中Action的迭代次数的设置和运⾏场景中设置 是怎么重复迭代和怎么增加并发运⾏的呢? 另外,在参数化时,对于⼀次压⼒中均只能⽤⼀次的资源应该怎么参数化呢?就是说这些资源⽤了⼀次就不能在⽤了的。

--参数化时,在select next row选择unique,update value on选择 each occurence, 1. 迭代跟虚拟⽤户数没什么必然联系 迭代是这样的: 迭代1次迭代2次迭代3次 ⽤户1 X1 X2 X3 ⽤户2 Y1 X2 Y3 其中的X1-3 Y1-3是参数,参数规则就是⼆楼说的 这么两个⽤户是根据你的rump up 上来的,⽐如5秒上两个⽤户,那么⽤户1和2就在5秒之内加载进来的,不知道说清楚了没。

第⼆个问题就简单了,只能⽤⼀次的参数,⾸先确保你的参数⾜够,另外规则选择的时候,注意选择唯⼀ 迭代次数只是对你设置了迭代次数的action进⾏迭代,⽽⽤户数可以理解为对整个录制过程的迭代(只是各个⽤户不同) ⽽且增加并发量可以通过增加⽤户来达到 还可以设置集合点来增加某个操作的并发量 假如⼀个脚本,设置最⼤并发量为10,每5秒中增加2个并发⽤户,⽽Action设置的迭代为10次: 当开始⾄2秒时,加载了2个⽤户,这2个⽤户分别开始运⾏,并都运⾏10次,不管这个2个⽤户运⾏10次是否结束,当下⼀个2两秒到来时,即开始⾄第4秒时⼜加载了2个⽤户,这2个⼜运⾏10次;就这样⼀直加载到10个并发⽤户,然后当每个⽤户都运⾏完10次时就结束。

这样中间最⼤并发是10个,但不⼀定能达到10个,因为在加载最后⼏个时,前⾯的有可能已经运⾏结束,所以如果要真正达到最⼤并发10就必须设置集合点来完成 不过也不⼀定⾮要设置集合点才能实现同时处在running的状态有10个⽤户。

设置duration也是可以的。

9.loadrunner性能测试之参数化

9.loadrunner性能测试之参数化

9.loadrunner性能测试之参数化⼀、参数化概念1 A.位置:要参数化的值右键替换为参数2 或者快捷键栏的P图标(Ctrl+L)3 参数化后右键可以还原被参数化的值4 B.概念:对脚本中某些常量,使⽤参数来代替,减少脚本数量,更接近真实业务场景⼆、参数化之File参数化策略1 A.取值顺序2 Sequential顺序-----------------(A1)3 Random随机---------------------(A2)4 Unique唯⼀,需考虑值⽤光时策略-(A3)5 B.何时更新6 Each iteration每次迭代---------(B1)7 Each occurrence每次出现--------(B2)8 Once只取⼀次-------------------(B3)9 C.取值超出后(选择Unique后)10 Abort Vuser放弃11 Continue in a cyclic manner继续循环取12 Continue with last value⽤最后的值继续13 D.参数化策略组合情况14 -- A1B1:顺序取值,迭代才更新值,与迭代有关,不迭代该始终⽤顺去取到的值在该脚本⼀直使⽤15 A1B2:顺序取值,脚本每次出现参数,就会顺序得到新值,与迭代⽆关16 A1B3:顺序取第⼀个值后不再发⽣变化,只取⼀次,迭代也不再更新17 -- A2B1:随机取值,迭代才更新值,与迭代有关,不迭代该始终⽤顺去取到的值在该脚本⼀直使⽤18 A2B2:随机取值,脚本每次出现参数,就会随机得到新值,与迭代⽆关(登录,购买)19 A2B3:随机取第⼀个值后不再发⽣变化,只取⼀次,迭代也不再更新20 -- A3B1:顺序取值,迭代才更新值,可⾃动或⼿动分配块⼤⼩,值取尽后要看C中值超出策略21 A3B2:顺序取值,脚本每次出现参数,且⼿动设置每个vuser分配的块⼤⼩,同样考虑值超出策略(注册)22 A3B3:顺序取第⼀个值后不再发⽣变化三、参数化之数据库连接安装MySQL ODBC驱动,选择File⽅式的参数化,并且如下图进⾏配置,配置完成数据会⾃动添加到File中四、其他参数化⽅式4.1、Date/time(⽇期/时间)4.2、Group Name(组名)参数类型使⽤Vuser组名替换参数,要执⾏Vuser组的名称,否则组名始终是⽆4.3、Iteration Number(迭代编号)使⽤当前的迭代编号替换参数,格式可⾃⼰设置4.4、Load Generator Name(负载发⽣器名)使⽤Vuser脚本名替换参数4.5、Random Number(随机数)随机⽣成的整数替换参数,可通过设置最⼩值和最⼤值4.6、Unique Number(唯⼀数)启动:指的是开始的数量每个Vuser块⼤⼩:开始是1000然后每个⽤户最多+100⽤户1取值1000-1099,⽤户2取值1100-1199以此类推4.7、Vuser ID(⽤户ID)使⽤虚拟⽤户ID来替换参数值。

Loadrunner中参数的设置

Loadrunner中参数的设置

Loadrunner中参数的设置在做负载或者压力测试时,很多人选择使用了Loadrunner测试工具。

该工具的基本流程是先将用户的实际操作录制成脚本,然后产生数千个虚拟用户运行脚本(虚拟用户可以分布在局域网中不同的PC 机上),最后生成相关的报告以及分析图。

但是在录制脚本的过程中会遇到很多实际的问题,比如不同的用户有不同的使用数据,这就牵涉到参数的设置问题。

本文就Loadrunner中参数的设置进行说明,希望对大家有所帮助。

录制程序运行的过程中,VuGen(脚本生成器)自动生成了包含录制过程中实际用到的数值的脚本。

如果你企图在录制的脚本中使用不同的数值执行脚本的活动(如查询、提交等等),那么你必须用参数值取代录制的数值。

这个过程称为参数化脚本。

本文主要包括如下内容:理解参数的局限性、建立参数、定义参数的属性、理解参数的类型、为局部数据类型设置参数的属性、为数据文件设置参数的属性、从已经存在的数据库中引入数据。

除了GUI,以下的内容适合于各种类型的用户脚本。

一、关于参数的定义在你录制程序运行的过程中,脚本生成器自动生成由函数组成的用户脚本。

函数中参数的值就是在录制过程中输入的实际值。

例如,你录制了一个Web应用程序的脚本。

脚本生成器生成了一个声明,该声明搜索名称为“UNIX”的图书的数据库。

当你用多个虚拟用户和迭代回放脚本时,也许你不想重复使用相同的值“UNIX”。

那么,你就可以用参数来取代这个常量。

结果就是你可以用指定的数据源的数值来取代参数值。

数据源可以是一个文件,也可以是内部产生的变量。

用参数表示用户的脚本有两个优点:① 可以使脚本的长度变短。

② 可以使用不同的数值来测试你的脚本。

例如,如果你企图搜索不同名称的图书,你仅仅需要写提交函数一次。

在回放的过程中,你可以使用不同的参数值,而不只搜索一个特定名称的值。

参数化包含以下两项任务:① 在脚本中用参数取代常量值。

② 设置参数的属性以及数据源。

LoadRunner参数化关联

LoadRunner参数化关联

LoadRunner参数化关联我们⽤ HTTP 协议做脚本,要注意的是,不同协议的函数是不⼀样的,假如换 websocket 协议,关联函数就要⽤其他的参数化原理1、什么叫参数化 把脚本内⼀个写死的值,去⼀个数组内取值,进⾏替换2、为什么要参数化 烂⼤街的回答:模拟真实场景,模拟真实情况 真实原因:应⽤程序/数据库对数据有唯⼀性要求(应⽤程序内就是单点登录;数据库内就是该字段为 Unique ,唯⼀)避免查询缓存对结果造成失真(重复查询同⼀条数据,如果该数据的表内开启了查询缓存,则会命中。

那么响应时间会⽐市价值偏⼩)3、可不可以不⽤参数化 查询缓存的开关是⽤query_cache_size = 20M和query_cache_type = ON 打开查询缓存,程序校验就得修改代码了,数据库唯⼀要求,把 Unique 的限制给拿掉就ok如何参数化(参数化会变紫)1、选中需要参数化的内容,右键,选择"Replace with a Parameter",2、为参数命名,并且制定参数取值的⽂件格式 Parameter name,就是我么那要设定的参数名,这个是不能重复的 Parameter type 是参数取值的⽅式,这个 file 是从 .bat ⽂件中取值,这个⽂件会⾃动⽣成在项⽬路径下结果:例如:web_submit_data("提交","Action=http://192.168.66.129/bbs/member.php?mod=register&inajax=1","Method=POST","TargetFrame=","Referer=http://192.168.66.129/bbs/member.php?mod=register",ITEMDATA,"Name=regsubmit", "Value=yes", ENDITEM,"Name=formhash", "Value={formhash}", ENDITEM,"Name=referer", "Value=http://192.168.66.129/bbs/forum.php", ENDITEM,"Name=activationauth", "Value=", ENDITEM,"Name={Name}", "Value=hua00{username}", ENDITEM,"Name={pass}", "Value=123456", ENDITEM,"Name={conpass}", "Value=123456", ENDITEM,"Name={mail}", "Value=hua00{username}@", ENDITEM,LAST);另⼀种情况,我们要把另⼀个数值也运⽤之前同⼀个参数咋办?另外,我们的参数化还有种⽅式:可以先建好,然后再脚本内⽤,这种情况适⽤于只给了脚本,但是没有给参数化⽂件的情况打开变量列表,填写变量值参数化变量和值是怎样对应的根据脚本中的参数名({username})去找参数列表中的的参数username,再去找参数列表中的username对应的bat⽂件注意,我们 loadrunner 的参数化默认是以 {} 为边界的,我们也可以修改这个参数化的边界类型:在 Tools-->General Options-->Parameterization的Paramrter Braces 内可以设置,我们可以看到默认是 {}参数化策略 最常⽤的取值⽅式:唯⼀(Unique+XX)我们写⼀个脚本来执⾏不同的参数化策略:Action(){int i; //申明变量for (i = 0;i<2;i++) { //循环char *a = "{p1}"; //获取参数值传给 achar *b = "{p2}"; //获取参数值传给 bchar *c = "{p1}"; //获取参数值传给 clr_output_message("%s,\t%s,\t%s",lr_eval_string(a),lr_eval_string(b),lr_eval_string(c)); //分贝演⽰ 9 种不同的参数化策略组合结果}return0;}如下Loadrunner参数化取值策略由[select next row]、[update value on]两部分组成。

参数化

参数化
下面我们来看一下编辑的结果
第一次迭代使用表中数据的结果
? Each occurrence:参数在每次迭代的过程中,参数的值都的更新。
注意:如果一个参数在一次迭代过程中出现多次,即使在同一次迭代过程中
也得更新,下面同样看这个例子,其迭代的结果。
? Once:在同一个Vuser 中一直取同一个参数,表中的数据不参于迭代的
参数,可以通过指定最小和最大值,设置随机编号的范围。
6. "Unique Number"(唯一编号)参数类型:用一个唯一编号替换参数。"Block
size"(块大小)指明分配给每个Vuser 的编号块的大小。每个Vuser 都
从其范围的下限(start)开始,在每次迭代时递增该参数值。
7. "Vuser ID"参数类型:LoadRunner 使用该虚拟用户的ID 来代替参数值,
过程。
还是看我们上面的例子的结果:
到这里参数化的过程已经全部讲完,这里总结一下,参数化过程中要注意的
问题:
1) 参数化文件尽可能少,因为参数是放在内存中的,占用了内存的资源;
2) 参数化文件与脚本分离;
3) 参数文件的路径应该以相对路径来取;
4) 一些时候为了使参数更具有真实性,参数应该从数据库中来获得;
该ID 是由Controller 来控制。在VuGen 中运行脚本时,VuGen 将会是-1。
8. File 参数类型:可以在参数属性中编辑参数文件,也可以直接编辑好参
数文件通过路径来选择,还有从现成的数据库中提取。这是参数化最常
的一种参数类型。
b) Browse 属性:
这里是用来选择参数文件的路径,这里要注意的一个问题是,一般我们在做

LoadRunner使用说明

LoadRunner使用说明

Load Runner 使用说明一、组件:(一) VuGen:用于捕获最终用户业务流程和创建怎动化性能测试脚本。

1. 录制脚本:(1) 集合点Rendezvous(2) 验证点Check Point:文本验证点Text Check、图片验证点Image Check(3) 事务Transaction:事务开始Start Transaction、事务结束End Transaction(4) 注释与消息Comment & Message:/***/2. 增强并编辑Vuser脚本(1) 参数化:在Select next now中的参数:Sequential顺序、Random随机、Unique唯一在Update value on 参数:Each iteration每次迭代、Each occurrence每次出现、Once 一次(2) 从数据库中导入数据3. 配置动行时设置Runtime settings(运行时设置)(1) Number of Iterations:迭代次数(2) 在Preferences中的Enable image and text check在脚本中添加验证点时必须选中。

4. 在独立模式下运行Vuser脚本5. 集成Vuser脚本(二) Controller:用于组织、驱动、管理和监控负载测试。

1. 创建方案(1) 创建手动方案(2) 创建百分比模式方案(3) 创建面向目标的方案2. 计划方案(1) 开始时间(2) 方案运行设置:加压Ramp Up、持续时间Duration、减压Ramp Dowm3. 运行方案4. 监视方案(1) RuntimeGraphs(运行时图)A. Running Vusers运行时图:Running正在运行的Vuser总数、Ready完成脚本初始化部分、即可以运行的Vuser数、Finished结束运行的Vuser数,包括通过的和失败的、Error执行时发生的错误VuserB. Transaction Graphs事务监视图:Trans Response Time事务响应时间、Trans/Sec(Passed)每秒事务数(通过)、Trans/Sec(Failed/Stopped)每秒事务数(失败、停止)、Total Trans/Sec(Passed)每秒事务总数(通过)。

loadrunner参数化说明

loadrunner参数化说明

LR参数取值的几种配置介绍
“Select next row ”有以下几种选择:
⏹ Sequential:按照顺序一行行的读取。

每一个虚拟用户都会按照相同的顺序读取
⏹ Random:在每次循环里随机的读取一个,但是在循环中一直保持不变
⏹ Unique :唯一的数。

注:使用该类型必须注意数据表有足够多的数。

比如Controller 中设定20 个虚拟用户进行5 次循环,那么编号为1 的虚拟用户取前5个数,编号为2 的虚拟用户取6-10 的数,依次类推,这样数据表中至少要有100个数据,否则Controller 运行过程中会返回一个错误。

⏹ Same Line As 某个参数(比如Name):和前面定义的参数Name 取同行的记录。

通常用在有关联性的数据上面。

我们这里取值Sequential 即可。

Advance row each iteration 选中即可,表示每一次循环都往前走一行。

手工输入数据比较简单,这里就不再单独介绍了。

LR参数取值配置举例:
假设有2个虚拟用户,每个用户执行3次循环,共有10条数据,如下:100001,100002,100003,100004,100005,100006,100007,100008,1000109,100110。

Loadrunner 参数化_迭代参数说明

Loadrunner 参数化_迭代参数说明

Loadrunner参数化策略测试小组齐国杰使用工具:Loadrunner 8.1试用版引子近日没有具体的项目做,就总去泡论坛,发现有的网友会问一些参数化的问题,回答他们的问题时,突然发现自己也是一知半解,因此写了三个实验脚本,目的是彻底搞清楚参数化的做法以及参数化策略的疑问。

流程参数化要做一些准备,主要是参数化数据的准备,例如TXT 文本、EXCEL表格以及数据库中的表都可以作为参数的数据集载体,而且LR都是支持的。

具体的参数化流程如下:1、录制脚本2、准备参数的数据集(也可以不准备,让LR自己生成固定格式参数)3、把对应的变量参数化4、选择对应的参数化策略具体的操作请查询LR帮助手册例子下面我来介绍几个例子,例子统一使用try_params.txt做参数数据集,txt内容如下:aaa bbba1 b1a2 b2……a30 b30脚本一:Action(){char *a = "{aaa}"; //获得参数赋值给achar *b = "{bbb}";//获得参数赋值给blr_log_message("%s,%s,%s,",lr_eval_string(a),lr_eval_string (b),ctime(&t));//打印结果return 0;}运行时设置:设置action的迭代次数为30(runtime-setting的Run Logic里)回放结果:备注:“…,…”省略符号,如果前后都相同则省略相同部分,如果前后不同则省略不同部分。

脚本二:Action(){int i; //循环种子for (i=0;i<30;i++) //循环30次{char *a = "{aaa}"; //获得参数赋值给achar *b = "{bbb}";//获得参数赋值给blr_log_message("%s,%s\n",lr_eval_string (a),lr_eval_string (b));}//打印结果return 0;}运行时设置:设置action的迭代次数为1(runtime-setting 的Run Logic里)回放结果:备注:“…,…”省略符号,如果前后都相同则省略相同部分,如果前后不同则省略不同部分。

loadrunner基础入门之事务、同步点(集合点)和思考时间、参数化、检查点

loadrunner基础入门之事务、同步点(集合点)和思考时间、参数化、检查点

事务、同步点(集合点)和思考时间、参数化、检查点1 Transaction(事务)事务是计算机程序设计中一个很重要的概念。

一个事务应该具有原子性、一致性、隔离性和持久性。

在LoadRunner里,我们定义事务主要是为了度量服务器的性能。

每个事务度量服务器响应指定的Vuser请求所用的时间,这些请求可以是简单任务(例如等待对单个查询的响应),也可以是复杂任务(例如提交多个查询和生成报告)。

1.1 手动设置Transaction的方法(显式事务)(1)选择新Transaction开始点,在被度量脚本段之前插入lr_start_transaction。

(2)选择新Transaction结束点,在被度量脚本段之后插入lr_end_transaction。

Lr_start_transaction("login");web_submit_form("auth","Snapshot=t2.inf",ITEMDATA,"Name=ssousername","Value=robin", ENDITEM,"Name=password", "Value=123456", ENDITEM,"Name=remember", "Value=<OFF>", ENDITEM,LAST);Lr_end_transaction("login”);1.2 自动事务(隐式事务)在Run-time Settings中,在Miscellaneous选项卡的Automatic Transactions中定义自动事务。

可以设置LoadRunner直接按事务处理Vuser中的每个Action或step。

这里,Action 指的是vuser_init、Action和vuser_end三大函数,而step指的是LoadRunner执行的每个函数。

loadrunner怎么设置参数化?loadrunner参数化设置的图文教程

loadrunner怎么设置参数化?loadrunner参数化设置的图文教程

loadrunner怎么设置参数化?loadrunner参数化设置的图
⽂教程
在进⾏使⽤到loadrunner的⼯具进⾏对⽹页进⾏性能的测试,⽽对⽹页的性能测试时,对有⽹页的登录的界⾯,在做压⼒测试情况下就会使⽤到多⽤户进⾏登录,就需要对代码进⾏参数化,那么loadrunner怎么参数化设置呢?下⾯⼩编要为⼤家带来的是loadrunner参数化设置的图⽂教程!感兴趣的朋友⼀起去看看吧!
⽅法:
1、在loadrunner的进⾏编写脚本,或者⼀个⽹页登录界⾯进⾏录制脚本,录制完成之后,在脚本找登录的⽤户名,选中⽤户右键》》replace with a pararmeter。

2、弹出了⼀个为select or create parameter的框,可以对parameter name名称重名,也可不命名。

3、这样在代码脚本中的⽤户名就变为了⼀种颜⾊,变为参数名。

4、需要对参数名进⾏参数化,可以点击菜单中的open parameter list的按钮,点击进⼊。

5、可以看到的是newparam默认的⼀个参数了为xinling,需要在⾏中在添加数据,可点击add row添加⾏,输⼊数据双击value就可进⾏输⼊,输⼊⽹页中其它的⽤户名。

6、参数化数据准备好之后,就进⾏执⾏了,在执⾏前,需要到run-time settings设置的界⾯中,run logic的选项界⾯中,把循环的次数改为2次,因准备数据只有两条了,
7、设置完成之后,可以点击loadrunner的界⾯中菜单运⾏按钮,等待脚本完成之后,可以在执⾏log看到执⾏的结果数据,是成功执⾏成功的。

LoadRunner参数化

LoadRunner参数化

1.1参数化1.选中用户名,右击– Relace with a Parameter2.弹出下图窗体,输入name,点击P roperties…3.弹出下图窗体,点击Create Table4.弹出确认框,确认后,显示如下图,点击E dit with Notepad…5.弹出记事本,可编辑需参数化内容,添加多个用户名添加之后,效果如图用户名、密码:点击Add Column,弹出Add new column窗体,输入列名,进行步骤5参数值编辑操作添加效果图:1.2Parameter Properties(参数属性)1.2.1S elect next row(获取数据方式)、1.2.2U pdate value on(参数值改变时间)注:对Each Iteration而言,一个VU执行时,每次迭代时更新参数的值,如果在一个迭代过程中某参数出现了多次,参数取相同的值;而对Each Occurrence而言,如果在一个迭代过程中某参数出现了多次,每次都取不同的之1.2.3When out of values(数据量不能支持迭代和Unique要求的数据量时,指示LoadRunner的处理方法)When out of values选项只在Select next row设置为Unique时才有效,当数据池中的数据量不能支持迭代和Unique要求的数据量时,可以通过设置该选项的值指示LoadRunner的处理方法:设置为Abort VUser,则遇到这种情况,VU停止运行;设置为Continue in a cyclic manner,则遇到这种情况,重新从数据池的第一个取值开始循环;设置为Continue with last value,则遇到这种情况,所有不足的取值都用最后一个取值来代替1.2.4S elect column、Select column(列数值/名称;分隔符)1)选择列。

在Select column部分,指定列的数值或名称。

Loadrunner中参数化取值方式分析

Loadrunner中参数化取值方式分析

Loadrunner中参数化取值⽅式分析Loadrunner中参数化取值依赖两个维度:1.取值顺序分为“顺序”“随机”“唯⼀”。

select next row:Sequential , Random,unique2.更新值时分为“每次迭代”“每次更新”“仅⼀次”。

update value on:Each iteration ,Each occurence,Once3 当参数不够⽤时的补救策略分成[从头再来][凑合使⽤最后⼀个][放弃部分⽤户]按照基本排列组合会产⽣9种组合,现在⼀⼀进⾏分析测试脚本Action(){int i = 0;for (i=0; i<3; i++) {lr_eval_string("{p1}");lr_eval_string("{p2}");}return0;}p1=a1......a10p2=b1......b10以上测试代码中运⾏⼀次叫做⼀次迭代,每次迭代中有⼀个for循环,循环中参数P1和参数p2会分别出现3次。

取值结果我们从单⽤户和多⽤户取值来分析1.顺序+每次迭代单⽤户运⾏结果多⽤户运⾏结果我们以参数设置的模拟器进⾏查看分析由此可见,顺序+每次迭代只是在迭代的时候更新⽤户值,并且多⽤户每次迭代取值都是⼀样的。

2.顺序+每次出现单⽤户结果如下:p1和p2参数每次出现的值都不⼀样,说明每次出现都会更新值多⽤户的取值情况如下:3.顺序+仅⼀次,单⽤户和多⽤户的情况⼀致,都只取唯⼀值多⽤户的情况取值如下:4.随机+每次迭代5.随机+每次更新6.随机+once注;⽤户⼀与⽤户⼆的取值不⼀定相同,但有概率相同7.唯⼀+每次迭代取值⽅式选择了唯⼀的情况,并发⽤户1与并发⽤户2的取值是数据总池的⼦集,并发⽤户1与并发⽤户2之间没有⼦集并发⽤户1 p1 :a1-------a5 并发⽤户2 p1:a6---------a10p2:b1--------b5 p2:b6---------b108.唯⼀+每次更新解释:当多⽤户运⾏时,每个⽤户分配5个值,当所有值使⽤完,继续使⽤最后那个值9.唯⼀+once。

Loadrunner参数的设置

Loadrunner参数的设置
在某次循环中或者脚本中使用参数的地方,所有用户取值相同。
脚本中出现要使用参数的话,参数值就更新一次
once
在所有的循环中所有用户取值相同。
所有的用户所有的循环中,只用一个值(即参数的第一行值)
random
each iteration
不用的用户,在不同的循环次数中,随机取值
each occurrence
3.Continue with last value:取最后一个值
四、组合使用:
Select next row
Update Value on
实际运行结果
sequential
each iteration
在某此循环中取值相同。
所有用户第一次循环取第一行值,第二次循环取第二行值
each occurrence
不同的用户,脚本中出现要使用参数的话,随机取值一次,循环一次再随机取值一次
once
不同的用户,不管循环多少次,只随机取值一次
unique
each iteration
唯一的值,并且每次循环时更新值
each occurrence
唯一的值,每次出现参数的地方都更新一次
ห้องสมุดไป่ตู้once
按照用户数分配给每个用户一个参数而已,以后每次循环这个用户就使用这一个参数了
Loadrunner的参数设置
关于Loadrunner的参数属性设置,总存在一些迷惑,参考网上资料,做一些总结:
一、Select next row
1.sequential:该方法顺序地给虚拟用户分配参数值
2.random:该方法随机地给给虚拟用户分配参数值
3.unique:分配一个唯一的有顺序地值给每个虚拟用户

Loadrunner参数化详解

Loadrunner参数化详解

试验过程:1、使用loadrunner 录制一个脚本;2、录制脚本内容为登录一个web 网站,并下载网站的一个文件;(注本例无登录和退出操作)3、把所下载的文件设置参数化;4、对select next row 和update value on 进行两两组合,并设置不同用户数量(用户数量多余参数数量和等于参数数量)和迭代次数(1 次迭代或多次迭代)参数列表:1、test-0.chm2、test-2.chm3、test-3.chm4、test-4.chm5、test-5.chm6、test-6.chm7、test-7.chm8、test-8.chm9、test-9.chmaction 代码:web_url("myweb", "URL=http://172.16.41.112/myweb/","Resource=0","RecContentType=text/html","Referer=","Snapshot=t5.inf","Mode=HTML",LAST);web_li nk(//"{move name}", "test-O.chm", "Text={move name}", "Sn apshot=t6.i nf", LAST); 实例(试验结果):action 代码:web_url("myweb","URL=http://172.16.41.112/myweb/","Resource=0","RecConte ntType=text/html","Referer=","Snapshot=t5.inf, "Mode=HTML",LAST);webji nk(〃"{move name}","test-O.chm","T ext={move name}","Snapshot=t6.inf, LAST);web_url("myweb","URL=http://172.16.41.112/myweb/","Resource=0","RecConte ntType=text/html","Referer=","Snapshot=t5.inf, "Mode=HTML",LAST);webji nk(〃"{move name}","test-O.chm","Text={move name}","Sn apshot=t6.i nf", LAST); 实例(试验结果):。

loadrunner参数化取值方式详解

loadrunner参数化取值方式详解

loadrunner参数化取值⽅式详解参数化对话框中与参数取值⽅式有关的区域如下:改变参数化的取值⽅式,关键在于Select next row和Update value on这两个选项。

Select next row包括以下选项:Sequential:顺序⽅式Random:随机⽅式Unique:唯⼀⽅式 Update value on包括如下选项:Each iteration:每次迭代更新取值Each occurrence:每次取值更新Once:只更新⼀次以下代码以登录接⼝和参数化进⾏演⽰,参数化⽂件中有2个值lr_output_message("login_username:%s",lr_eval_string("{login_username}"));web_custom_request("login","URL=http://192.168.44.130:8080/mobile/api/user/login","Method=POST","TargetFrame=","Resource=0","Referer=","Mode=HTTP","EncType=application/json;charset=utf-8","Body={\"mobile\":\"{login_username}\",\"password\":\"123456\"}",LAST); 参数化⽂件中的数据为:131********131********第⼀种取值⽅式:Sequential+Each iteration,设置迭代次数为3次,参数取值结果为:Starting iteration 1.Maximum number of concurrent connections per server: 6 [MsgId: MMSG-26989]Starting action Action.Action.c(18): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(18): login_username:131********Action.c(20): web_custom_request("login") started [MsgId: MMSG-26355]Action.c(20): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(20): web_custom_request("login") was successful, 361 body bytes, 157 header bytes, 12 chunking overhead bytes [MsgId: MMSG-26385] Ending action Action.Ending iteration 1.Starting iteration 2.Notify: Next row for parameter login_username = 2 [table = login_username].Notify: Getting new value for parameter 'login_username': table = 'login_username.dat' column = '0' row = '2'.Action.c(18): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(18): login_username:131********Action.c(20): web_custom_request("login") started [MsgId: MMSG-26355]Action.c(20): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(20): web_custom_request("login") was successful, 361 body bytes, 157 header bytes, 12 chunking overhead bytes [MsgId: MMSG-26385] Ending action Action.Ending iteration 2.Starting iteration 3.Notify: Next row for parameter login_username = 1 [table = login_username].Notify: Getting new value for parameter 'login_username': table = 'login_username.dat' column = '0' row = '1'.Starting action Action.Action.c(18): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(18): login_username:131********Action.c(20): web_custom_request("login") started [MsgId: MMSG-26355]Action.c(20): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(20): web_custom_request("login") was successful, 361 body bytes, 157 header bytes, 12 chunking overhead bytes [MsgId: MMSG-26385] Ending action Action.Ending iteration 3.第⼆种取值⽅式:Sequential+Each occurrence,设置迭代次数为3次,参数取值结果为:Starting iteration 1.Maximum number of concurrent connections per server: 6 [MsgId: MMSG-26989]Starting action Action.Action.c(18): Notify: Getting new value for parameter 'login_username': table = 'login_username.dat' column = '0' row = '1'.Action.c(18): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(18): login_username:131********Action.c(20): web_custom_request("login") started [MsgId: MMSG-26355]Action.c(20): Notify: Next row for parameter login_username = 2 [table = login_username].Action.c(20): Notify: Getting new value for parameter 'login_username': table = 'login_username.dat' column = '0' row = '2'.Action.c(20): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(20): web_custom_request("login") was successful, 361 body bytes, 157 header bytes, 12 chunking overhead bytes [MsgId: MMSG-26385]Ending action Action.Ending iteration 1.Starting iteration 2.Starting action Action.Action.c(18): Notify: Next row for parameter login_username = 1 [table = login_username].Action.c(18): Notify: Getting new value for parameter 'login_username': table = 'login_username.dat' column = '0' row = '1'.Action.c(18): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(18): login_username:131********Action.c(20): web_custom_request("login") started [MsgId: MMSG-26355]Action.c(20): Notify: Next row for parameter login_username = 2 [table = login_username].Action.c(20): Notify: Getting new value for parameter 'login_username': table = 'login_username.dat' column = '0' row = '2'.Action.c(20): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(20): web_custom_request("login") was successful, 361 body bytes, 157 header bytes, 12 chunking overhead bytes [MsgId: MMSG-26385]Ending action Action.Ending iteration 2.Starting iteration 3.Starting action Action.Action.c(18): Notify: Next row for parameter login_username = 1 [table = login_username].Action.c(18): Notify: Getting new value for parameter 'login_username': table = 'login_username.dat' column = '0' row = '1'.Action.c(18): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(18): login_username:131********Action.c(20): web_custom_request("login") started [MsgId: MMSG-26355]Action.c(20): Notify: Next row for parameter login_username = 2 [table = login_username].Action.c(20): Notify: Getting new value for parameter 'login_username': table = 'login_username.dat' column = '0' row = '2'.Action.c(20): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(20): web_custom_request("login") was successful, 361 body bytes, 157 header bytes, 12 chunking overhead bytes [MsgId: MMSG-26385]Ending action Action.Ending iteration 3.第三种取值⽅式:Sequential+Once,设置迭代次数为3次,参数取值结果为:Starting iteration 1.Maximum number of concurrent connections per server: 6 [MsgId: MMSG-26989]Starting action Action.Action.c(18): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(18): login_username:131********Action.c(20): web_custom_request("login") started [MsgId: MMSG-26355]Action.c(20): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(20): web_custom_request("login") was successful, 361 body bytes, 157 header bytes, 12 chunking overhead bytes [MsgId: MMSG-26385]Ending action Action.Ending iteration 1.Starting iteration 2.Starting action Action.Action.c(18): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(18): login_username:131********Action.c(20): web_custom_request("login") started [MsgId: MMSG-26355]Action.c(20): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(20): web_custom_request("login") was successful, 361 body bytes, 157 header bytes, 12 chunking overhead bytes [MsgId: MMSG-26385]Ending action Action.Ending iteration 2.Starting iteration 3.Starting action Action.Action.c(18): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(18): login_username:131********Action.c(20): web_custom_request("login") started [MsgId: MMSG-26355]Action.c(20): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(20): web_custom_request("login") was successful, 361 body bytes, 157 header bytes, 12 chunking overhead bytes [MsgId: MMSG-26385]Ending action Action.Ending iteration 3.第四种取值⽅式:Random+Each iteration,设置迭代次数为3次,参数取值结果为:Starting iteration 1.Maximum number of concurrent connections per server: 6 [MsgId: MMSG-26989]Action.c(18): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(18): login_username:131********Action.c(20): web_custom_request("login") started [MsgId: MMSG-26355]Action.c(20): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(20): web_custom_request("login") was successful, 361 body bytes, 157 header bytes, 12 chunking overhead bytes [MsgId: MMSG-26385] Ending action Action.Ending iteration 1.Starting iteration 2.Notify: Next row for parameter login_username = 1 [table = login_username].Notify: Getting new value for parameter 'login_username': table = 'login_username.dat' column = '0' row = '1'.Starting action Action.Action.c(18): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(18): login_username:131********Action.c(20): web_custom_request("login") started [MsgId: MMSG-26355]Action.c(20): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(20): web_custom_request("login") was successful, 361 body bytes, 157 header bytes, 12 chunking overhead bytes [MsgId: MMSG-26385] Ending action Action.Ending iteration 2.Starting iteration 3.Notify: Next row for parameter login_username = 2 [table = login_username].Notify: Getting new value for parameter 'login_username': table = 'login_username.dat' column = '0' row = '2'.Starting action Action.Action.c(18): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(18): login_username:131********Action.c(20): web_custom_request("login") started [MsgId: MMSG-26355]Action.c(20): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(20): web_custom_request("login") was successful, 361 body bytes, 157 header bytes, 12 chunking overhead bytes [MsgId: MMSG-26385] Ending action Action.Ending iteration 3.第五种取值⽅式:Random+Each occurrence,设置迭代次数为3次,参数取值结果为:Starting iteration 1.Maximum number of concurrent connections per server: 6 [MsgId: MMSG-26989]Starting action Action.Action.c(18): Notify: Getting new value for parameter 'login_username': table = 'login_username.dat' column = '0' row = '1'.Action.c(18): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(18): login_username:131********Action.c(20): web_custom_request("login") started [MsgId: MMSG-26355]Action.c(20): Notify: Next row for parameter login_username = 2 [table = login_username].Action.c(20): Notify: Getting new value for parameter 'login_username': table = 'login_username.dat' column = '0' row = '2'.Action.c(20): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(20): web_custom_request("login") was successful, 361 body bytes, 157 header bytes, 12 chunking overhead bytes [MsgId: MMSG-26385] Ending action Action.Ending iteration 1.Starting iteration 2.Starting action Action.Action.c(18): Notify: Next row for parameter login_username = 1 [table = login_username].Action.c(18): Notify: Getting new value for parameter 'login_username': table = 'login_username.dat' column = '0' row = '1'.Action.c(18): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(18): login_username:131********Action.c(20): web_custom_request("login") started [MsgId: MMSG-26355]Action.c(20): Notify: Next row for parameter login_username = 2 [table = login_username].Action.c(20): Notify: Getting new value for parameter 'login_username': table = 'login_username.dat' column = '0' row = '2'.Action.c(20): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(20): web_custom_request("login") was successful, 361 body bytes, 157 header bytes, 12 chunking overhead bytes [MsgId: MMSG-26385] Ending action Action.Ending iteration 2.Starting iteration 3.Starting action Action.Action.c(18): Notify: Next row for parameter login_username = 1 [table = login_username].Action.c(18): Notify: Getting new value for parameter 'login_username': table = 'login_username.dat' column = '0' row = '1'.Action.c(18): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(18): login_username:131********Action.c(20): web_custom_request("login") started [MsgId: MMSG-26355]Action.c(20): Notify: Next row for parameter login_username = 2 [table = login_username].Action.c(20): Notify: Getting new value for parameter 'login_username': table = 'login_username.dat' column = '0' row = '2'.Action.c(20): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(20): web_custom_request("login") was successful, 361 body bytes, 157 header bytes, 12 chunking overhead bytes [MsgId: MMSG-26385] Ending action Action.Ending iteration 3.第六种取值⽅式:Random+Once,设置迭代次数为3次,参数取值结果为:Starting iteration 1.Maximum number of concurrent connections per server: 6 [MsgId: MMSG-26989]Starting action Action.Action.c(18): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(18): login_username:131********Action.c(20): web_custom_request("login") started [MsgId: MMSG-26355]Action.c(20): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(20): web_custom_request("login") was successful, 361 body bytes, 157 header bytes, 12 chunking overhead bytes [MsgId: MMSG-26385] Ending action Action.Ending iteration 1.Starting iteration 2.Starting action Action.Action.c(18): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(18): login_username:131********Action.c(20): web_custom_request("login") started [MsgId: MMSG-26355]Action.c(20): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(20): web_custom_request("login") was successful, 361 body bytes, 157 header bytes, 12 chunking overhead bytes [MsgId: MMSG-26385] Ending action Action.Ending iteration 2.Starting iteration 3.Starting action Action.Action.c(18): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(18): login_username:131********Action.c(20): web_custom_request("login") started [MsgId: MMSG-26355]Action.c(20): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(20): web_custom_request("login") was successful, 361 body bytes, 157 header bytes, 12 chunking overhead bytes [MsgId: MMSG-26385]Ending iteration 3.第七种取值⽅式:Unique+Each iteration这种取值⽅式,⼜可以有以下⼏种设置:当值不⾜时,可以选择以下3种⽅式:1)、中断虚拟⽤户2)、循环取参数中的值,返回到第⼀⾏取值3)、取最后⼀⾏值以下运⾏结果以Abort Vuser为例执⾏,其它情况可⾃⾏设置运⾏,设置迭代次数为3次,参数取值结果为:Starting iteration 1.Maximum number of concurrent connections per server: 6 [MsgId: MMSG-26989]Starting action Action.Action.c(18): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(18): login_username:131********Action.c(20): web_custom_request("login") started [MsgId: MMSG-26355]Action.c(20): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(20): web_custom_request("login") was successful, 361 body bytes, 157 header bytes, 12 chunking overhead bytes [MsgId: MMSG-26385]Ending action Action.Ending iteration 1.Starting iteration 2.Notify: Next row for parameter login_username = 2 [table = login_username].Notify: Getting new value for parameter 'login_username': table = 'login_username.dat' column = '0' row = '2'.Starting action Action.Action.c(18): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(18): login_username:131********Action.c(20): web_custom_request("login") started [MsgId: MMSG-26355]Action.c(20): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(20): web_custom_request("login") was successful, 361 body bytes, 157 header bytes, 12 chunking overhead bytes [MsgId: MMSG-26385]Ending action Action.Ending iteration 2.Starting iteration 3.Error: Parameter 'login_username': No more unique values for this parameter in table 'login_username.dat' [unique range is 1-2]. The Vuser is aborted according to "When Out Of Values" policy.Action was aborted.Ending Vuser...第⼋种取值⽅式:Unique+Each occurrence,参数不够⽤时,也会报错,设置迭代次数为3次,参数取值结果为:Starting iteration 1.Maximum number of concurrent connections per server: 6 [MsgId: MMSG-26989]Starting action Action.Action.c(18): Notify: Getting new value for parameter 'login_username': table = 'login_username.dat' column = '0' row = '1'.Action.c(18): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(18): login_username:131********Action.c(20): web_custom_request("login") started [MsgId: MMSG-26355]Action.c(20): Notify: Next row for parameter login_username = 2 [table = login_username].Action.c(20): Notify: Getting new value for parameter 'login_username': table = 'login_username.dat' column = '0' row = '2'.Action.c(20): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(20): web_custom_request("login") was successful, 361 body bytes, 157 header bytes, 12 chunking overhead bytes [MsgId: MMSG-26385]Ending action Action.Ending iteration 1.Starting iteration 2.Starting action Action.Action.c(18): Error: Parameter 'login_username': No more unique values for this parameter in table 'login_username.dat' [unique range is 1-2]. The Vuser is aborted according to "When Out Of Values" policy. Abort was called from an action.Ending Vuser...第九种取值⽅式:Unique+Once,参数不够⽤时,也会报错,设置迭代次数为3次,参数取值结果为:Starting iteration 1.Maximum number of concurrent connections per server: 6 [MsgId: MMSG-26989]Starting action Action.Action.c(18): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(18): login_username:131********Action.c(20): web_custom_request("login") started [MsgId: MMSG-26355]Action.c(20): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(20): web_custom_request("login") was successful, 361 body bytes, 157 header bytes, 12 chunking overhead bytes [MsgId: MMSG-26385]Ending action Action.Ending iteration 1.Starting iteration 2.Starting action Action.Action.c(18): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(18): login_username:131********Action.c(20): web_custom_request("login") started [MsgId: MMSG-26355]Action.c(20): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(20): web_custom_request("login") was successful, 361 body bytes, 157 header bytes, 12 chunking overhead bytes [MsgId: MMSG-26385]Ending action Action.Ending iteration 2.Starting iteration 3.Starting action Action.Action.c(18): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(18): login_username:131********Action.c(20): web_custom_request("login") started [MsgId: MMSG-26355]Action.c(20): Notify: Parameter Substitution: parameter "login_username" = "131********"Action.c(20): web_custom_request("login") was successful, 361 body bytes, 157 header bytes, 12 chunking overhead bytes [MsgId: MMSG-26385] Ending action Action.Ending iteration 3.总结:。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

loadrunner 参数化Unique Number
开发人员让最近刚写的一个游戏做性能测试,由于这款游戏是刚刚写了一部分,为了选择框架,所以想在前期做一个性能对比,但是要求比较多:
1、所有的链接进来的线程不能关闭并且不能重复,所以socket这块就要
设置惟一数
2、所有用户的use_id当然也不能重复,所以这也要一个惟一数
3、游戏的座位号也要求惟一数
由于以上需求,不得不对参数化这块要研究一下了,刚开始打算自己写一个呢,但是考虑的并发和多台压力机并发的时候无法保证其唯一性,所以感觉自己写一个压力不小,所以放弃了该想法。

于是尝试loadrunner自动的参数化功能,但是对这块的功能不是很了解,不过还好设置不多,多做几次试验就可以明白,于是着手研究。

经过多次测试
终于发现了该规律,在下图注释一下:
例如:
如果start=1,Block size per Vuser=10000时,就相当于给每个用户分配了10000个惟一数字,第一个用户从1开始,第二个用户从10001开始,第三个用户从20001开始,依次加10000;
但是如何设置好start 和Block size per Vuser这也是一门学问,
设置不好就会出现数字不够用的情况,刚开始我就在这块走了很多弯路,经过百度发现如果一下个公式供大家参考:
设:块大小设置为:B(block),起始值为:S(start),当前用户为:N(number),当前取值为V(value)
则:
V = B*(N-1)+S。

相关文档
最新文档