4.参数数组
参数数组提供了对一类参数集中存放的机制,与其相关的主要有3个函数:
lr_paramarr_idx()
lr_paramarr_len()
lr_paramarr_random()
参数数组必须满足以下两个条件:
参数必须都是以相同的名字开头的,后接下画线加数字的方式顺序赋值。
参数数组必须有一个"参数名_count"的参数来记录数组的长度。
读者如果以前使用过LoadRunner的关联函数,就会很快明白这个规定的意义,大家也可以先看第A.7节后再回头来学习参数数组。
例如:
现在要创建一个访问网站的参数数组,可以编写以下代码。
lr_save_string("www.google.com","website_1");
lr_save_string("www.baidu.com","website_2");
lr_save_string("www.163.com","website_3");
lr_save_string("www.sina.com","website_4");
lr_save_string("4","website_count");//不能写错数据
通过这个脚本创建了一个名为website的参数数组。接着来看看怎么使用函数对这个参数数组进行处理。
lr_paramarr_idx()函数可以取出参数数组中某个编号的值。
例如:
char * siteval;
siteval = lr_paramarr_idx("website", 2);
上述代码得到的结果是www.baidu.com,使用lr_eval_string("{website_2}")可以得到相同的结果。
lr_paramarr_len()函数的作用就是获得整个参数数组的长度。
例如:
int arrSize;
arrSize = lr_paramarr_len("website");
上述代码结果为4,使用lr_eval_string("{website_count}")可以得到相同的结果。
lr_paramarr_random()函数是从参数列表中随机选择一个参数。
例如:
char * siteval;
siteval = lr_paramarr_random("website");
siteval中就会保存随机读取出来的参数值。这个函数可以帮助我们简便地获得参数数组中的随机记录,对于一些页面选项都可以这样快速地进行处理。该函数在某些情况下会出现无法随机的情况,谨慎使用。
如果需要遍历整个参数数组中的所有内容,可以通过下面的方法来实现:
int arrid;
for(arrid=1;arrid<=lr_paramarr_len("website");arrid++)
{
lr_output_message (lr_paramarr_idx ("website", arrid));
}
LoadRunner中参数的功能非常强大,这里主要介绍了一些常见的使用方法,而具体的使用需要根据需求和实际情况灵活应用。
5.XML在参数中的处理
在前面我们讲到参数类型中有XML类型,可以帮助我们存放和操作XML数据,但是这个功能并不是很方便,很多时候使用自定义XML结构的参数使用起来更为方便。
存放XML的方式还是使用lr_save_string,在存放XML的时候通常有两种写法。例如,我们要将一个XML保存为一个叫作xmlparam的参数。
<?xml version="1.0" encoding="GB2312"?>
<bookstore>
<book>
<id>No1</id>
<title>性能测试进阶指南</title>
<author>cloud</author>
<year>2010</year>
<price>45.0</price>
</book>
<book>
<id>No2</id>
<title>性能测试进阶指南2</title>
<author>chen</author>
<year>2012</year>
<price>待定</price>
</book>
</bookstore>
第一种写法将所有的回车符去掉组成一个比较长的字符串,然后将这个字符串保存到参数中。
char *xmlstring;
xmlstring="<?xml version=\"1.0\" encoding=\"GB2312\"?><bookstore><book> <id>No1</id><title>性能测试进阶指南</title><author>cloud</author><year>2010 </year><price>45.0</price></book><book><id>No2</id><title>性能测试进阶指南2 </title><author>chen</author><year>2012</year><price>待定</price></book> </bookstore>";
lr_save_string(xmlstring,"xmlparam");
或者使用第二种写法将XML多行保存:
char *xmlstring;
xmlstring="<?xml version=\"1.0\" encoding=\"GB2312\"?>"
"<bookstore>"
"<book>"
"<id>No1</id>"
"<title>性能测试进阶指南</title>"
"<author>cloud</author>"
"<year>2010</year>"
"<price>45.0</price>"
"</book>"
"<book>"
"<id>No2</id>"
"<title>性能测试进阶指南2</title>"
"<author>chen</author>"
"<year>2012</year>"
"<price>待定</price>"
"</book>"
"</bookstore>";
lr_save_string(xmlstring,"xmlparam" );
当运行上面的两种写法就可以生成名为xmlparam的参数,但是大家肯定会觉得这个写起来实在是太复杂了。一般XML都会很长,如果使用第一种写法要自己逐个取出回车换行符,还要自己转移双引号。而使用第二种写法每一行都要自己加双引号,也有转义双引号的问题,工作量太大了。所以这里需要使用一点自动化的东西来帮助我们解决这个格式转换的问题。
在硬盘上新建两个文件input.xml和output.xml,将我们需要转换的XML内容存放在input.xml文件中,然后新建一个名为xmlformat.vbs的文件,在里面编写下面的代码:
Option Explicit
Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8
Dim fso, file, file1, msg,outmsg
Set fso = CreateObject ("Scripting.FileSystemObject")
Set file = fso.OpenTextFile ("input.xml",ForReading)
Set file1 = fso.OpenTextFile ("output.xml",ForWriting)
Do While Not file.AtEndOfStream
msg = file.ReadLine
msg = replace(msg,"""","\""",1,-1,1)
outmsg= """"&msg&""""
file1.WriteLine outmsg
Loop
file1.Close
file.Close
Set file1=nothing
Set file = Nothing
Set fso = Nothing
保存这段代码后,可以双击运行一下这个文件,然后去看看output.xml是不是已经出现了第二种情况--我们需要的多行带格式的字符串。
如果需要第一种格式的单行XML字符串,可以用下面这个代码,保存为xmlformatsingle.vbs。
Option Explicit
Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8
Dim fso, file, file1, msg,outmsg
Set fso = CreateObject ("Scripting.FileSystemObject")
Set file = fso.OpenTextFile ("input.xml",ForReading)
Set file1 = fso.OpenTextFile ("output.xml",ForWriting)
Do While Not file.AtEndOfStream
msg = msg&replace(file.ReadLine,"""","\""",1,-1,0)
Loop
outmsg=""""&msg&""""
file1.WriteLine outmsg
file1.Close
file.Close
Set file1=nothing
Set file = Nothing
Set fso = Nothing
这段代码被运行后就可以将一个多行的XML格式转化为单行字符串并且自动转移双引号,如果你还有别的需要转移的可以自行添加replace段的类型转化策略。
版权声明:51Testing软件测试网获作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。