数据文件能保存脚本执行期间Vuser访问的数据,这些数据可以被存储在本地或全局文件中。如果拥有大量已知参数值,数据文件是非常有用的。
数据文件中的数据以表格的形式存储。一个文件可以包含大量参数值,每一列都保存一个参数的数据。列的分隔由分隔符标记,例如逗号、"-"或者Tab符号等。如果使用文件作为参数的数据源,必须指定文件的名称和位置、包含数据的列、文件格式,包括列的分隔符、更新方法等内容。
在下例中,就是使用文件作为参数的数据源,其数据文件包含了每个数据的ID编号及其相对应的名称,如图3-25所示。
498)this.style.width=498;" border=0> 图3-25 数据文件存储设置
在"File path"框中输入数据文件的名称,或者单击"Browse"(浏览)按钮指定现有数据文件的文件位置。默认情况下,所有新数据文件均被命名为"parameter_name.dat"并且存储在脚本的目录中。
单击"Edit with Notepad"按钮,将打开记事本,在记事本文档中编辑此数据,其中第一行是参数名,第二行是参数的初始值。用表格的形式将其他列名和值输入到该文件中。使用分隔符(例如逗号或者制表符)来指示列分隔。对表格中的每个新行都要另起一行开始。
"Select next row"下拉列表框有以下几个选项:
1.Sequential:按照顺序一行行地读取。每一个Vuser都会按照相同的顺序读取文件中的参数值,选择"Sequential"方法系统会按照顺序向Vuser分配参数值。当正在运行的Vuser访问数据表格时,Vuser会提取下一个可用的数据行。
如果在"Update Value on"(更新值的时间)列表框中指定了"Each iteration"(每次迭代),则Vuser将为每一次迭代从数据表格中提取下一个值。
如果在"Update value on"列表框中指定了"Each occurrence"(每次出现),则Vuser将为每一次参数的出现从数据表格中提取下一个值,即使它在同一次迭代中。
如果在"Update Value on"列表框中指定了"Once(一次)",则第一次迭代中分配的值就会在每个Vuser接下来所有的迭代中使用。
例如表3-2列出了数据文件的参数值。
表3-2 数据表格
名
Kim
David
Michael
Jane
Ron
Alice
Ken
Julie
如果选择了"Each iteration",则所有Vuser就会在第一次迭代中使用Kim,第二次迭代中使用David,第三次迭代中使用Michael,依此类推。
如果选择了"Each occurrence",则所有Vuser就会在第一次出现时使用Kim,第二次出现时使用David,第三次出现时使用Michael,依此类推。
如果选择了"Once",则第一个Vuser为所有的迭代提取Kim,第二个Vuser为所有的迭代提取David,依此类推。
如果在数据表格中没有足够的值,则VuGen返回到表格中的第一个值,循环继续直到测试结束。
2.Random:在每次循环里随机地读取一个数据,但是在循环中一直保持不变。当测试开始运行时,"随机"方法为每个Vuser分配一个数据表格中的随机值。
如果在"Update Value on"列表框中指定了"Each iteration",则Vuser将会为每一次迭代从数据表格中提取一个新的随机值。
如果在"Update Value on"列表框中指定了"Each occurrence",则Vuser将会为每一次参数的出现从数据表格中提取一个新的随机值,即使它在同一次迭代中。
如果在"Update Value on"列表框中指定了"Once",则第一次迭代中分配的随机值就会在该Vuser的所有迭代中使用。
当从LoadRunner控制台运行一个方案时,您可以指定随机顺序的种子数。每个种子值代表用于测试执行的一个随机值顺序。每当使用该种子值时,都会将相同顺序的值分配给方案中的Vuser。如果在测试执行中发现问题,并且要使用相同的随机值顺序重复该测试,请启用"Random"选项。
3.Unique:该方法为每一个Vuser的参数分配一个唯一的顺序值。
如果在"Update Value on"列表框中指定了"Each iteration",则Vuser将为每一次迭代从数据表格中提取下一个唯一值。
如果在"Update Value on"列表框中指定了"Each occurrence",则Vuser将会为每一次参数的出现从数据表格中提取一个新的唯一值,即使它在同一次迭代中。
如果在"Update Value on"列表框中指定了"Once",则第一次迭代中分配的唯一值就会在每个Vuser的所有接下来的迭代中使用。
请确保表格中的数据对所有的Vuser和它们的迭代来说是充足的。如果拥有20个Vuser,并且要运行5次迭代,则表格中必须至少包含有100个唯一值。
如果数据表格中没有足够的值,可以在"When out of value"下拉框中指示VuGen如何继续运行:"中断Vuser"、"以循环方式继续"或者"使用最后的值继续"。如果选择"使用最后的值"继续运行,则Vuser将会为所有接下来的迭代使用表格中最后一行的数据。
如果想要给每一个Vuser都分配值,并且不想让那些值在Vuser之间共享,要实现该目标,可以在图3-25中的"Allocate Vuser values in the controller"(在控制台中分配Vuser值)组合框中指示VuGen为每个Vuser的值分配一个特定的编号。默认情况下,VuGen自动为Vuser的值分配必需的编号。
要跟踪上述说的分配编号情况,请启用日志运行时设置中的"扩展日志">"参数替换"选项。当没有足够的数据时,VuGen将会向Vuser日志中写入警告消息:"在表<表名>中,此参数没有其他唯一值"。
注意:
使用该类型必须注意数据表有足够多的数。比如,控制台中设定20个Vuser进行5次循环,那么编号为1的Vuser取前5个数,编号为2的Vuser取6~10的数,依此类推,这样数据表中至少要有100个数据,否则控制台运行过程中会返回一个错误。
假如你的代码是这样的:
web_submit_form("reservations.pl",
"Name=depart", "Value={depart_city}", ENDITEM,
"Name=departDate", "Value=06/20/2007", ENDITEM,
LAST);
web_submit_form("reservations.pl_2",
"Name=depart", "Value={depart_city}", ENDITEM,
"Name=reserveFlights.x", "Value=81", ENDITEM,
LAST);
再假设参数列表中这个参数depart_city的值是:上海
北京
重庆
西安
合肥
这段代码中两个地方都用到了{depart_city}, 关于这个参数的调用是如何的呢?关键取决于你自己在参数列表中对于这个参数的设置。
假如你的设置是:
A. update value ōn=each occurrence
在第一个循环中,第一段代码web_submit_form("reservations.pl"....... depart_city="上海"
第二段代码web_submit_form("reservations.pl_2".....depart_city="北京"
在第二个循环中,第一段代码web_submit_form("reservations.pl"....... depart_city="重庆"
第二段代码web_submit_form("reservations.pl_2".....depart_city="西安"
在第三个循环中,第一段代码web_submit_form("reservations.pl"....... depart_city="合肥"
........................................................................
如果参数不够用的时候,怎么办呢?那就看你参数列表中另外一个设置when out of value怎么设置呢? 这里先不谈。
B. update value ōn=each iteration
在第一个循环中,第一段代码web_submit_form("reservations.pl"....... depart_city="上海"
第二段代码web_submit_form("reservations.pl_2".....depart_city="上海"
在第二个循环中,第一段代码web_submit_form("reservations.pl"....... depart_city="北京"
第二段代码web_submit_form("reservations.pl_2".....depart_city="北京"
在第三个循环中,第一段代码web_submit_form("reservations.pl"....... depart_city="重庆"
..............................................................................
C. update value ōn=once
在第一个循环中,第一段代码web_submit_form("reservations.pl"....... depart_city="上海"
第二段代码web_submit_form("reservations.pl_2".....depart_city="上海"
在第二个循环中,第一段代码web_submit_form("reservations.pl"....... depart_city="上海"
第二段代码web_submit_form("reservations.pl_2".....depart_city="上海"
在第三个循环中,第一段代码web_submit_form("reservations.pl"....... depart_city="上海"