参数化的定义及使用场景

定义:将脚本中的特定值用变量替代,该变量值是变化的(注意:这个值是我们自己创建的,不是服务器返回的)。

参数化的原因,并不是网上说的真实模拟不同用户,真实反应服务器性能,而是:

  数据唯一性(比如注册名不能一样)

  避免数据库查询缓存

思考:模拟1000个用户登录论坛,1000个相同的用户名相同的密码与1000个不同的用户名不同的密码的区别?

File参数类型--文本

File参数类型--文本参数显示问题,参考:https://www.cnblogs.com/uncleyong/p/11725392.html

进行参数化前,我们要先把需要用到的参数设计好,这里以创建“File类型参数”为例

点击下面的图标

点击左下角【New】

默认是File类型

点击Create Table,默认生成一个NewParam.dat文件

单击

编辑数据文件,第一行默认名称是NewParam,重命名为具有含义的字段名,因为是用户名,这里就改为name,最后一个参数下面最多只能一个空行

保存后

修改参数名称为name

修改完成,注意:下面两个name含义不一样,第一个是在脚本中引用的变量名,第二个是为了方便我们识别列,取的列名

参数化替换举例

参数设计好后,我们选择要替换的常量,然后右键选择使用已有的参数替换

对loadrunner自带的订票网站登录的用户名做参数化,上面已经将参数name创建好了

参数值更新方式(3x3)

参数更新方式总共3X3=9种方式

/*
Sequential:顺序,所有虚拟用户按照顺序读取数据表(都从第一行开始);
Random:随机,所有虚拟用户随机形式读取数据表;
Unique:唯一,所有虚拟用户每次各取一值(不重复); 什么时候访问数据表完成数据更新?
Each iteration:每次迭代以后;
Each occurrence:每次出现参数;
Once:每出现一个虚拟用户;
*/

下面验证这9种方式  

3个参数值(a,b,c),迭代4次,看是如何取值的。

测试脚本为:

Action()
{
lr_output_message("第一个参数取值:%s",lr_eval_string("{paramtest}"));
lr_output_message("第二个参数取值:%s",lr_eval_string("{paramtest}"));
lr_output_message("第三个参数取值:%s",lr_eval_string("{paramtest}"));
return 0;
}

日志级别设置为标准

另外,运行的日志会存放到output.txt文件中,这个文件放到脚本目录下

每次迭代

一次迭代过程中,相同参数值不发生变化,即只取一次值。每次迭代,是将所有的Action都执行。

每次迭代--顺序

从头开始按顺序取值,当值不够用时又从头开始。

每次迭代--随机

每次迭代--唯一

和每次迭代-顺序类似,从头开始按顺序取值,当值不够用时按照设置的方式处理。

此时可以自动分配,也可以自定义分配value数,(“每次发生--唯一”只能自定义分配value数)

当值不够用时,有3种情况,默认情况下,使用最后一个值继续;停止脚本;从头再来(类似每次迭代,顺序取值)

Error: Parameter 'paramtest': No more unique values for this parameter in table 'paramtest.dat' [unique range is 1-3].The parameter continues with last value of the range according to "When Out Of Values" policy.

默认自动分配

自定义分配,

运行结果依旧和上图一样,因为在vuser中,就只有一个vuser,单独一个用户分享所有参数值。

每次发生

每次发生,相同参数取不同值,也可以取相同值<随机或者唯一不够时>

每次发生--顺序

和每次迭代-顺序类似,从头开始按顺序取值,当值不够用时又从头开始。

每次发生--随机

不一定从头开始按顺序取值,且值也可能相同。(无论参数多少)

每次发生--唯一

和每次迭代-顺序、每次迭代-唯一类似,从头开始按顺序取值,当值不够用时按照设置的方式处理。

此时自定义分配value数必填,(“每次迭代-唯一”可以自动分配,也可以自定义分配value数)

填入上面框中的数字无论为多少(1至X),在vuser中,运行结果都一样。(在虚拟用户脚本中只有一个用户,无论Allocate处填多少都无用,单独一个用户分享所有参数值)

完整Error信息:Error: Parameter 'paramtest': No more unique values for this parameter in table 'paramtest.dat' [unique range is 1-3].The parameter continues with last value of the range according to "When Out Of Values" policy.

填1或者任意值,在vug中,都是如下结果:

一次

只取一个值。

一次--顺序

只取第一个值。

始终第一个值

一次--随机

随机取一个值。

一次--唯一

只取第一个值。

(下面这种情况是冲突的,Unique是每个数据唯一,只使用一次,Once是只更新一次,但是只认Once,如果只有2个数据,迭代>2次,也不会报错,全部是用第一个数据。)

始终第一个值

并发时,参数值更新方式(3x3)

【3个值(a,b,c),脚本中参数出现3次,选择迭代4次,5个vuser】

Action()
{
lr_output_message("第一个参数取值:%s",lr_eval_string("{paramtest}"));
lr_output_message("第二个参数取值:%s",lr_eval_string("{paramtest}"));
lr_output_message("第三个参数取值:%s",lr_eval_string("{paramtest}"));
return 0;
} /*
Sequential:顺序,所有虚拟用户按照顺序读取数据表(都从第一行开始);
Random:随机,所有虚拟用户随机形式读取数据表;
Unique:唯一,所有虚拟用户每次各取一值(不重复); 什么时候访问数据表完成数据更新?
Each iteration:每次迭代以后;
Each occurrence:每次出现参数;
Once:每出现一个虚拟用户;
*/

场景中,先设置一直发消息:

可以查看每个vuser的log:

每次迭代

每次迭代--顺序

Vuser1:aaa→bbb→ccc→aaa

Vuser2:aaa→bbb→ccc→aaa

Vuser3:aaa→bbb→ccc→aaa

Vuser4:aaa→bbb→ccc→aaa

Vuser5:aaa→bbb→ccc→aaa

每次迭代--随机

Vuser1:aaa→ccc→aaa→bbb

Vuser2:aaa→bbb→aaa→aaa

Vuser3:aaa→aaa→aaa→aaa

Vuser4:ccc→aaa→aaa→ccc

Vuser5:ccc→aaa→ccc→bbb

每次迭代--唯一

系统自动分配,三个参数,系统都分配给了第一个vuser,其余的vuser无参数而失败,所以成功1个,失败4个,成功的一个还报警,第四次迭代因为没有值而用的最后一个值;

且C:\Users\wgy\AppData\Local\Temp\res3\log中只生成了一个log文件;

Insufficient records for parameter 'paramtest' in table to provide the Vuser with unique data

Error: Parameter 'paramtest': No more unique values for this parameter in table 'paramtest.dat' [unique range is 1-3].The parameter continues with last value of the range according to "When Out Of Values" policy.

Vuser1:aaa→bbb→ccc→ccc

手动分配,

如果设置为2,则生成2个log文件;

Vuser1:aaa→bbb→bbb→bbb

Vuser2:ccc→ccc→ccc→ccc

每次发生

每次发生--顺序

Vuser1:abc→abc→abc→abc

Vuser2:abc→abc→abc→abc

Vuser3:abc→abc→abc→abc

Vuser4:abc→abc→abc→abc

Vuser5:abc→abc→abc→abc

每次发生--随机

Vuser1:abc→cbc→cca→cba

Vuser2:bac→bbb→bca→abb

Vuser3:cbb→bba→abc→aab

Vuser4:abb→ccb→cca→bcc

Vuser5:cac→bbc→abc→cbc

每次发生--唯一

每个用户分1个值,分给了3个用户;2个用户无值;

Vuser1:aaa→aaa→aaa→aaa

Vuser2:bbb→bbb→bbb→bbb

Vuser3:ccc→ccc→ccc→ccc

每个用户分2个值,分给了2个用户;3个用户无值;

Vuser1:abb→bbb→bbb→bbb

Vuser2:ccc→ccc→ccc→ccc

一次

一次--顺序

全取值a

Vuser1:aaa→aaa→aaa→aaa

Vuser2:aaa→aaa→aaa→aaa

Vuser3:aaa→aaa→aaa→aaa

Vuser4:aaa→aaa→aaa→aaa

Vuser5:aaa→aaa→aaa→aaa

一次--随机

都随机只取一个值

Vuser1:bbb→bbb→bbb→bbb

Vuser2:bbb→bbb→bbb→bbb

Vuser3:ccc→ccc→ccc→ccc

Vuser4:aaa→aaa→aaa→aaa

Vuser5:ccc→ccc→ccc→ccc

一次--唯一

都随机只取一个值;

Vuser1:aaa→aaa→aaa→aaa

Vuser2:bbb→bbb→bbb→bbb

Vuser3:ccc→ccc→ccc→ccc

File参数类型--Mysql数据向导

点击【Data Wizard】

点击【确定】

如图选择,点击【下一步】

File参数类型--SQL Server数据向导

点击【Data Wizard】

点击【确定】

点击【Create】

从下拉列表选择一个数据库连接

更改默认数据库为需要用的数据库

点击测试数据源

File参数类型--Oracle数据向导

略。

Unique number类型参数

用于构造不同的用户数据

造1万个数据,如手机号码

13588880000--13588889999

常量跟上一个unique number类型变量。

不足位数,左侧补零

Date/Time类型参数

LoadRunner【第四篇】参数化的更多相关文章

  1. 从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点)

    从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www ...

  2. 第四篇 Entity Framework Plus 之 Batch Operations

    用 Entity Framework  进行 增,删,改.都是基于Model进行的,且Model都是有状态追踪的.这样Entity Framework才能正常增,删,改. 有时候,要根据某个字段,批量 ...

  3. 【第四篇】ASP.NET MVC快速入门之完整示例(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  4. 解剖SQLSERVER 第十四篇 Vardecimals 存储格式揭秘(译)

    解剖SQLSERVER 第十四篇    Vardecimals 存储格式揭秘(译) http://improve.dk/how-are-vardecimals-stored/ 在这篇文章,我将深入研究 ...

  5. 解剖SQLSERVER 第四篇 OrcaMDF里对dates类型数据的解析(译)

    解剖SQLSERVER 第四篇  OrcaMDF里对dates类型数据的解析(译) http://improve.dk/parsing-dates-in-orcamdf/ 在SQLSERVER里面有几 ...

  6. 深入理解javascript作用域系列第四篇——块作用域

    × 目录 [1]let [2]const [3]try 前面的话 尽管函数作用域是最常见的作用域单元,也是现行大多数javascript最普遍的设计方法,但其他类型的作用域单元也是存在的,并且通过使用 ...

  7. 前端工程师技能之photoshop巧用系列第四篇——图片格式

    × 目录 [1]图片格式 [2]保存设置 前面的话 对于前端来说,图片格式是需要重要掌握的知识.本文是photoshop巧用系列第四篇——图片格式 图片格式 目前在前端的开发中常用的图片格式有jpg. ...

  8. 第四篇 :微信公众平台开发实战Java版之完成消息接受与相应以及消息的处理

    温馨提示: 这篇文章是依赖前几篇的文章的. 第一篇:微信公众平台开发实战之了解微信公众平台基础知识以及资料准备 第二篇 :微信公众平台开发实战之开启开发者模式,接入微信公众平台开发 第三篇 :微信公众 ...

  9. IIS负载均衡-Application Request Route详解第四篇:使用ARR实现三层部署架构(转载)

    IIS负载均衡-Application Request Route详解第四篇:使用ARR实现三层部署架构 系列文章链接: IIS负载均衡-Application Request Route详解第一篇: ...

  10. RabbitMQ学习总结 第四篇:发布/订阅 Publish/Subscribe

    目录 RabbitMQ学习总结 第一篇:理论篇 RabbitMQ学习总结 第二篇:快速入门HelloWorld RabbitMQ学习总结 第三篇:工作队列Work Queue RabbitMQ学习总结 ...

随机推荐

  1. C#自定义FTP访问类的代码

    如下资料是关于C#自定义FTP访问类的代码,应该对各朋友有帮助. using System; using System.Collections.Generic; using System.Text; ...

  2. Xutils, OKhttp, Volley, Retrofit对比

    Xutils这个框架非常全面,可以进行网络请求,可以进行图片加载处理,可以数据储存,还可以对view进行注解,使用这个框架非常方便,但是缺点也是非常明显的,使用这个项目,会导致项目对这个框架依赖非常的 ...

  3. C# 一般处理程序ashx接收服务端post过来json数据

    这个和前端js的接收方式有点不一样,前端接收用request.form["xxx"]即可

  4. django源码分析 python manage.py runserver

    django是一个快速开发web应用的框架, 笔者也在django框架上开发不少web应用,闲来无事,就想探究一下django底层到底是如何实现的,本文记录了笔者对django源码的分析过程 I be ...

  5. 爬虫之scrapy--基本操作

    参考博客  :https://www.cnblogs.com/wupeiqi/p/6229292.html Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘, ...

  6. 如何设置非管理员用户配置特定的IIS站点

    如何设置非管理员用     户配置特定的IIS站点 一.           添加IIS管理服务 二.           启动管理服务 勾选启用远程连接后.点右边的应用 三.           设 ...

  7. SQLServer删除数据

    使用SSMS删除数据 1.连接数据库.选择数据表->右键点击,选择所有行(或者选择前200行). 2.在数据窗口中选择数据行(注意点击最左边列选择整个数据行)->在最左侧右键点击-> ...

  8. 力扣算法题—079单词搜索【DFS】

    给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格.同一个单元格内的字母不允许被重复使用. ...

  9. 获取高精度时间注意事项 (QueryPerformanceCounter , QueryPerformanceFrequency)

    花了很长时间才得到的经验,与大家分享. 1. RDTSC - 粒度: 纳秒级 不推荐优势: 几乎是能够获得最细粒度的计数器抛弃理由: A) 定义模糊- 曾经据说是处理器的cycle counter,但 ...

  10. bootstrapt 使用遇到问题

    1.布局的时候什么时候用xs,sm,md,lg? small grid (≥ 768px) = .col-sm-*, medium grid (≥ 992px) = .col-md-*, large ...