LoadRunner:参数化

一、参数化概述

1、什么是参数:

对于一个URL来说由域名+端口号+路径+参数 组成,网址中”?”后边的都是参数,参数由key和value组成,多个参数通过”&”来连接。

2、参数化的概念:将脚本中某个写死的参数,把它转化为一个数组列表,我们可以从数组里边取到值,来进行值的传递。

拓展:如何查询一个域名对应的IP及域名的解析

查询域名对应的IP:

在浏览器地址栏中输入” 183.232.231.172”就可以访问百度的页面

https://www.baidu.com:8080/ → 端口8080是默认的,可忽略,最后边的”/”默认为一个页面,如” /index.php”

域名的解析:

https://www.baidu.com/index.php

https://www.baidu.com:8080/index.php

http://183.232.231.172:8080/ index.php

3、需要进行参数化的情况:

①数据库校验字段的唯一性

②应用程序不允许用一个值进行反复操作(游戏的登录)

③避免数据库的查询缓存,而导致性能测试结果失真

(数据库在执行一条sql操作时,会进行语法检查、语意分析、检查表是否存在、是否有权限进行操作,然后生成执行计划,open表进行查询操作、若数据在内存中,在内存中取数返回,如果内存中没值,在硬盘中取数返回,若数据库缓存开启会将结果放入查询缓存)

页面输入的东西,最多需要进行参数化。服务器返回的非输入之外的值,有可能需要进行关联。

4、如何避免使用参数化:

①去掉数据库唯一字段限制(数据量太大的情况)

②改应用程序

③关掉数据库的查询缓存

 

二、脚本的参数化操作基本界面说明

 

注意:如上图在userNo.dat中对参数进行编辑操作完成后,光标的位置应该在”006”的回车一行,多一行或者少一行都不行,如果保存的时候,光标在” 006”的后边,而不是回车的下一行,那么脚本在进行参数化取值的时候,不会取到值”006”。

 

三、取值策略及值更新策略详细说明

1、取值策略选择"same line as xxx"

当userNo.dat文件中,有两列时,取值策略会多一个选项"same line as xxx",如下图配置:

根据如上两图,username的参数userNo取的是userNo.dat文件的第一列的值,password的参数passwd取的是userNo.dat文件的第二列的值,在参数取值策略中password选择"same line as userNo"意思是说,无论username选择文件中第一列哪个值,password的取值就是该username取值所在行的第二列的值,回放脚本,检查结果:

对比userNo.dat中的参数列表,发现userNo=0003和pwd=888是在同一行中且对应的,回放结果正确。

2、参数化测试代码段

 1 Action()
 2 {
 3       int i; //声明一个变量
 4       for (i=0;i<2;i++) //循环
 5       {
 6              char *a = "{p1}"; //获得参数赋值给a
 7              char *b = "{p2}";//获得参数赋值给b
 8              char *c = "{p1}"; //获得参数赋值给c
 9     
10             
11              lr_output_message("%s,%s\n,%s\n",lr_eval_string (a),lr_eval_string (b),lr_eval_string (c));  //打印
12             
13       return 0;
14 }

3、取值策略:顺序 + 值变更策略:每次迭代

4、取值策略:顺序 + 值变更策略:每次遇到

 

5、取值策略:顺序 + 值变更策略:ONCE

6、取值策略:随机 + 值更新策略:迭代

7、取值策略:随机 + 值更新策略:每次遇到

 

8、取值策略:随机 + 值更新策略:ONCE

 

9、取值策略:唯一 + 值更新策略:迭代

用户1:a1--a5,b1--b5  用户2:a6--a10,b6--b10

唯一是对多用户而言,在并发的时候,会出现唯一,将总的参数化池划分子集,各子集间没有交集

  • 值的分配策略

  • 在跑并发时需要遵循的原则:

①数据库表中的值是否足够,

②要算出给每个用户分配多少个值,才够用

在唯一的时候,用户和用户之间,他们的值会单独区分开来

  • 参数模拟(不适用于值的更新策略为每次出现的情况),如下图:

可以模拟多用户参数的取值情况(用该模拟器模拟的时候,着重自己分析,该模拟器存在bug)

10、取值策略:唯一 + 值更新策略:每次遇到

 值不够时候处理,注意这里选择取值策略为唯一才会出现,如下图:

对于Abort Vuser处理方式,会报如下错误:

Error: Parameter 'p1': No more unique values for this parameter in table 'p1.dat' [unique range is 1-10]. The Vuser is aborted according to "When Out Of Values" policy.

对于continue with last value处理方式,会报如下错误:

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

但是依然用最后一个值替换

对于continue in a cyclic manner处理方式不会报错,从头开始取值

11、取值策略:唯一 + 值更新策略:ONCE

 

四、其他一些内容

1、通过数据库大批量赋给参数值

需要在负载端安装数据库驱动

2、参数化类型

①Unique Number(唯一的数字)

②Random number

③Date/Time

 

五、总结

1、对银行流水号进行参数化
100个并发用户,并发10分钟,tps=10,1个用户跑基准测试,tps=1
Q:参数化设置?

A:10分钟*60秒*10=6000(10分钟内需要通过6000个事务数)

     6000/100个用户=60(每个用户60条数据)

     因每个用户之间执行操作的时间会不同,故在数据库表中最好造(60+20)*100条数据,8000条数据10分钟内肯定是用不完的因tps=10

参数化设置如下图:

2、对银行流水号进行参数化

100个并发用户,并发10分钟,tps=无限,1个用户跑基准测试,tps=1

Q:参数化设置?

A:10分钟*60秒*100tps=60000(10分钟内需要通过60000个事务数)

    60000/100=600(每个用户600条数据)

    故参数化设置如下图:

--------------------------------------------------------------------

 

posted @ 2017-05-01 23:00  花醉红尘  阅读(550)  评论(0编辑  收藏  举报