Loadrunner C 編程_1

來源:互聯網
上載者:User

標籤:使用   檔案   os   資料   for   問題   

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.