LoadRunner【第四篇】参数化

参数化的定义及使用场景

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

参数化的缘由,并非网上说的真实模拟不一样用户,真实反应服务器性能,而是:sql

  数据惟一性(好比注册名不能同样)数据库

  避免数据库查询缓存缓存

思考:模拟1000个用户登陆论坛,1000个相同的用户名相同的密码与1000个不一样的用户名不一样的密码的区别?  服务器

File参数类型--文本

File参数类型--文本参数显示问题,参考:http://www.javashuo.com/article/p-kcwipbkm-kq.html并发

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

点击下面的图标ide

点击左下角【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类型参数

相关文章
相关标签/搜索