就目前的了解。Loadrunner的腳本語(yǔ)言其實(shí)和C沒(méi)什么區(qū)別。他內(nèi)部的好多機(jī)制都是C實(shí)現(xiàn)的。
不過(guò)是一種“類C”
所以我從幾個(gè)方面分析
1:定義常量變量和C一樣
2:LR函數(shù)的參數(shù)使用與C有點(diǎn)不一樣, 在LR中,C的變量和LR的參數(shù)是不一樣的。
任何C的變量都不能被LR的函數(shù)直接調(diào)用。
應(yīng)該用lr_eval_string來(lái)取值。
3:什么循環(huán)語(yǔ)句,選擇語(yǔ)句都和C一樣
4:一些函數(shù)的定義和C不一樣。雖然名字一樣,參數(shù)有不同
5: 輸入輸出也有些不同。
所以重點(diǎn)要突破的地方就是理清參數(shù)和變量直接的關(guān)系。和多熟悉一LR些函數(shù),其他就是C語(yǔ)言的知識(shí)了。
lr它有自己管理的變量,也叫參數(shù),這種參數(shù)只能通過(guò)reg或者lr_save_方式定義,或者通過(guò)文件定義.
1.參數(shù)的賦值和取值
lr_save_string("hello world","param");
lr_eval_string("{param}");
2.變量到參數(shù)
int x;
x=10;
lr_save_string(x,"param");
lr_eval_string("{param}");
3.變量讀參數(shù)
char x[100];
x="{param}";
lr_save_string("hello world","param");
lr_eval_string(x);
LoadRunner沒(méi)有提供對(duì)參數(shù)的算術(shù)運(yùn)算的函數(shù)。所以LR的參數(shù)必須:
1) 轉(zhuǎn)換成C的整數(shù)
2) 使用C的函數(shù)來(lái)運(yùn)算最后返回一個(gè)C的字符串
3) 把返回的字符串保存成參數(shù)
view plaincopy to clipboardprint?
// 1. 轉(zhuǎn)換成C的整數(shù):
i = atoi( lr_eval_string("{pNum_in}") );
// 2. 使用C的函數(shù)來(lái)運(yùn)算最后返回一個(gè)C的字符串:
sprintf( cBuf, "%d", i+1);
// 3.把返回的字符串保存成參數(shù):
lr_save_string( cBuf, "pNum_out");
// 1. 轉(zhuǎn)換成C的整數(shù):
i = atoi( lr_eval_string("{pNum_in}") );
// 2. 使用C的函數(shù)來(lái)運(yùn)算最后返回一個(gè)C的字符串:
sprintf( cBuf, "%d", i+1);
// 3.把返回的字符串保存成參數(shù):
lr_save_string( cBuf, "pNum_out");
lr_eval_string()
函數(shù)的主要作用:返回腳本中的一個(gè)參數(shù)當(dāng)前的值,
返回值類型:char
一般多用在調(diào)試腳本時(shí)輸出參數(shù)的值.具體用法如下:
lr_output_message("The parameter1's value is %s",lr_eval_string("{parameter1}")),其中參數(shù)parameter1在之前已經(jīng)定義了的參數(shù)
lr_log_message(lr_eval_string("{parameter1}"))
在LR中,C的變量和LR的參數(shù)是不一樣的。
任何C的變量都不能被LR的函數(shù)直接調(diào)用。
應(yīng)該用lr_eval_string來(lái)取值。
比如{NewParam}(LR中參數(shù)化的變量)直接用這個(gè)引用是沒(méi)有問(wèn)題的。
但是如果如下:
Action()
{
char a[10];
strcpy(a,"{NewParam}");
lr_message(a);
return 0;
}
這就不對(duì)了。
lr_message(a);就會(huì)報(bào)錯(cuò)。
但是寫(xiě)成lr_message(lr_eval_string(a));就可以。
因?yàn)檫@里的值已經(jīng)取出來(lái)了。
********** 參數(shù)和變量傳遞 ***********/
Variable( )
char* ip =lr_get_vuser_ip();//獲取當(dāng)前用戶的IP地址,保存在IP變量里。
char* gname =lr_get_host_name();//獲取當(dāng)前用戶的機(jī)器名,保存在GNAME變量里。
if(ip)
/* 參數(shù)轉(zhuǎn)變量 */ //RunTime是已定義的參數(shù),下文也可以直接調(diào)用
lr_vuser_status_message("Ip地址: %s ,參數(shù) : %s",ip,lr_eval_string("{RunTime}"));
else
lr_vuser_status_message("未啟動(dòng)IP欺騙……");
/* 變量轉(zhuǎn)參數(shù) */
lr_save_string(gname, "GN" );//把變量IP存在“GN”參數(shù)里,下文可以直接用 {GN} 調(diào)用。
/* 參數(shù)輸出 */
web_submit_data("StatusReporter",
"Name=title", "Value={RunTime}",ENDITEM,
"Name=content", "Value={GN}",ENDITEM,
LAST);
/* 變量輸出 */
lr_output_message("當(dāng)前IP地址: %s ",ip);
lr_think_time(2);//停頓兩秒便于觀察。
return0;
}
http://blog.csdn.net/zeeslo/archive/2007/05/30/1631350.aspx
http://blog.csdn.net/oobibigo/archive/2008/11/17/3321558.aspx
最初我想實(shí)現(xiàn)用web_reg_save_param()取到的數(shù)保存在數(shù)組中,并lr_eval_string()來(lái)顯示數(shù)組中的各個(gè)元素。代碼如下:
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);
但是每次得到的數(shù)據(jù)總是
str = test_1 test_2.....都不是數(shù)組中的元素。
其實(shí)這個(gè)問(wèn)題就是沒(méi)有搞懂lr中內(nèi)部參數(shù)和外部參數(shù)的區(qū)別
web_reg_save_param()中取到的數(shù)組,是屬于lr的內(nèi)部函數(shù),在其內(nèi)部函數(shù)中再使用變量,即(test_%d,i),是不能直接取到元素的值。這個(gè)中間必須要通過(guò)變量(外部變量)來(lá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));
}
這樣就能實(shí)現(xiàn)了。
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.
聯(lián)系客服