LR參數和變量


一、參數:

 

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

 

今天琢磨了一下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***************************/

  這段代碼,雖然很簡單,但已含概了變量與參數的轉化與輸出。

 

 

就目前的了解。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.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM