在向导中单击\按钮,从数据表中选择用户名后,使用\ify SQL statement manually(手工指定数据库连接字符串)\方法连接数据库,如图3-23所示。 单击\下一步\按钮,出现图3-24所示的对话框。填入连接字符串和SQL语句后,单击\按钮,出现查询结果。 图3-23 指定数据库连接方法 图3-24 指定SQL语句 3.2.5 数据文件存储
数据文件能保存脚本执行期间Vuser访问的数据,这些数据可以被存储在本地或全局文件中。如果拥有大量已知参数值,数据文件是非常有用的。 数据文件中的数据以表格的形式存储。一个文件可以包含大量参数值,每一列都保存一个参数的数据。列的分隔由分隔符标记,例如逗号、\或者Tab符号等。如果使用文件作为参数的数据源,必须指定文件的名称和位置、包含数据的列、文件格式,包括列的分隔符、更新方法等内容。 在下例中,就是使用文件作为参数的数据源,其数据文件包含了每个数据的ID编号及其相对应的名称,如图3-25所示。 图3-25 数据文件存储设置 在\框中输入数据文件的名称,或者单击\(浏览)按钮指定现有数据文件的文件位置。默认情况下,所有新数据文件均被命名为\并且存储在脚本的目录中。
单击\按钮,将打开记事本,在记事本文档中编辑此数据,其中第一行是参数名,第二行是参数的初始值。用表格的形式将其他列名和值输入到该文件中。使用分隔符(例如逗号或者制表符)来指示列分隔。对表格中的每个新行都要另起一行开始。 \下拉列表框有以下几个选项: 1.Sequential:按照顺序一行行地读取。每一个Vuser都会按照相同的顺序读取文件中的参数值,选择\方法系统会按照顺序向Vuser分配参数值。当正在运行的Vuser访问数据表格时,Vuser会提取下一个可用的数据行。 如果在\(更新值的时间)列表框中指定了\(每次迭代),则Vuser将为每一次迭代从数据表格中提取下一个值。 如果在\列表框中指定了\(每次出现),则Vuser将为每一次参数的出现从数据表格中提取下一个值,即使它在同一次迭代中。 如果在\列表框中指定了\(一次)\,则第一次迭代中分配的值就会在每个Vuser接下来所有的迭代中使用。 例如表3-2列出了数据文件的参数值。 表3-2 数据表格 名 Kim David Michael Jane Ron Alice Ken Julie 如果选择了\,则所有Vuser就会在第一次迭代中使用Kim,第二次迭代中使用David,第三次迭代中使用Michael,依此类推。
如果选择了\,则所有Vuser就会在第一次出现时使用Kim,第二次出现时使用David,第三次出现时使用Michael,依此类推。
如果选择了\,则第一个Vuser为所有的迭代提取Kim,第二个Vuser为所有的迭代提取David,依此类推。
如果在数据表格中没有足够的值,则VuGen返回到表格中的第一个值,循环继续直到测试结束。
2.Random:在每次循环里随机地读取一个数据,但是在循环中一直保持不变。当测试开始运行时,\随机\方法为每个Vuser分配一个数据表格中的随机值。
如果在\列表框中指定了\,则Vuser将会为每一次迭代从数据表格中提取一个新的随机值。
如果在\列表框中指定了\,则Vuser将会为每一次参数的出现从数据表格中提取一个新的随机值,即使它在同一次迭代中。
如果在\列表框中指定了\,则第一次迭代中分配的随机值就会在该Vuser的所有迭代中使用。
当从LoadRunner控制台运行一个方案时,您可以指定随机顺序的种子数。每个种子值代表用于测试执行的一个随机值顺序。每当使用该种子值时,都会将相同顺序的值分配给方案中的Vuser。如果在测试执行中发现问题,并且要使用相同的随机值顺序重复该测试,请启用\选项。
3.Unique:该方法为每一个Vuser的参数分配一个唯一的顺序值。
如果在\列表框中指定了\,则Vuser将为每一次迭代从数据表格中提取下一个唯一值。
如果在\列表框中指定了\,则Vuser将会为每一次参数的出现从数据表格中提取一个新的唯一值,即使它在同一次迭代中。
如果在\列表框中指定了\,则第一次迭代中分配的唯一值就会在每个Vuser的所有接下来的迭代中使用。
请确保表格中的数据对所有的Vuser和它们的迭代来说是充足的。如果拥有20个Vuser,并且要运行5次迭代,则表格中必须至少包含有100个唯一值。
如果数据表格中没有足够的值,可以在\下拉框中指示VuGen如何继续运行:\中断Vuser\、\以循环方式继续\或者\使用最后的值继续\。如果选择\使用最后的值\继续运行,则Vuser将会为所有接下来的迭代使用表格中最后一行的数据。
如果想要给每一个Vuser都分配值,并且不想让那些值在Vuser之间共享,要实现该目标,可以在图3-25中的\(在控制台中分配Vuser值)组合框中指示VuGen为每个Vuser的值分配一个特定的编号。默认情况下,VuGen自动为Vuser的值分配必需的编号。
要跟踪上述说的分配编号情况,请启用日志运行时设置中的\扩展日志\参数替换\选项。当没有足够的数据时,VuGen将会向Vuser日志中写入警告消息:\在表<表名>中,此参数没有其他唯一值\。
注意:
使用该类型必须注意数据表有足够多的数。比如,控制台中设定20个Vuser进行5次循环,那么编号为1的Vuser取前5个数,编号为2的Vuser取6~10的数,依此类推,这样数据表中至少要有100个数据,否则控制台运行过程中会返回一个错误。
3.3.1 关联的意义
3.3 语句关联
当录制脚本时,VuGen会拦截客户端(浏览器)与服务器端(网站服务器)之间的会话,并且记录下来,产生脚本。在VuGen的Recording Log中,可以找到浏览器与服务器之间所有的对话,包含通信内容、日期、时间、浏览器的请求、服务器的响应内容等等。脚本和Recording Log最大的差别在于,脚本只记录了客户端要对服务器端所说的话,而Recording Log则是完整记录二者的对话。
当执行脚本时,可以把VuGen想象成是一个演员,它伪装成浏览器,然后根据脚本,把当初浏览器确实说过的话,再对网站服务器重新说一遍,VuGen企图骗过服务器,让服务器以为它就是当初的浏览器,然后把网站内容传送给VuGen。
所以VuGen记录在脚本中的要跟服务器所说的话,完全与当初录制脚本时所说的一样,是写死的(hard-coded)。这样的做法在遇到有些比较聪明的服务器时,还是会失效。这时就需要通过关联来让VuGen再次成功地骗过服务器。
3.3.1 关联的意义
所谓的关联就是把脚本中某些写死的代码(hard-coded)数据,转变成撷取自服务器所送的、动态的、每次都不一样的数据。
一般情况下,比较聪明的服务器在每个浏览器第一次跟它要数据时,都会在数据中夹带一个唯一的辨识码,接下来就会利用这个辨识码来辨识跟它要数据的是不是同一个浏览器,一般称这个辨识码为Session ID。对于每个新的请求,服务器都会产生新的Session ID给浏览器。这也就是执行脚本会失败的原因,因为VuGen还是用旧的Session ID向服务器要数据,服务器发现这个Session ID是失效的或者它根本不认识这个Session ID,当然就不会传送正确的网页数据给VuGen了。
下面的例子说明了这样的情形:
当录制脚本时,浏览器发出对网页A的请求,服务器将网页A的内容传送给浏览器,并且夹带了一个ID=123的数据,当浏览器再发出对网页B的请求时,这时就要用到ID=456的数据,服务器才会认为这是合法的请求,并且把网页B的内容送回给浏览器。