如果选择了“All”或者“Specific”选项,那么生成的VU脚本中会包含若干对库函数“http_find_values”的调用。该库函数会找出由服务器返回并且最终用户不作修改的参数,然后抽取出它们的值并保存在一系列以“SgenRes_nnn”形式命名的变量中。举例来讲,列表2中包含了一个隐藏的FORM参数“mode”。Robot会确定该参数需要进行关联并生成相应的脚本代码(见列表3)来动态抽取它的值。
…… |
…
{
string SgenRes_001[];
SgenRes_001 = http_find_values("mode", HTTP_FORM_DATA, 1);
CHECK_FIND_RESULT(SgenRes_001,"mode","simpe")
}
…
|
库函数http_find_values会在当前HTTP连接的响应中搜索所需的参数值。它的语法如下:
string[] http_find_values(name, type, tag[, name, type, tag ... ]), |
其中name指定参数的名称,type指定参数所在的数据形式,tag指定使用符合条件的第几个参数值。type的值应为以下值之一:HTTP_FORM_DATA、HTTP_HREF_DATA或HTTP_COOKIE_DATA,分别代表FORM数据、URL数据或Cookie数据。每一个name、type和tag的组合都唯一地确定了一个单一的值,调用http_find_values时最多可以指定21个这样的组合。宏CHECK_FIND_RESULT验证它返回的值不为空,若为空则提供一个缺省值,该缺省值是在脚本录制时记录的值。
可以发现,虽然使用了动态数据关联技术,Robot还是只能从FORM数据、URL数据或者Cookie数据中抽取参数值。如果动态数据的值被包含在其他地方,例如FORM中的“action”属性中,Robot就无能为力了。
参数值的定制抽取
当URL的location部分是由服务器动态生成或者部分参数不在Robot能自动关联的范围之内时,就需要通过编程来定制参数值的抽取,简单地讲就是进行字符串匹配。VU语言的库提供了几个用于此目的的函数。除了前面已经介绍过的库函数http_find_values,库函数http_header_info可被用来从最近的HTTP响应头中抽取一个头参数。此外还有很多基本的字符串处理函数,可在它们的基础上编写更复杂的自定义函数。下面介绍几个作者编写的可用于一般目的抽取函数。
列表4中定义的“getURLByText”函数可以通过指定一个字符串获得围绕该字符串的HTML Anchor标签的HREF属性。例如,getURLByText(“
Hello world!
”, “a surprise”)将返回“hello2.jsp”。如果第二个参数变为“surprise”,则返回“hello1.jsp”,因为该函数总是返回第一个被匹配到的结果。如果没有找到任何匹配,getURLByText返回一个空字符串。

