Loadrunner性能測(cè)試(三):關(guān)聯(lián)函數(shù)、檢查點(diǎn)、事務(wù)、思考時(shí)間、其他函數(shù)

關(guān)聯(lián)函數(shù):

image.png

該函數(shù)的功能很強(qiáng)大:
1、用#代表任何數(shù)字

image.png

2、使用^代表通配符
image.png

3、獲取匹配到的第幾個(gè)值
image.png

4、找不到時(shí)報(bào)error還是報(bào)警,建議報(bào)警,這樣程序還能繼續(xù)執(zhí)行
image.png

5、搜索范圍,建議選擇全部
image.png

6、類(lèi)似 java中的substring方法,從第10個(gè)字符開(kāi)始截取到第50個(gè)字符
image.png

7、忽略重定向
image.png

關(guān)聯(lián)數(shù)組

要實(shí)現(xiàn)的一個(gè)需求是進(jìn)入csdn首頁(yè),能夠隨機(jī)點(diǎn)擊左側(cè)導(dǎo)航欄進(jìn)入到相應(yīng)的欄目中。

image.png

比如進(jìn)入程序人生:
image.png

鏈接是https://www.csdn.net/nav/career,每個(gè)欄目的域名相同,后面部分不同,要從首頁(yè)的源碼中查看每個(gè)欄目后面的部分信息,然后提取到一個(gè)數(shù)組中:
image.png

腳本已經(jīng)錄制完成,在腳本中添加步驟添加函數(shù):


image.png

要給 引號(hào)加轉(zhuǎn)義符


image.png

image.png

打?。?br> lr_output_message(lr_eval_string("{getitems}"));
因?yàn)槭菙?shù)組所以打印結(jié)果是:


image.png

打印出第二個(gè):
lr_output_message(lr_eval_string("{getitems_2}"));


image.png

image.png

獲取全部的值:

    //獲取數(shù)組的長(zhǎng)度的函數(shù)lr_paramarr_len("getitems")
    //lr_paramarr_idx("getitems",i)根據(jù)下標(biāo)索引獲取數(shù)組中的數(shù)據(jù)
    for(i=1;i<=lr_paramarr_len("getitems");i++){
        lr_output_message(lr_paramarr_idx("getitems",i));
    }

隨機(jī)獲取一個(gè)值

r_output_message(lr_paramarr_random("getitems"));

使用sprintf給一個(gè)變量賦值:

     //sprintf(myurlstring,"{getitems_%d}",i); 是把"{getitems_%d}"的值賦值給myurlstring,myurlstring是char數(shù)組,必須用數(shù)組才行要不然會(huì)報(bào)錯(cuò),并打印出來(lái)
     for(i=1;i<=lr_paramarr_len("getitems");i++){
        sprintf(myurlstring,"{getitems_%d}",i);
        lr_output_message(lr_eval_string(myurlstring));
     }

//保存參數(shù)的函數(shù)lr_save_string(第一個(gè)參數(shù)是參數(shù)值,第二個(gè)參數(shù)是參數(shù)名稱可以隨意設(shè)置),這個(gè)參數(shù)testurl可以被下面的函數(shù)使用

    lr_save_string(lr_paramarr_random("getitems"),"testurl");
    lr_output_message(lr_eval_string("{testurl}"));

拼接參數(shù)并關(guān)聯(lián)應(yīng)用到下面的函數(shù)中

    //拼接要訪問(wèn)的url
    sprintf(askurlstring, "https://www.csdn.net%s", lr_paramarr_random("getitems"));
    lr_output_message(askurlstring);//打印變量查看變量有沒(méi)有拼接成功
    //把拼接的url保存到一個(gè)變量中這樣才能被下面的函數(shù)應(yīng)用
    lr_save_string(askurlstring,"askurlstring");
    
    //訪問(wèn)拼接的url
        web_url("career", 
        "URL={askurlstring}", 
        "TargetFrame=", 
        "Resource=0", 
        "RecContentType=text/html", 
        "Referer=", 
        "Snapshot=t113.inf", 
        "Mode=HTML", 
        LAST);

下面的代碼實(shí)現(xiàn)的是打開(kāi)csdn的首頁(yè),然后隨機(jī)選中一個(gè)欄目,再進(jìn)入欄目中隨機(jī)點(diǎn)擊一篇文章。

Action_Allcode()
{
    //變量的聲明必須放到前面,開(kāi)始執(zhí)行代碼后不能聲明變量
    
    //聲明一個(gè)變量,必須放到首行這個(gè)位置才行
    int i;
    
    //聲明一個(gè)char變量,用來(lái)存放拼接的URL地址
    char* urlstring="https://www.csdn.net";
    
    //聲明一個(gè)長(zhǎng)度為1024的char數(shù)組,下面沒(méi)有用到
    char myurlstring[1024];
    //聲明一個(gè)長(zhǎng)度為1024的char數(shù)組,應(yīng)用到下面的url中
    char askurlstring[1024];
    
    //聲明一個(gè)char變量,用于存放欄目的名稱
    char *askurltitle;
    

    web_set_sockets_option("SSL_VERSION", "TLS1.1");

    web_add_cookie("Hm_ct_6bcd52f51e9b3dce32bec4a3997715ac=6525*1*10_19814196820-1526528487575-539618; DOMAIN=www.csdn.net");

    web_add_cookie("uuid_tt_dd=10_19814196820-1526528487575-539618; DOMAIN=www.csdn.net");

    web_add_cookie("dc_tos=ptyfw6; DOMAIN=www.csdn.net");

    web_add_cookie("dc_session_id=10_1526528487575.516753; DOMAIN=www.csdn.net");

    web_add_cookie("Hm_lvt_6bcd52f51e9b3dce32bec4a3997715ac=1561970163; DOMAIN=www.csdn.net");

    web_add_cookie("TY_SESSION_ID=47e865f3-1857-4c8d-8791-ab14094f7f4f; DOMAIN=www.csdn.net");



    web_reg_save_param("getitems",
        "LB/ALNUMLC=<li class=\"\"><a href=\"",
        "RB=\">",
        "Ord=ALL",
        LAST);

    
    
//  web_reg_save_param_regexp(
//      "ParamName=getitems",
//      "RegExp= <li class=\"\"><a href=\"/nav/.*\">.*</a></li>",
//      "Group=0",
//      SEARCH_FILTERS,
//      LAST);
    
    

    web_url("www.csdn.net", 
        "URL=https://www.csdn.net/", 
        "TargetFrame=", 
        "Resource=0", 
        "RecContentType=text/html", 
        "Referer=", 
        "Snapshot=t109.inf", 
        "Mode=HTML", 
        EXTRARES, 
        "Url=/images/icon_close_big.png", ENDITEM, 
        "Url=/images/is_top_big.png", ENDITEM, 
        "Url=/favicon.ico", "Referer=", ENDITEM, 
        "Url=/images/icon_close_hover_big.png", ENDITEM, 
        LAST);
    
//  //打印出數(shù)組的第二個(gè)值,數(shù)組的下標(biāo)是從1開(kāi)始的,所以第二個(gè)是2
//      lr_output_message(lr_eval_string("{getitems_2}"));
//              
//      
//  //獲取數(shù)組的長(zhǎng)度的函數(shù)lr_paramarr_len("getitems")
//  //lr_paramarr_idx("getitems",i)根據(jù)下標(biāo)索引獲取數(shù)組中的數(shù)據(jù)
//  for(i=1;i<=lr_paramarr_len("getitems");i++){
//      lr_output_message(lr_paramarr_idx("getitems",i));
//  }
        
    
     //lr_paramarr_random("getitems")隨機(jī)獲取數(shù)組中的數(shù)據(jù)
//     lr_output_message(lr_paramarr_random("getitems"));
    
  
     
     
     //sprintf(myurlstring,"{getitems_%d}",i); 是把"{getitems_%d}"的值賦值給myurlstring,myurlstring是char數(shù)組,必須用數(shù)組才行要不然會(huì)報(bào)錯(cuò),并打印出來(lái)
//     for(i=1;i<=lr_paramarr_len("getitems");i++){
//      sprintf(myurlstring,"{getitems_%d}",i);
//      lr_output_message(lr_eval_string(myurlstring));
//     }
    
    
    //保存參數(shù)的函數(shù)lr_save_string(第一個(gè)參數(shù)是參數(shù)值,第二個(gè)參數(shù)是參數(shù)名稱可以隨意設(shè)置),這個(gè)參數(shù)testurl可以被下面的函數(shù)使用
//    lr_save_string(lr_paramarr_random("getitems"),"testurl");
//    lr_output_message(lr_eval_string("{testurl}"));
    
     
    //拼接要訪問(wèn)的url
    sprintf(askurlstring, "https://www.csdn.net%s", lr_paramarr_random("getitems"));
    lr_output_message(askurlstring);//打印變量查看變量有沒(méi)有拼接成功
    //把拼接的url保存到一個(gè)變量中這樣才能被下面的函數(shù)應(yīng)用
    lr_save_string(askurlstring,"askurlstring");
    
    //多次迭代web_url的名稱都一樣,本來(lái)想實(shí)現(xiàn)名稱要根據(jù)點(diǎn)擊的url變化,web_url的名稱不能用變量參數(shù)
    //從字符串后面開(kāi)始搜索'/',找到后直接截取包含'/'的后面的內(nèi)容
    askurltitle=(char *)strrchr(askurlstring,'/');        
    lr_save_string(askurltitle,"askurltitlestring");//保存到askurltitlestring中并打印查看結(jié)果
    lr_output_message(lr_eval_string("{askurltitlestring}"));
    
    //添加一個(gè)關(guān)聯(lián)參數(shù),從隨機(jī)進(jìn)入的欄目返回的結(jié)果中獲取文章url
        web_reg_save_param("articleurl",
        "LB=data-track-view='{\"mod\":\"popu_459\",\"con\":\",",
        "RB=,",
        "Ord=ALL",
        LAST);
    
    //訪問(wèn)拼接的url
        web_url("career", 
        "URL={askurlstring}", 
        "TargetFrame=", 
        "Resource=0", 
        "RecContentType=text/html", 
        "Referer=", 
        "Snapshot=t113.inf", 
        "Mode=HTML", 
        LAST);
    
    
    
//  //打印輸出獲取到的articleurl值
//  lr_output_message(lr_eval_string("{articleurl}"));
//  
//  //打印輸出關(guān)聯(lián)數(shù)組中的每一個(gè)值,并存到變量中
//  for(i=1;i<=lr_paramarr_len("articleurl");i++){
//      lr_output_message(lr_paramarr_idx("articleurl",i));
//  }
    
    
    //從訪問(wèn)的欄目url中隨機(jī)取一個(gè)articleurl值并存到變量中
    lr_save_string(lr_paramarr_random("articleurl"),"articleurlstring");
    lr_output_message(lr_eval_string("{articleurlstring}"));
    
    
                      
    web_url("89089809", 
        "URL={articleurlstring}", 
        "TargetFrame=", 
        "Resource=0", 
        "RecContentType=text/html", 
        "Referer=https://www.csdn.net/nav/career", 
        "Snapshot=t118.inf", 
        "Mode=HTML", 
        EXTRARES, 
        "Url=https://www.csdn.net/favicon.ico", "Referer=", ENDITEM, 
        "Url=https://pagead2.googlesyndication.com/pagead/js/r20190626/r20190131/show_ads_impl.js", ENDITEM, 
        "Url=https://pagead2.googlesyndication.com/pub-config/r20160913/ca-pub-1076724771190722.js", ENDITEM, 
        "Url=https://www.googletagservices.com/activeview/js/current/osd.js?cb=%2Fr20100101", ENDITEM, 
        "Url=https://entry.baidu.com/rp/bwordcom?di=&user=&page_url=https%3A%2F%2Fblog.csdn.net%2FPx01Ih8%2Farticle%2Fdetails%2F89089809&logid=111&title=%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E7%AE%97%E6%B3%95%20-%20ConcurrentHashMap%20%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90%20-%20%3Csdffdsfsdfdfs%3Esfsfsfsdfsdffds%3C%2FsdfsDS%3EFsd%20-%20CSDN%E5%8D%9A%E5%AE%A2&jsonp=baidu_bw_1562048038258", ENDITEM, 
        LAST);
    
    
    return 0;
}

loadrunner還有其他的關(guān)于字符串的函數(shù)沒(méi)有用到,可以參考:
https://www.cnblogs.com/qmfsun/p/4900562.html

事務(wù)

統(tǒng)計(jì)每一個(gè)請(qǐng)求或者每一批請(qǐng)求的響應(yīng)時(shí)間,評(píng)估系統(tǒng)的處理速度。
統(tǒng)計(jì)事務(wù)的成功率:評(píng)估系統(tǒng)的穩(wěn)定性。
自動(dòng)事務(wù)有兩個(gè)選項(xiàng):按每一個(gè)操作action為一個(gè)事務(wù)、按每一個(gè)步驟為一個(gè)事務(wù)


image.png

保存action,創(chuàng)建controller場(chǎng)景,運(yùn)行查看按每一個(gè)action為一個(gè)事務(wù)的執(zhí)行情況:


image.png

運(yùn)行完畢,點(diǎn)擊事務(wù)響應(yīng)時(shí)間查看結(jié)果,顯示最大值、最小值、平均值等信息:


image.png

再設(shè)置按每一個(gè)步驟為一個(gè)事務(wù)查看響應(yīng)時(shí)間:


image.png

可以不勾選自動(dòng)事務(wù),也可以勾選,不沖突,手動(dòng)設(shè)置事務(wù):


image.png

image.png

手動(dòng)定義三個(gè)事務(wù),進(jìn)入controller場(chǎng)景中運(yùn)行查看事務(wù)響應(yīng)時(shí)間:


image.png

在事務(wù)中寫(xiě)其他代碼也會(huì)產(chǎn)生浪費(fèi)時(shí)間,可以把這部分時(shí)間減去,代碼如下:

Action_wastertime()
{
    
    double time_elapsed;//定義double類(lèi)型的變量,用來(lái)存儲(chǔ)時(shí)間
    merc_timer_handle_t timer;//定義timer 用來(lái)接收開(kāi)始時(shí)間
    int i;//定義一個(gè)整型變量,可以做循環(huán)
    char b[50];//定義一個(gè)char數(shù)組,用來(lái)把double類(lèi)型的時(shí)間轉(zhuǎn)換成char類(lèi)型,可以打印出來(lái)
    
    lr_start_transaction("testing");//開(kāi)始事務(wù)
    
    web_url("www.baidu.com", 
        "URL=http://www.baidu.com/", 
        "TargetFrame=", 
        "Resource=0", 
        "RecContentType=text/html", 
        "Referer=", 
        "Snapshot=t1.inf", 
        "Mode=HTML", 
        EXTRARES, 
        "Url=/favicon.ico", "Referer=", ENDITEM, 
        LAST);


    
    timer=lr_start_timer();//開(kāi)始計(jì)算時(shí)間
    
    for(i=0;i<1000;i++){
        lr_output_message("消耗時(shí)間");
    }
    
    time_elapsed=lr_end_timer(timer);//結(jié)束計(jì)算時(shí)間
    
    lr_wasted_time(time_elapsed*1000);//從毫秒換算成秒后加入浪費(fèi)時(shí)間中
    
    lr_end_transaction("testing", LR_AUTO);//結(jié)束事務(wù),事務(wù)會(huì)自動(dòng)減去浪費(fèi)時(shí)間

    
    sprintf(b,"%2f",time_elapsed);//把double類(lèi)型的浪費(fèi)時(shí)間變量轉(zhuǎn)換成char類(lèi)型數(shù)組,并賦值給b變量
    lr_save_string(b,"time_elapsedpara");//把變量轉(zhuǎn)換成參數(shù)
    lr_output_message("浪費(fèi)的時(shí)間是:%s",lr_eval_string("{time_elapsedpara}"));//打印浪費(fèi)時(shí)間

    return 0;
}

檢查點(diǎn)

loadrunner結(jié)束事務(wù)中的LR_AUTO只是通過(guò)狀態(tài)碼來(lái)區(qū)分事務(wù)是否成功,比如登錄時(shí)密碼錯(cuò)誤,能正常返回界面告訴用戶密碼錯(cuò)誤請(qǐng)重新輸入密碼,對(duì)loadrunner來(lái)說(shuō)檢測(cè)到服務(wù)器返回是200的狀態(tài)碼,所以檢測(cè)到事務(wù)成功了,但是從業(yè)務(wù)角度來(lái)說(shuō)并沒(méi)有成功,所以需要通過(guò)檢查點(diǎn)來(lái)判斷事務(wù)是否真正的成功。

插入函數(shù),函數(shù)要放到請(qǐng)求之前,可以按文本去查也可以按字符串去查:


image.png

根據(jù)統(tǒng)計(jì)次數(shù)大于等于1判斷請(qǐng)求成功。


image.png

也可以使用函數(shù)自定義修改事務(wù)的狀態(tài):
lr_set_transaction_status_by_name(LR_FAIL,"protectcar");
lr_set_transaction_status_by_name(LR_PASS,"protectcar");

勾選和不勾選這個(gè)對(duì)注冊(cè)檢查點(diǎn)web_reg_find()函數(shù)無(wú)效。


image.png

思考時(shí)間

image.png

image.png

思考時(shí)間就是模擬用戶暫停發(fā)請(qǐng)求的時(shí)間,為了讓loadrunner模擬真實(shí)的場(chǎng)景,是需要使用思考時(shí)間的。


image.png

思考時(shí)間定為5秒,按最小值50%,最大值200%隨機(jī)選取思考時(shí)間:
image.png

集合點(diǎn)01

集合點(diǎn)適用場(chǎng)景是并發(fā)測(cè)試,主要關(guān)注大用戶量的并發(fā)。分為兩種情況:1、所有用戶都在并發(fā)請(qǐng)求,請(qǐng)求的模塊可能是不同的 2、所有用戶都在提交同一個(gè)請(qǐng)求。

集合點(diǎn)是不能模擬真實(shí)場(chǎng)景,至少不能很絕對(duì)的模擬,因?yàn)椴豢赡苓_(dá)到絕對(duì)的并發(fā),服務(wù)器接收到請(qǐng)求也是有先后順序的,處理請(qǐng)求也是需要隊(duì)列處理,所以達(dá)不到絕對(duì)意義的并發(fā)。

并發(fā)測(cè)試:相對(duì)嚴(yán)格的并發(fā),并沒(méi)有絕對(duì)嚴(yán)格的并發(fā)測(cè)試。并發(fā)測(cè)試屬于壓力測(cè)試的一個(gè)子集。

壓力測(cè)試:關(guān)注系統(tǒng)最大的瓶頸是多少,系統(tǒng)在什么時(shí)候會(huì)發(fā)生崩潰,系統(tǒng)在什么樣的場(chǎng)景下會(huì)發(fā)生崩潰。并發(fā)測(cè)試屬于壓力測(cè)試的一個(gè)子集。做壓力測(cè)試時(shí)不需要設(shè)置思考時(shí)間,直接壓測(cè)就行。

負(fù)載測(cè)試:評(píng)估性能指標(biāo),當(dāng)系統(tǒng)有100個(gè)人、1000個(gè)人、10000個(gè)人訪問(wèn)的時(shí)候系統(tǒng)的處理情況是什么,cpu、內(nèi)存、數(shù)據(jù)庫(kù)等的表現(xiàn)是什么樣的。

穩(wěn)定性測(cè)試:系統(tǒng)在標(biāo)準(zhǔn)用戶數(shù)、最佳狀態(tài)下的長(zhǎng)時(shí)間的一種運(yùn)行,比如cpu利用率在70%~80%左右,資源充分利用并且還有上升的空間的一種狀態(tài)。

系統(tǒng)的最大用戶數(shù):是指某一個(gè)指標(biāo)出現(xiàn)極限時(shí)的一種狀態(tài),不可能所有指標(biāo)都出現(xiàn)極限狀態(tài),比如內(nèi)存到達(dá)極限,或者cpu到達(dá)極限等等。

容量測(cè)試:模擬系統(tǒng)長(zhǎng)時(shí)間運(yùn)行后的性能狀態(tài),目前流行的關(guān)系型數(shù)據(jù)庫(kù)中都有自己的存儲(chǔ)引擎,比如使用索引、關(guān)鍵字等可以很快速的查詢出數(shù)據(jù)。比如查詢1000條和查詢1億條時(shí)數(shù)據(jù)庫(kù)的處理速度是什么樣的,sql語(yǔ)句是否要優(yōu)化等的測(cè)試。

集合點(diǎn)02

先創(chuàng)建一個(gè)事務(wù),再創(chuàng)建一個(gè)集合點(diǎn)就會(huì)出現(xiàn)事務(wù)統(tǒng)計(jì)的時(shí)間不準(zhǔn)確的情況,因?yàn)橐驗(yàn)榧宵c(diǎn)是要等所有用戶到達(dá)后統(tǒng)一去發(fā)起下一個(gè)請(qǐng)求,所以集合點(diǎn)中有一個(gè)等待的時(shí)間,暫停的時(shí)間是要統(tǒng)計(jì)到事務(wù)的時(shí)間中的,所以集合點(diǎn)不能放到事務(wù)里面要放到外面,這樣事務(wù)統(tǒng)計(jì)的時(shí)間才準(zhǔn)確。

模擬場(chǎng)景一:集合點(diǎn)放在事務(wù)里面,查看統(tǒng)計(jì)時(shí)間

image.png

每隔10秒會(huì)釋放5個(gè)用戶:


image.png

事務(wù)的響應(yīng)時(shí)間:


image.png

模擬場(chǎng)景二:集合點(diǎn)放在事務(wù)外面,查看統(tǒng)計(jì)時(shí)間

image.png

前5秒先運(yùn)行5個(gè)用戶,其他用戶等待狀態(tài):
image.png

到時(shí)間再釋放5個(gè)
image.png

全部釋放開(kāi)始運(yùn)行
image.png

事務(wù)響應(yīng)時(shí)間:
可見(jiàn)最大時(shí)間比上一個(gè)場(chǎng)景的時(shí)間小,最后一個(gè)運(yùn)行時(shí)間也變小了
image.png

模擬場(chǎng)景三:上兩個(gè)場(chǎng)景持續(xù)運(yùn)行時(shí)間太長(zhǎng),導(dǎo)致一些虛擬用戶迭代失敗,現(xiàn)在改成持續(xù)運(yùn)行3分鐘
可以看出后到集合點(diǎn)的用戶已用時(shí)間短:

image.png

了解場(chǎng)景中的集合

image.png

每隔10秒釋放5個(gè)用戶,在場(chǎng)景中設(shè)置當(dāng)運(yùn)行的用戶到達(dá)時(shí)就可以開(kāi)始發(fā)出請(qǐng)求


image.png

第一個(gè)選項(xiàng)是說(shuō)當(dāng)所有的虛擬用戶都到達(dá)時(shí)才發(fā)出請(qǐng)求,與設(shè)置的每隔10秒釋放5個(gè)用戶是有沖突的,這樣每隔10秒釋放5個(gè)用戶,釋放后用戶要等待,等待所有的用戶都被釋放后才發(fā)出請(qǐng)求


image.png

vuser之間的超時(shí)值設(shè)置為10秒,是說(shuō)當(dāng)選中第一個(gè)選項(xiàng)時(shí),在用戶還沒(méi)到達(dá)但是已經(jīng)超時(shí)了就不再等待用戶了,直接發(fā)出請(qǐng)求,這樣不浪費(fèi)時(shí)間


image.png

這個(gè)配置是說(shuō)當(dāng)有1個(gè)用戶到達(dá)時(shí)就發(fā)出請(qǐng)求:


image.png

一般使用默認(rèn)的配置就可以:


image.png

模擬場(chǎng)景四,設(shè)置等所有用戶到達(dá)時(shí)才發(fā)起請(qǐng)求

image.png

不太明顯。

函數(shù)總結(jié):
lr_output_message(lr_eval_string("{參數(shù)名稱}"))
打印結(jié)果是否獲取成功
web_reg_save_param_ex()關(guān)聯(lián)參數(shù)
web_reg_save_param()關(guān)聯(lián)函數(shù)
lr_paramarr_len("getitems")獲取數(shù)組的長(zhǎng)度
lr_paramarr_idx("getitems",i)根據(jù)下標(biāo)索引獲取數(shù)組中的數(shù)據(jù)
lr_paramarr_random("getitems")隨機(jī)獲取數(shù)組中的數(shù)據(jù)
sprintf(myurlstring,"{getitems_%d}",i); 是把"{getitems_%d}"的值賦值給myurlstring,myurlstring是char數(shù)組,必須用數(shù)組才行要不然會(huì)報(bào)錯(cuò)
lr_save_string(lr_paramarr_random("getitems"),"testurl");//lr_save_string(第一個(gè)參數(shù)是參數(shù)值,第二個(gè)參數(shù)是參數(shù)名稱可以隨意設(shè)置)
web_reg_find檢查點(diǎn)函數(shù),要放到請(qǐng)求之前
lr_log_message("要打印的日志內(nèi)容");
lr_get_attrib_string("在運(yùn)行時(shí)設(shè)置中其他屬性的參數(shù)名稱")
web_custom_request()發(fā)送自定義請(qǐng)求,與web_url,web_sumbit_data()一樣
web_add_header("content_type","application/json")增加請(qǐng)求頭,如果接口中需要在header中傳token,也可以用這個(gè)函數(shù)把token加到請(qǐng)求頭中,因?yàn)閠oken會(huì)隨著登錄的變化而變化,所以需要先使用關(guān)聯(lián)函數(shù)獲取到token然后再把token放到header中供下面的接口使用。
web_get_int_property(HTTP_INFO_RETURN_CODE)獲取上一個(gè)請(qǐng)求的返回碼,返回類(lèi)型是int,可以賦值給變量,用于判斷請(qǐng)求結(jié)果。
lr_load_dll("md5.dll");加載md5.dll 加密方法放到loadrunner的bin目錄下,直接引用dll,然后就可以直接用他里面的加密方法了。測(cè)試中也可能是其他的加密方法,可以找開(kāi)發(fā)要。
lr_convert_string_encoding()轉(zhuǎn)換字符類(lèi)型,下面會(huì)講解具體使用方法。
web_reg_save_param_xpath()接口返回內(nèi)容是xml時(shí)可以通過(guò)這個(gè)關(guān)聯(lián)函數(shù)獲取參數(shù),查詢路徑是xpath路徑
web_reg_save_param_xpath(
"ParamName=error_code",
"QueryString=/response/error_code",
SEARCH_FILTERS,
LAST);

事務(wù)相關(guān)函數(shù)
lr_start_transaction("testing");//開(kāi)始事務(wù)
timer=lr_start_timer();//開(kāi)始計(jì)算時(shí)間
//浪費(fèi)時(shí)間的代碼
time_elapsed=lr_end_timer(timer);//結(jié)束計(jì)算時(shí)間
lr_wasted_time(time_elapsed*1000);//從毫秒換算成秒后加入浪費(fèi)時(shí)間中
lr_end_transaction("testing", LR_AUTO);//結(jié)束事務(wù),事務(wù)會(huì)自動(dòng)減去浪費(fèi)時(shí)間

自定義事務(wù)狀態(tài)函數(shù):
lr_set_transaction_status_by_name(LR_FAIL,"protectcar");

補(bǔ)充函數(shù)總結(jié):
lr_get_attrib_string("在運(yùn)行時(shí)設(shè)置中其他屬性的參數(shù)名稱")

image.png

image.png

lr_continue_on_error(1);//出現(xiàn)錯(cuò)誤繼續(xù)執(zhí)行
//中間可以放要執(zhí)行的代碼
lr_continue_on_error(0);//出現(xiàn)錯(cuò)誤不繼續(xù)執(zhí)行,關(guān)閉開(kāi)關(guān),與運(yùn)行時(shí)設(shè)置的遇到錯(cuò)誤繼續(xù)執(zhí)行是一樣的。

web_get_int_property(HTTP_INFO_RETURN_CODE)獲取上一個(gè)請(qǐng)求的返回碼

image.png

web_add_header();
登錄成功后獲取token,下面其他的接口都需要在header中添加token,所以在下面所有的接口前增加web_add_header增加token。

image.png

lr_convert_string_encoding("A", NULL, LR_ENC_UTF8, "stringInUnicode");
參數(shù)分別是sourceString,fromEncoding,toEncoding ,paramName
fromEncoding和toEncoding有三種:LR_ENC_SYSTEM_LOCALE 、LR_ENC_UTF8 、LR_ENC_UNICODE
該函數(shù)返回0是轉(zhuǎn)換成功,返回-1是轉(zhuǎn)換失敗。
下圖中是把參數(shù)轉(zhuǎn)換字符類(lèi)型,打印結(jié)果后面會(huì)帶\x00

image.png

image.png

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一:LoadRunner常見(jiàn)問(wèn)題整理1.LR 腳本為空的解決方法:1.去掉ie設(shè)置中的第三方支持取消掉2.在系統(tǒng)屬...
    0100閱讀 4,641評(píng)論 0 11
  • 軟件測(cè)試教程 性能測(cè)試Loadrunner篇(二) 上節(jié)課主要講述了性能測(cè)試的基本知識(shí),現(xiàn)在開(kāi)始介紹性能測(cè)試工具L...
    zzulj閱讀 3,873評(píng)論 0 12
  • 一、概述 (win10+IE11+LR12.02 | 50個(gè)虛擬用戶并發(fā)目前不能破解) LoadRunner是一種...
    云層_閱讀 2,159評(píng)論 0 11
  • 本課程主要講解性能測(cè)試以及性能測(cè)試工具Loadrunner。 系統(tǒng)開(kāi)發(fā)完畢了,去做一下性能測(cè)試吧! 系統(tǒng)要驗(yàn)收了,...
    zzulj閱讀 8,463評(píng)論 0 14
  • 歸屬感,或稱隸屬感,指?jìng)€(gè)人自己感覺(jué)被別人或被團(tuán)體認(rèn)可與接納時(shí)的一種感受。心理學(xué)研究表明,每個(gè)人都害怕孤獨(dú)和寂寞,希...
    句E閱讀 1,186評(píng)論 1 2

友情鏈接更多精彩內(nèi)容