为什么要对脚本进行参数化?一个原因是因为脚本中有些值是唯一的不能重复的,如果用相同的值进行回放的话,会导致回放失败,比如说我们新增一个账号,账号名肯定是不能重复的;另一个原因就是为了模拟真实的操作场景,毕竟在生产环境中不可能只是同一个用户登录,操作时也不可能都录入相同的参数。参数化的目的就是尽可能的模拟真实的操作场景。
下面我们拿一个购买商品的操作来演示下整个流程
首先我们先用loadrunner录制一个购买商品操作流程的脚本,找到选择商品属性的请求,如下图
这里我们看到,商品的id,颜色,数量,尺码等,都是可以进行参数化的,下面我们选择商品id来对其进行参数化讲解
首先将商品ID全部选中,右键点击Replace with Parameter-Create New Parameter
点击后,弹出如下输入框
这里填写参数名,点击“OK”弹出下面提示框。意思是你是否想用该参数替换脚本中其他地方的相同值。
举个例子,一个脚本中,有两处2022blue-Tshirt01,如果我们点Yes,会将脚本中的两处2022blue-Tshirt01都替换成我们的参数名{productId};如果点No,就只是替换我们选中的2022blue-Tshirt01。替换完成后的效果如下
替换完成后,我们再选中我们的参数名,右键选择Parameter Properties,来设计我们要替换成的参数值,如下图所示
点击Add Row添加一行;或者点击Browse选择一个我们已经编辑好的文档,直接导入。或者点击Edit with Notepad在文本编辑器里录入我们的参数值。如下图
下面我们再来说一下取值策略
Select next row:下次取值怎么取
(1)Sequential:从第一行开始按顺序一个一个取值
(2)Random:每次迭代都从所有值中随机取一个值
(3)Unique :唯一值,列表中的值只能取一次
除此之外还有一种特殊情况,就是Same line as xxx
这种情况主要用于有两个参数需要使用同一行数据的情况。举个例子,我们在购买商品的时候,要选择商品,要选择商品的颜色,但是有些颜色只有指定商品才有,所以我们在参数化的时候,要注意在取颜色的时候一定要与商品匹配。
接着上面的例子,我们参数化了商品id,接着再用同样的方式参数化商品颜色
这个时候,我们在选择下一行的策略时,就会出现一个新的选项,Same line as productId,这里的意思就是执行脚本的时候,productId选择的是哪一行数据,color就选择哪一行数据。
本文转载自:https://www.gylmap.com
这里假如说我们在参数化productId的时候,选择的策略是Random随机取值,那么我们选择颜色的时候,如果选择的颜色与选择的商品不匹配,就会导致脚本回放失败,因为选择的商品可能没有该颜色,所以我们在选择color的参数化策略的时候,就要选成Same line as productId,这样就保证了颜色与商品匹配。从而避免了因为数据原因导致的脚本回放失败。
Update value on:遇到什么情况去更新参数数据
(1)Each iteration :每次迭代取一次值。
(2)Each occurrence :每次遇到参数名时更新值。如果一次迭代中,参数名出现了两次,则两次的取值是不同的。
(3)Once :只第一次迭代的时候取值,之后的迭代都用第一次的取值。
这两种取值策略,不同的组合也会产生不同的取值方法,下面我们来结合上面的例子来详细说一下这几种策略的组合会产生怎样的结果。
Sequential+Each iteration:每次迭代时取一次值,从第一行开始按照顺序取值,当所有值取完后,再从第一行开始重新取值。我们从第一行的2022blue-Tshirt01开始取值,当取值到2022blue-Tshirt04时,下一次再取值就再从2022blue-Tshirt01开始循环取值。如果脚本里出现了两次{productId}这个参数,则两次取同样的值。
Sequential+Each occurrence:每次遇到参数就取值,从第一行开始按顺序开始取值,当所有值取完后,再从第一行开始重新取值。比如说脚本中{productId}出现了两次,那么出现第一次的时候取值2022blue-Tshirt01,出现第二次的时候取值2022blue-Tshirt02,以此类推。
Sequential+Once:每次迭代都取第一次取到的数据。第一次取到的是2022blue-Tshirt01,以后所有使用到参数的地方和之后所有的迭代都取得是2022blue-Tshirt01。
Random+Each iteration:每次迭代时都随机从列表中取一行值。一次迭代中,第一次出现参数名的地方取了一个随机的值2022blue-Tshirt01,那么该迭代中再遇到参数名,都取2022blue-Tshirt01,等下一次迭代再重新随机取值。
Random+Each occurrence:每次遇到参数就随机取值,一次迭代中,第一次出现参数名的地方取了一个随机的值2022blue-Tshirt02,那么该迭代中再遇到参数名,就再重新取一下值,可能是2022blue-Tshirt04。
Random+Once:第一次迭代随机取一行值,如第一次取了2022blue-Tshirt03,以后本次迭代中遇到的参数名以及之后的每次迭代都使用第一次迭代的值2022blue-Tshirt03。
Unique+Each iteration:每次迭代时取一行值,从第一行按照顺序开始取值。
Unique+Each occurrence:每次遇到参数就取值,从第一行开始按顺序开始取值。
Unique+Once:第一次迭代取一行值,以后每次迭代都取第一次迭代的值。
因为Unique这种方式比较特殊,参数取值是唯一的,那么我们就要设置一下当值全部取完的时候,我们该怎么处理。
有三种处理方式
(1)Abort Vuser:停止测试,如果值已经全部被使用过了,则停止测试
(2)Continue in a cyclic manner:循环取值,再从第一行开始重新取值
(3)Continue with last value:如果全部的值都被使用过,则之后都使用最后一行的值
设置完取值策略后,关闭当前页面,我们再去设置一下回放时的日志,能更清楚的看到我们的参数化是否成功Replay-Runtime Setting-Log-选择Extended Log,勾选Parameter substitution,如下图
这个时候,再去回放脚本,在回放日志里就能清楚的看到每次迭代我们这个参数的取值,如下图