一天一个关于测试知识点,5分钟内讲解你最关心的软件测试问题,今天就接着来谈谈关于软件测试中的“VuGen:什么情况下需要参数化及怎么关联?”。
【参数化】
一、什么情况下需要参数化
通常以下情况必须参数化:
1.唯一数约束
● 如果在数据库对某个字段有唯一的约束,那么这种情况下必须参数化
2.日期约束
● 如果涉及一些日期方面的约束,过期之后,业务会失败,那么这种情况一定得参数化
3.缓存约束
● 在做检索时,如果每次检索出来的内容是一至的,那么数据库不会到硬盘去取数据,只会在缓存取数据,这个时select查询时间不是真实的查询时间,这种情况下一定得参数化。
4.数据约束
● 如果发送的请求,有一部分要求必须不同,这种情况必须参数化。
二、参数化步骤
1.参数化类型
●参数化类型有很多种,但一般我们只用文件参数化的方式
2.文件
●表示参数所存储的文件位置,如果参数比较多时,我们会对参数进行合并
3.列的选择
●选择列有两种方式:一是按列名来选择;二是按列号来选择。
4.update value on更新值
●更新值有三个选项:每次迭代更新、每次使用时更新、一直使用某个数
●每次迭代时更新数据:在同一迭代中,不管某参数使用到多少次,都只使用一个参数
●每次使用时更新数据:是指某个参数只使用到就更新数据,不管是不是在同一次迭代中,即使在同一迭代某个参数如何使用到多次,我们也要更新新的数据。
5.select next row选择下一行数据
如何选择下一数据有几种方式:顺序选择、随机选择、唯一数、与某参数相同
●顺序选择:是指按顺序的从文件中读取数据来使用
●随机选择:是指在文件中随机选择一个数据来使用
●唯一数:是指每个虚拟用户只能使用某部分的数据,例如设置块大为10
那么表示每个虚拟用户只能使用到10个数据
第一个虚拟用户只能使用到1-10条数据
第二个虚拟用户只能使用到11-20条数据
以此类推
●以某行相同:是指该参考选择的策略与另外一个参数选择的策略一至,如A与B行选择相同,那么是指B选择哪行的数据,A就必须也选择该行数据进行执行。
三、数据库参数化
数据库参数化的步骤如下:
在控制面板->数据管理中创建数据源
在参数列表中单击“data wizard”按钮
在弹出的数据查询向导对话框中,选择数据查询方式:一是使用Microsoft query模块来查询;二是使用sql语句来查询。
选择数据源
输入查询的SQL语句
【关联】
一、为什么需要关联?
编辑切换为居中添加图片注释,不超过 140 字(可选)
1.发送请求需要带一个类似ID号的内容,这个ID号是由服务器返回给客户端的
2.这个ID是一个动态,每次发送情况这个值都会发现改变。
如果出现以上特征时,一般这个业务都是需要关联的。
二、关联的原理
由于服务器返回给客户端的值是一个变化的值,所以我们不可能直接得到这串值,这样不可能直接取到我们需要的那串变化的值。
但我们可以能从服务器返回给客户端的所有的值来去匹配我们要的值,正常情况下服务器返回给客户的内容都在response body中,简单说这些返回的内容就是一串字符串,但是返回的字符串不可能所有的内容都是变化,只有很少数部分内容是变化。
虽然我们不可能直接取到变化的值的内容,但是可以通过找到变化值所对应的左右边界值来得到变化的值,即固定左边的字符串容和右边的字符串内容,然后将符合左右边界规则的字符串的值取出来。取出来之后将这个值存放在一个变量中。
再将这个变量放到请求中来即可,原来录制代码时这是固定才导致请求不成功,现在换一个变量,就可以解决这个问题。也就说关联的核心原理就是找到变化值的左右边界内容。
三、关联的左右边界值
通常查找左右边界值的步骤如下:
录制两个操作完全一至的脚本
使用wdiffff工具比较这个两个脚本
找到需要关联的值
到所有请求的response body中找到需要关联的值所在的BODY内容
通过这个返回的response body中的值来确定需要关联值的左右边界值
在录制设置对话框中创建规则,LoadRunner关联规则有两种:一是内置关联规则;二是自定义关联规则;我们需要自定义一个关联规则
重新录制脚本,录制完成后,LoadRunner会对脚本自动的进行关联
四、关联函数
关联函数的语法:
int web_reg_save_param( const char *ParamName, , LAST );
参数说明:
ParamName:参数名
LB:表示左边界值,需要匹配内容的左边界值,如果LB的值不设置,那么说明匹配的从左边第一个字符开始,直到符合右边界值为止。
如果需要对左边界进行更精准的匹配,那么左边界还有以下一些参数可以设置:
--->/IC:不区分大小写
--->/BIN:表示在指定的二进制数进行匹配
--->/DIG:表示使用"#"做通配符,匹配0-9的任意一个数
--->/ALNUM:表示匹配一个字符,可以是数字、大写字母、小写字母
RB:表示右边界值,设置的方法与LB一至,如果RB的值不设置,那么说明匹配的内容从左边界值开始,直到右边最后一个字符。
ORD:表示选择第几次符合左右边界值规则的值因为有可能会出现多个符合左右边界值的,默认值为1,表示第一个符合这个左右边界值的数据。如果设置为All,那么会将所有符合左右边界值的数据保存,保存一个数组中。
SaveLen:表示在匹配的数据中,取一个子符串,字符串长度SaveLen,如果不设置长度就是取所有的内容,从第几个字符开始取是由saveoffset来决定。
SaveOffset:表示偏移量,是指从第多少个字符开始取值。默认值为零,表示从第一个字符开始取。
五、关联函数的使用
第一种写法:
int irand;
char flightnum[10],flightele[10];
....
srand(time(NULL));
irand = rand() % atoi(lr_eval_string("{outboundFlight_count}")) + 1;
sprintf(flightnum,"{outboundFlight_%d}",irand);
lr_save_string(lr_eval_string(flightnum),"flightele");
第二种写法:
int irand;
char *flightnum,*flightele;
....
srand(time(NULL));
irand = rand() % atoi(lr_eval_string("{outboundFlight_count}")) + 1;
flightnum = lr_paramarr_idx("outboundFlight", irand);
lr_save_string(lr_eval_string(flightnum),"flightele".6
六、关联与参数化的区别
关联与参数化的区别如下:
关联的内容是由服务器发送给客户端的
参数化是客户端提交给服务器的
关联的值是动态的值,是不确定
参数化的值是确定,是我们自己设置好
今天关于“Locust工具介绍”就学习到这里了,每个工作日小编都会更新一个小知识,希望大家多多关注我们,一起来学习喔!