一、参数:
1. 在LR函数中可以直接使用参数。参数必须在双引号“”中才能应用。大部分情况下,可以直接用参数代替函数中双引号内的数据。如下使用方法:
lr_save_string("http://www.baidu.com","url"); web_url("test","URL={url}",LAST);
2. 参数是全局的,同一个脚本的任何一个action都能使用。
3. 在VuGen中,默认带有{}的字符串为参数。
4. 将一个字符串、数字、日期写入一个参数保存的函数分别为:lr_save_string(); lr_save_int(); lr_save_datetime();
5. 参数数组(LR9.x后出现)的三个函数:
lr_paramarr_len("param_name");参数数组的长度。(既param_name_count) lr_paramarr_idx("param_name",i);数组中编号为i的参数值。 lr_paramarr_random("param_name");数组中随机一个参数值。
二、变量
1. 变量是C语言的,无法直接运用在系统函数中。如下使用方法:
char url[100]; strcpy(url,"URL=http://www.baidu.com"); web_url("test",url,LAST);
2. 变量是局部的,只能在定义的那个action中使用。要是希望整个脚本共用,则应该在globals.h中定义变量。
三、参数与变量的使用方法
1. 字符型变量和参数的转换
lr_save_string("teststring","param"); 将字符串teststring保存到参数param中 lr_eval_string("{param}"); 取出参数param中的值
2. 整型变量和参数的转换
int x; x = 10; lr_save_int(x,"param"); 将整形变量保存到参数param中 x = atoi(lr_eval_string("{param}")); 取出参数param中的数值保存到变量x
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
今天琢磨了一下LoadRunner的变量、参数的输出与相互转化的问题,写一例题:
/********** 参数和变量传递 ***********/
Variable( )
{
char
* ip = lr_get_vuser_ip();
//获取当前用户的IP地址,保存在IP变量里。
char
* gname = lr_get_host_name ();
//获取当前用户的机器名,保存在GNAME变量里。
if
(ip)
/* 参数转变量 */
//RunTime是已定义的参数,下文也可以直接调用
lr_vuser_status_message(
"Ip地址: %s ,参数 : %s"
,ip,lr_eval_string(
"{RunTime}"
));
else
lr_vuser_status_message(
"未启动IP欺骗……"
);
/* 变量转参数 */
lr_save_string(gname,
"GN"
);
//把变量IP存在“GN”参数里,下文可以直接用 {GN} 调用。
/* 参数输出 */
web_submit_data(
"StatusReporter"
,
"Name=title"
,
"Value={RunTime}"
, ENDITEM,
"Name=content"
,
"Value={GN}"
, ENDITEM,
LAST);
/* 变量输出 */
lr_output_message(
"当前IP地址: %s "
,ip);
lr_think_time(2);
//停顿两秒便于观察。
return
0;
}
/*********************END***************************/
这段代码,虽然很简单,但已含概了变量与参数的转化与输出。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
|
就目前的了解。Loadrunner的脚本语言其实和C没什么区别。他内部的好多机制都是C实现的。
不过是一种“类C”
所以我从几个方面分析
1:定义常量变量和C一样
2:LR函数的参数使用与C有点不一样, 在LR中,C的变量和LR的参数是不一样的。
任何C的变量都不能被LR的函数直接调用。
应该用lr_eval_string来取值。
3:什么循环语句,选择语句都和C一样
4:一些函数的定义和C不一样。虽然名字一样,参数有不同
5: 输入输出也有些不同。
所以重点要突破的地方就是理清参数和变量直接的关系。和多熟悉一LR些函数,其他就是C语言的知识了。
lr它有自己管理的变量,也叫参数,这种参数只能通过reg或者lr_save_方式定义,或者通过文件定义.
1.参数的赋值和取值
lr_save_string(
"hello world"
,
"param"
);
lr_eval_string(
"{param}"
);
2.变量到参数
int
x;
x=10;
lr_save_string(x,
"param"
);
lr_eval_string(
"{param}"
);
3.变量读参数
char
x[100];
x=
"{param}"
;
lr_save_string(
"hello world"
,
"param"
);
lr_eval_string(x);
LoadRunner没有提供对参数的算术运算的函数。所以LR的参数必须:
1) 转换成C的整数
2) 使用C的函数来运算最后返回一个C的字符串
3) 把返回的字符串保存成参数
view plaincopy to clipboardprint?
// 1. 转换成C的整数:
i = atoi( lr_eval_string(
"{pNum_in}"
) );
// 2. 使用C的函数来运算最后返回一个C的字符串:
sprintf( cBuf,
"%d"
, i+1);
// 3.把返回的字符串保存成参数:
lr_save_string( cBuf,
"pNum_out"
);
// 1. 转换成C的整数:
i = atoi( lr_eval_string(
"{pNum_in}"
) );
// 2. 使用C的函数来运算最后返回一个C的字符串:
sprintf( cBuf,
"%d"
, i+1);
// 3.把返回的字符串保存成参数:
lr_save_string( cBuf,
"pNum_out"
);
lr_eval_string()
函数的主要作用:返回脚本中的一个参数当前的值,
返回值类型:
char
一般多用在调试脚本时输出参数的值.具体用法如下:
lr_output_message(
"The parameter1's value is %s"
,lr_eval_string(
"{parameter1}"
)),其中参数parameter1在之前已经定义了的参数
lr_log_message(lr_eval_string(
"{parameter1}"
))
在LR中,C的变量和LR的参数是不一样的。
任何C的变量都不能被LR的函数直接调用。
应该用lr_eval_string来取值。
比如{NewParam}(LR中参数化的变量)直接用这个引用是没有问题的。
但是如果如下:
Action()
{
char
a[10];
strcpy(a,
"{NewParam}"
);
lr_message(a);
return
0;
}
这就不对了。
lr_message(a);就会报错。
但是写成lr_message(lr_eval_string(a));就可以。
因为这里的值已经取出来了。
********** 参数和变量传递 ***********/
Variable( )
char
* ip =lr_get_vuser_ip();
//获取当前用户的IP地址,保存在IP变量里。
char
* gname =lr_get_host_name();
//获取当前用户的机器名,保存在GNAME变量里。
if
(ip)
/* 参数转变量 */
//RunTime是已定义的参数,下文也可以直接调用
lr_vuser_status_message(
"Ip地址: %s ,参数 : %s"
,ip,lr_eval_string(
"{RunTime}"
));
else
lr_vuser_status_message(
"未启动IP欺骗……"
);
/* 变量转参数 */
lr_save_string(gname,
"GN"
);
//把变量IP存在“GN”参数里,下文可以直接用 {GN} 调用。
/* 参数输出 */
web_submit_data(
"StatusReporter"
,
"Name=title"
,
"Value={RunTime}"
,ENDITEM,
"Name=content"
,
"Value={GN}"
,ENDITEM,
LAST);
/* 变量输出 */
lr_output_message(
"当前IP地址: %s "
,ip);
lr_think_time(2);
//停顿两秒便于观察。
return0;
}
最初我想实现用web_reg_save_param()取到的数保存在数组中,并lr_eval_string()来显示数组中的各个元素。代码如下:
web_reg_save_param(
"test"
,
"LB="
,
"RB="
,
"ORD=All"
,LAST);
web_url();
count = lr_eval_string(
"{test_count}"
);
for
(i=1;i<=count,i++)
sprintf(str,lr_eval_string(
"{test_%d}"
),i);
但是每次得到的数据总是
str = test_1 test_2.....都不是数组中的元素。
其实这个问题就是没有搞懂lr中内部参数和外部参数的区别
web_reg_save_param()中取到的数组,是属于lr的内部函数,在其内部函数中再使用变量,即(test_%d,i),是不能直接取到元素的值。这个中间必须要通过变量(外部变量)来传递。
上述代码改为:
web_reg_save_param(
"test"
,
"LB="
,
"RB="
,
"ORD=All"
,LAST);
web_url();
count =atoi( lr_eval_string(
"{test_count}"
));
for
(i=1;i<=count,i++)
{
sprinf(tmp,
"{test_%d}"
,i);
sprintf(str,lr_eval_string(tmp));
}
这样就能实现了。
lr_save_string
The lr_save_string function assigns the specified
null
-terminated
string
to a parameter. This function
is
useful
in
correlating queries. To determine the value of the parameter, use the lr_eval_string function.
|