loadrunner簡單使用——HTTP,WebService,Socket壓力測試腳本編寫


先說明一下,本人是開發,對測試不是特別熟悉,但因工作的需要,也做過一些性能測試方面的東西。比較久之前很簡單的用過,最近又用到了,熟悉一下。現做一個總結。
使用loadrunner進行壓力測試主要分兩步:
第一步是編寫腳本(比較重點),
第二步執行測試(配置都是在界面上點點就行,當然我只是比較簡單的,能滿足日常需要的),
第三步分析結果(這一步比較高深,但是對於我來說能看懂簡單的性能指標就OK)
所以這里就說一下腳本的編寫,給未來再用到做參考。

 

1,HTTP的GET請求

這里以訪問百度為例,地址http://www.baidu.com/s?wd=mobile,表示在百度上搜索mobile。具體腳本如下(有注釋)

Lr script代碼

Action() 

    int status; 
    lr_start_transaction("send"); 
    web_reg_find("Search=Body",//這里說明在Body的范圍內查找 
                 "SaveCount=ret_Count",//這里表示把返回值的個數放在變量ret_Count里 
                 "Text=mobile",//這里表示查找的內容是“mobile” 
                 LAST); 
    status=web_url("Baidu_Search",  
        "URL= http://www.baidu.com/s?wd=mobile",  
        "TargetFrame=Main",  
        "Resource=0",  
        "RecContentType=text/html",  
        "Mode=http",  
        LAST );  
    lr_output_message("Request Status:%d",status); 
    lr_output_message("查找到的返回值個數:%d",atoi(lr_eval_string("{ret_Count}"))); 
    if (atoi(lr_eval_string("{ret_Count}")) > 0){//這里判斷檢查到的個數 
         lr_output_message("Rec successful."); 
         lr_end_transaction("send", LR_PASS); 
     } 
     else{  
         lr_error_message("Rec failed"); 
         lr_end_transaction("send", LR_FAIL); 
     }  
    return 0; 

 

2,HTTP POST請求

這個是在我們項目中用到的,發送POST請求,進行自然語言識別的,腳本如下:

Lr script代碼

Action() 

    int status; 
    lr_start_transaction("send"); 
    web_reg_find("Search=Body",//這里說明在Body的范圍內查找 
                 "SaveCount=ret_Count",//這里表示把返回值的個數放在變量ret_Count里 
                 "Text=t",//這里表示查找的內容是“t” 
                 LAST); 
    status=web_submit_data("trs", 
                "Action=http://192.168.77.185:9002/recognizeText",//地址
                "Method=POST",//POST請求 
                "RecContentType=text/html", 
                "Mode=HTML", 
                ITEMDATA, 
                "Name=usercontent","Value=gprs",ENDITEM,//這一行表示傳入一個參數usercontent,值為gprs 
                "Name=Accept","Value=text/plain",ENDITEM, 
                LAST); 
     lr_output_message("Request Status:%d",status); 
     if (atoi(lr_eval_string("{ret_Count}")) > 0){//這里判斷檢查到的個數 
         lr_output_message("Rec successful."); 
         lr_end_transaction("send", LR_PASS); 
     } 
     else{  
         lr_error_message("Rec failed"); 
         lr_end_transaction("send", LR_FAIL); 
     }  
     return 0; 

 

3.WebService請求
webservice請求的腳本建議通過可視化的方式添加
1)引入webservice,注意wsdl后綴

f876a5fd-d125-3a68-bb39-3af9ad6f39a3

2)給入參填值

2

3)給返回值指定存儲到的變量中

3

4)結果檢查
這個與其它模式一樣,不多說了
我這里添加的是網上公用的天氣預報webservice,地址是:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx
詳細腳本如下:

Lr script代碼

Action() 

    int status; 
    lr_start_transaction("send"); 
    status=web_service_call( "StepName=getSupportCity_102", 
        "SOAPMethod=WeatherWebService|WeatherWebServiceSoap|getSupportCity",//這里是我已經引用了webservice的名稱及調用方法 
        "ResponseParam=response", 
        "Service=WeatherWebService", 
        "ExpectedResponse=SoapResult", 
        "Snapshot=t1353067092.inf", 
        BEGIN_ARGUMENTS, 
                      "byProvinceName=安徽",//這里是入參,參數名稱:byProvinceName,值:安徽。入參和返回值的名稱都可以再引用里看見 
        END_ARGUMENTS, 
        BEGIN_RESULT, 
                      "getSupportCityResult=result",//這里是返回值,名稱:getSupportCityResult,把它放到變量result中 
        END_RESULT, 
        LAST); 
    lr_output_message("Request Status:%d",status); 
    lr_output_message("Result:%s",lr_eval_string("{result}"));//這里把返回值輸出,調試webservice的時候用 
    if(strstr(lr_eval_string("{result}"),"合肥")>0){//這里是判斷返回值中是否包含“合肥” 
        lr_end_transaction("send",LR_PASS); 
    }else{ 
        lr_end_transaction("send",LR_AUTO); 
    } 
    return 0; 

 

4.Socket請求
我這里指的是簡單的Socket請求,端連接,發送接收的都是一個字符串。比較復雜的Socket請求,自己錄制腳本。如果不知道,自己去查。
詳細腳本如下,另外還包含一個data.ws文件,用來聲明發送和接收的字節數組及其長度的,並指定要發送的內容(發送的內容一樣可以參數化的)

Lr script代碼

#include "lrs.h" 
Action() 

    char *recvbuf; 
    int recvlen=0; 
    int rc; 
    lrs_startup(257); 
    lr_start_transaction("Trans_1"); 
    lr_start_transaction("Conn_1"); 
    rc=lrs_create_socket("socket0", "TCP", "RemoteHost=192.168.1.101:8888",  LrsLastArg);//創建Socket連接 
    if (rc != 0 ) {    
        lr_end_transaction("Conn_1", LR_FAIL);    
        lr_end_transaction ("Trans_1", LR_FAIL);    
        return 0;   
    } 
    lr_end_transaction("Conn_1", LR_PASS);  //判斷socket是否鏈接成功的事務,0表示創建成功 
    lrs_send("socket0", "buf0", LrsLastArg); //發送buf0,buf0為在data.ws中定義的發送變量 
    lrs_receive("socket0", "buf1", LrsLastArg); //接收消息,存放在buf1中,buf1是在data.ws中定義的接收數組,注意數組長度一定要大於等於實際接收長度 
    lrs_get_last_received_buffer("socket0",&recvbuf,&recvlen);//把Socket最后接收的字節數組,長度放在recvlen中,內容放在recvbuf中 
    lr_output_message("Received:%s",lr_eval_string(recvbuf)); 
    if(recvlen>3) 
        lr_end_transaction("Trans_1", LR_PASS); 
    else 
        lr_end_transaction ("Trans_1", LR_FAIL); 
    lrs_disable_socket("socket0", DISABLE_SEND_RECV); 
    lrs_close_socket("socket0"); 
    return 0; 

Lr script代碼

//data.ws 
;WSRData 2 1 
send  buf0 32 
    "hehehehe" 
recv  buf1 50 
-1 

結束的話:
這里介紹的測試腳本,我覺得開發測試人員都需要會,因為開發弄出來的東西,自己要了解個大概的性能吧。如果測試的專業人員,這些都要熟知,再如果想要了解的更多,請轉到51testing上去。


免責聲明!

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



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