(十三)参数化(File Parameter Types)

详情:Vugen User Guide > VuGen > Working with VuGen > Parameters > Parameter Types

在data file中,数据以表格形式存储,一个文件中可以有多个列,以逗号隔开

id,first_name
120,John
121,Bill
122,Tom

一、将每个参数值写在单独文件中操作步骤:

  • 录制脚本
  • 在要参数化的文本处选中,然后右键选择”Replace with a Parameter”
  • 添加参数化的数据,在工具栏”Open Parameter List”中,进行设置.Add Column、Add Row、Edit with Notepad、File format中可以选择用回放用哪行的数据。
    列表内容

一个参数化的内容可以在多个地方使用,选择要参数化内容—右击选择”Use Existing Parameter”

参数池中有的数据:

userName
jojo
qq
-------------
pwd
bean
1

在Parameter List中设置 File format为:First data=1
Action中是登录脚本,迭代次数为2
这样就能让两次迭代的用户名、密码不同。

二、将每个参数值写在相同文件中操作步骤:

  • 将要参数化的数据写在一个文本文档中,为了方便以后这个文件容易找到,最好写在与第一种方式录制的相同目录下。userDat.dat
userName,pwd
jojo,bean
qq,1
  • 录制脚本
  • 在要参数化的文本处选中,然后右键选择”Replace with a Parameter”
  • File:在Browse中选择userDat.dat
  • Select column中 有两种方式选择参数列
    ①By number:username为第一列
    ②By name:根据名称选择列。

其余的操作与一同

  • 开启Run-time Settings中的Log—>extended log—>Parameter substitution。在回放中可以看到参数替代log
Action.c(22): Notify: Parameter Substitution: parameter "userName" =  "jojo"
Action.c(22): Notify: Parameter Substitution: parameter "pwd" =  "bean"

三、参数池的策略
①select next row:[how]
Vugen User Guide > VuGen > Working with VuGen > Parameters > Data Assignment Methods for File/Table/XML Parameters

  • sequential:Assigns data to a Vuser sequentially
    每个Vu都是从第一行开始,顺序的向下取值
    特点:每个VU取值序列相同
    若数据不够,则再从第一行读取,直到结束
  • unique:Assigns a unique sequential value to the parameter for each Vuser.(每个用户要唯一的向下取值,第一个用户从第一行开始取)
    比如:20个虚拟用户,5次迭代,则至少要准备100个唯一的值。
    若没有数据可取,则根据When out of values:Continue with last value 、Abort Vuser、Continue in a cyclic manner策略继续执行。
  • random:所有VU随机取值
  • 有时,可能多个参数化对应的取值设置的 策略相同,则可以在”Select next row”选择”Same line as xxx”,
  • 单用户时,顺序和唯一相同。

②update value on:[when]

  • 每次迭代(each iteration):每次迭代(循环、action的循环)
  • 每次遇到:当脚本执行过程遇到该参数(比如name)即更新这个参数。
    举例:如果脚本的action中password参数出现两次,那么在脚本循环一次中,遇到该参数2次。循环n次,则遇到该参数2n次,即更新2n次(在参数表中取2n次数据)
    实际场景不多,实际应用较少
  • 一次(once):脚本执行过程中,只去一次。(不更新值)
    Updates the parameter value only once during the scenario run. The Vuser uses the same parameter value for all occurrences and all iterations of the parameter. This type may be useful when working with dates and times.(一个虚拟用户在整个)
    【控制台查看日志的方式:
    ①要进行的设置:控制台中run-time setting–>Log–>Always send messages (现在要通过日志查看参数化后不同的取值方式、取值时间迭代过程中,参数取值问题,所以要选总发送日志,只为学习目的。在实际的场景测试中,选择出错发送日志即可)
    ②日志位置:在脚本文件夹下的mdrvxxx.xxx.log中】
    这里写图片描述
    这里写图片描述
    这里写图片描述

这里写图片描述

这里写图片描述

有些人会问:每次循环时更新和每次发生更新有区别吗?答案是肯定的。
假设在脚本中,一个参数需要在多个地方进行参数化。那么当回放脚本时,参数的更新策略为Each iteration,脚本中每个被参数化的地方取值是一样的,而当更新策略为Each occurrence时,脚本中每出现一个参数化的地方,都会取下一条数据。具体取的值是什么,可以用lr_output_message输出看一下。

当Select next row为unique时,存在分块和when out of values情况,其他的random、sequential的不用考虑这些(他们都有自己的策略,不会出现数据不够用情况)。
一、分块方法(若要理解分块,就先不要管块内数据不够怎么办?块内数据不够是when out of values需要解决的问题):

  • 自动分块
    按照循环次数先分配第一个VU(例如设置的循环次数为3,则分配给第一个VU 3个参数值),然后将接下来的3个参数值分配给第二个VU,依次类推…..
    这里写图片描述
    可以看出分配给Vuser N的块,已经不够4块,则此时将剩下的都给Vuser N即可。Vuser n+1没有可用的了
  • 手动分块
    这里写图片描述

为何要分块?
在控制台中,避免多用户打架。让每个VU都有自己的一块,取值(unique方式)时只能在自己的块中取值。
何时使用分块?
取值方式为unique。

当取值方式为unique,更新方式为each iteration,选择自动分块方式,则每个VU的块大小设置为迭代次数。

二、when out of values
这里写图片描述

  • 当unique+each iteration时,可以选择手动和自动。为什么可以自动?因为自动的机制时按照迭代次数(是用户设定好的),来设置块大小的。
  • 当unique+each occurrence时,只能选择手动。因为each occurrence中用到参数个数,不能依据迭代次数来确定。
  • 当unique+once时,按照用户数分别分配一个,分块比较简单,所以就不让用户选了。

有时需要输出当前循环的次数,则可以定义一个变量(计数器)放在action函数上面,则这个值不会每次都初始化,而是保留上次的值

int i=1;
Action()
{
    lr_output_message("当前迭代次数为:%d,用户名为:%s,密码是:%s",
                      i++,
                      lr_eval_string("{name}"),
                      lr_eval_string("{password}"));
    return 0;
}
posted @ 2018-07-11 14:14  测试开发分享站  阅读(182)  评论(0编辑  收藏  举报