一、参数化概述
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 ,%s ",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条数据)
故参数化设置如下图:
--------------------------------------------------------------------