web_url(\ \ \ \ \ \ \ LAST); if (strcmp(lr_eval_string(\ Action A else Action B 上面的脚本运行过程是:如果web_reg_find在hello.html页面中没有找到“welcome”字符串,则执行 Action A;如果找到了一次或一次以上,则执行Action B。 我们可以看到,web_find和web_reg_find函数两者是有一些差别的:
(1)web_reg_find先注册的优势是脚本能够一边接收Server的数据缓冲,一边进行查找,提高了查找的效率。
(2)web_reg_find的参数与web_find并不完全一样,其中有个参数叫做 SaveCount,它能够记录查找匹配的次数。而web_find的机制是一旦查找匹配成功,就立即返回,并不继续查找和记录匹配次数。
(3)VU run time设置中的 “enable image and text check”对 web_find有效,而对web_reg_find无效。
5.8.4 检查点设置技巧
如何加入检查点,才能检查出正确的结果。与事实相符,这的确有一些技巧:
(1)它必须满足是验证事务通过与否的充分必要条件。检查点通过,我们就能够确信系统是一个正常的状态。
(2)检查点可以是常量,也可以是变量。
(3)检查点可以是文本、图像文件,也可以是数据库记录等。
5.8.3 检查点实施之二:检查函数
另外一种设置方法是在Web Vuser里,通过检查函数来完成检查点功能。Web Vuser提供Image Check和Text Check两种方式。其原理就是在上一个请求页面的函数完成后,运行检查函数,在结果页面中搜索既定的图片/关键文字。
以下是取自LoadRunner函数手册的一个Text Check例子: Web_url(\ \ \ LAST); web_find(\ \ \ \ \ \ \ LAST); } 在这个例子中,web_find函数在employees.html中搜索“john”关键字。有关web_find函数的各个参数的含义以及使用方法,可参看LoadRunner随带的函数手册。
Image Check的功能则由另外一个函数web_image_check实现: web.url(\ \ new String [] { \ web_image_check(\ new String []{\ 这同样是一个Web Vuser脚本,是用Java实现的,而不是录制时默认生成的C语言。Web_image_check则在 ImageAndMaps.html中查找alt属性为“venus”的图片。 提示:LoadRunner一直是使用C作为脚本语言的。在Java普及应用的当今,LoadRunner开始加大对Java的支持力度,这表现在LoadRunner对原先运行在C基础上的Vuser同样提供了Java运行环境,而一些经常使用的 LoadRunner C函数也有了相同的Java函数实现。比如在Web Vuser中,原先的web_url函数摇身一变,在Java中成了web.url;另外,对于CORBA、RMI的Vuser,VU可以直接录制生成Java脚本。需要注意的是:Java脚本的录制选项和关联方法等与C脚本都有一些差别,可以参看LoadRunner的VU手册。 如果我们看过LoadRunner的函数手册,就会发现VU的Web Vuser还提供了和web_find十分貌似的另外一个检查点函数:web_reg_find。
web_reg_find里的reg意为注册(register)。因此web_reg_find和 web_find的不同之处是web_reg_find是先注册,后查找;而web_find是查找前面的请求结果。因此,我们在使用 web_reg_find函数的时候,将它放在请求语句的前面,如下:
web_reg_find(\ web_url(\ \ \ \ \ \ \ LAST); if (strcmp(lr_eval_string(\ Action A else Action B 上面的脚本运行过程是:如果web_reg_find在hello.html页面中没有找到“welcome”字符串,则执行 Action A;如果找到了一次或一次以上,则执行Action B。 我们可以看到,web_find和web_reg_find函数两者是有一些差别的:
(1)web_reg_find先注册的优势是脚本能够一边接收Server的数据缓冲,一边进行查找,提高了查找的效率。
(2)web_reg_find的参数与web_find并不完全一样,其中有个参数叫做 SaveCount,它能够记录查找匹配的次数。而web_find的机制是一旦查找匹配成功,就立即返回,并不继续查找和记录匹配次数。
(3)VU run time设置中的 “enable image and text check”对 web_find有效,而对web_reg_find无效。
5.8.4 检查点设置技巧
如何加入检查点,才能检查出正确的结果。与事实相符,这的确有一些技巧:
(1)它必须满足是验证事务通过与否的充分必要条件。检查点通过,我们就能够确信系统是一个正常的状态。
(2)检查点可以是常量,也可以是变量。
(3)检查点可以是文本、图像文件,也可以是数据库记录等。
5.9高级——多Action
对于支持多Action的Vuser,可以把一个脚本的Action import到另外一个脚本中。当然必须保证这两个import的脚本Vuser类型是相同的。注意,被import的Action中的有关参数也一同被improt。选择被import的脚本,然后选择被import的Action。步骤如下: 1、 选择“Action”>“Import Action into vuser”,会显示对话框,提示选择脚本。 2、 选择要import的Action,单击确定按钮。
3、 生成一个新的Action,名为Imported_Action,函数都被import在此中。 在“Run-time Settings”>“Run Logic”中调整Action的运行策略。 打开“Run-time Settings”(运行时设置)对话框,然后选择“General”下的“Run logic”节点,如图5-52所示。
(1)迭代次数(Number of Iterations):迭代的次数。LoadRunner将按指定的次数重复执行所有Actions,但不会重复Vuser脚本的vuser_init和vuser_end部分。
需要注意的是,如果在Controller的计划设置中指定了方案持续时间,则持续时间设置将覆盖Vuser迭代设置。这意味着,如果将持续时间设置为5分钟(默认设置),Vuser将在5分钟内按照需要继续运行任意多次迭代,即使运行时设置仅指定一次迭代。
图5-52在Run-time Settings中设置运行逻辑 (2)操作块(Block):操作块是脚本内函数的组合。每个块都有自己的单独属性设置,包括顺序、迭代和权重。可以通过单击“Properties”设置Block的属性。 (3)顺序(Sequence):可以设置块内脚本的操作顺序。有两种方式:按顺序和随机执行操作。
(4)迭代(Iteration):除了为整个Run部分设置迭代次数以外,还可以设置单个操作或操作块的迭代。该设置非常有用,例如,可以用来模拟一个商业站点,你在该站点执行了多个查询查找某个产品,但只进行了一次采购。
提示:
操作块(Block)是Vuser脚本的操作组。这是VU为用户提供的一个很贴心的功能。 比如在一个银行转账系统中,系统提供多个业务,有查询、转账、储蓄等业务,但每个业务被执行的概率可能会不一样。在这种情况下,我们可以把查询设为Block1,转账设为Blcok2,储蓄设为Block3,各个Block的Iteration属性体现了它们的概率分配,同时“登录”和“注销”操作是这三个Block所共有的。这样,执行一次脚本,就执行了所有的业务。当然,如果VU没有Block功能,我们也可以使用脚本C语言的循环机制来实现。有兴趣的朋友可以思考一下如何做。
4、 运行脚本。验证Action确实按照我们在Run-time Settings中的设置运行。
提示:运行时设置(Run-time Settings)
VU中有运行时设置(Run-time Settings),而Controller在运行时也同样有一个运行时设置。这两个运行时设置虽然看起来是一样的,但其实并不出自一处,而是分别存储在各自的环境下。VU的Run-time Settings存储在default.cfg文件中,而Controller则把自己的Run-time Settings放在自己的场景文件下。
这也就是说,当通过脚本创建场景后,再修改脚本的Run-time Settings,这不会影响到Controller的Run-time Settings。而在LoadRunner早期版本中(6.5以前),VU和Controller是共享同一个Run-time Settings的。后来把两者分开,使它们“各自为政”,应该是出自方便的考虑。比如,在VU中我们修改Run-time Settings很多是为了debug脚本,输出尽可能多的日志,忽略Think Time;而Controller中运行脚本则是开始性能测试,这时的
Run-time Settings策略会有变化。