LoadRunner常用函數


前言

 LR腳本編寫是性能測試的第一步,而腳本是由各個函數組成,所以掌握LR常用函數是關鍵。
 LR腳本是否正確的驗證方法:
        1、回放過程中沒有報錯信息;
        2、回放結束后查看菜單View>Test Results記錄;
        3、是否實現系統業務,如新增數據。

常用函數詳解

1.web_url

函數說明:加載由URL參數指定的Web頁面(GET請求)的動作函數。
int web_url( const char *StepName, const char *url, , [EXTRARES, ,] LAST );
參數說明:

StepName:圖形腳本中步驟的標簽。也用作自動事務的事務名稱。

URL:要加載的網頁的URL(統一資源定位符)。

Listof Attributes:屬性列表。

EXTRARES:一個分界參數,指示下一個參數將是資源屬性列表。

Listof Resource Attributes:資源屬性列表。

LAST:指示參數列表結束的標記。

屬性列表支持的屬性說明:

URL:頁面地址。

Method:頁面的提交方式,POST、GET、PATCH、PUT等。

TargetFrame:當前鏈接或資源所在Frame的名稱。

EncType:編碼類型。此參數給出一個內容類型(Content-Type),指定其做為回放腳本時“Content-Type”請求頭的值,例如 “text/html”。

RecContentType:響應頭的內容類型。

Referer:當前頁面關聯的頁面。

Body(目前僅適用與web_custom_request函數):請求體。

RAW BODY(目前僅適用與web_custom_request函數):請求體是作為指針傳遞的,此指針指向一串數據。 二進制的請求體可以使用BodyBinary 屬性來發送(或者使用Body 屬性來傳遞,前提是必須設置”Binary=1” )。

BodyFilePath:作為請求體傳送的文件的路徑。它不能與下面的屬性一起使用:Body,或者其他Body屬性或Raw Body屬性包括BodyBinary,BodyUnicode,RAW_BODY_START或Binary=1。

Mode:兩種錄制級別HTML、HTTP。

HTML級別:在當前Web界面上錄制直觀的HTML動作。以一步步的web_url、web_link、web_image、web_submit_form來錄制這些動作。VuGen僅僅錄制返回HTML頁面的請求,不處理腳本和應用程序。
HTTP級別:VuGen把所有的請求錄制為web_url指令,不生成web_link、web_image、web_submit_form這些函數。這種方法更為靈活,但是生成的腳本不夠直觀。

UserAgent:用戶代理,它是一個HTTP頭的名字,用來標識應用程序,通常是瀏覽器,它呈現的是用戶和服務器的交互。

ContentEncoding:指定請求體的使用指定的方式(gzip或者deflate)進行編碼(例如,壓縮),相應的“Content-Encoding:” HTTP頭會和此請求一起發送。這個參數適用於web_custom_request和web_submit_data。

例子(訪問人員背審系統的鏈接):
web_url("rybs", //步驟名稱,網頁最后單詞
"URL=http://192.168.5.132:8083/rybs", //請求頁面地址
"TargetFrame=", //當前連接資源的frame名稱
"Resource=0", //url是否為資源,0不是,1是
"RecContentType=text/html", //內容類型
"Referer=", //當前頁面關聯的頁面
"Snapshot=t2.inf", //頁面快照名稱
"Mode=HTML", //錄制模式
EXTRARES,
"Url=http://192.168.2.56:9080/didsserver/css/dragon.css", "Referer=http://192.168.2.56:9080/didsserver/login?service=http%3A%2F%2F192.168.5.132%3A8083%2Frybs%2Flogin.do%3Fmethod%3DloginDids%26forwardUrl%3D%2Fmain.jsp&appId=350000000000003&loginName=&loginPage=&redirectUrl=http%3A%2F%2F192.168.5.132%3A8083%2Frybs%2F&forwardUrl=/main.jsp", ENDITEM,
"Url=http://192.168.2.56:9080/didsserver/images/dragon/loginBg_DIDS.jpg", "Referer=http://192.168.2.56:9080/didsserver/login?service=http%3A%2F%2F192.168.5.132%3A8083%2Frybs%2Flogin.do%3Fmethod%3DloginDids%26forwardUrl%3D%2Fmain.jsp&appId=350000000000003&loginName=&loginPage=&redirectUrl=http%3A%2F%2F192.168.5.132%3A8083%2Frybs%2F&forwardUrl=/main.jsp", ENDITEM,
LAST);

2. web_submit_data

函數說明:處理無狀態或者上下文無關的表單提交。只能發送POST類型的請求。
int web_submit_data( const char *StepName, const char *Action, , ITEMDATA, , [ EXTRARES, ,] LAST );
參數說明:
StepName:圖形腳本中步驟的標簽。也用作自動事務的事務名稱。
Action:提交數據時要執行的操作的HTTP地址。
List of Attributes:屬性列表。
ITEMDATA:在屬性和數據字段列表之間分隔的標記。
List of Data:用於定義表單提交的數據字段列表。
EXTRARES:一個分界參數,指示下一個參數將是資源屬性列表。
Listof Resource Attributes:資源屬性列表。
LAST:指示參數列表結束的標記。
例子(人員背審登錄請求):
web_submit_data("login", //步驟名稱,網頁最后單詞
"Action=http://192.168.2.56:9080/didsserver/login?service=http%3A%2F%2F192.168.5.132%3A8083%2Frybs%2Flogin.do%3Fmethod%3DloginDids%26forwardUrl%3D%2Fmain.jsp&appId=350000000000003&loginName=&loginPage=&redirectUrl=http%3A%2F%2F192.168.5.132%3A8083%2Frybs%2F&forwardUrl=/main.jsp", //提交地址
"Method=POST", //請求方式
"TargetFrame=", //當前連接資源的frame名稱
"RecContentType=text/html", //內容類型
"Referer=http://192.168.2.56:9080/didsserver/login?service=http%3A%2F%2F192.168.5.132%3A8083%2Frybs%2Flogin.do%3Fmethod%3DloginDids%26forwardUrl%3D%2Fmain.jsp&appId=350000000000003&loginName=&loginPage=&redirectUrl=http%3A%2F%2F192.168.5.132%3A8083%2Frybs%2F&forwardUrl=/main.jsp", //頁面地址
"Snapshot=t3.inf", //頁面快照名稱
"Mode=HTML",
ITEMDATA, //ITEMDATA之前為請求的地址和類型等,之后的為提交的表單數據。
"Name=username", "Value=admin_fj", ENDITEM,
"Name=password", "Value=000000", ENDITEM,
"Name=lt", "Value={lt}", ENDITEM,
"Name=_eventId", "Value=submit", ENDITEM,
"Name=x", "Value=12", ENDITEM,
"Name=y", "Value=19", ENDITEM,
EXTRARES,
"Url=http://192.168.5.132:8083/favicon.ico", "Referer=", ENDITEM,
LAST);

3. web_custom_request

函數說明:用於自定義http請求的“萬能”函數,具有web_link()、web_url()、web_submit_data()函數的功能,可以發送POST和GET類型的請求。
int web_custom_request( const char *RequestName, ,
[EXTRARES, ,] LAST );
參數說明:
RequestName:圖形腳本中步驟的標簽。也用作自動事務的事務名稱。

List of Attributes:屬性列表。
List of Attributes支持的屬性EncType:編碼類型。此參數給出一個內容類型(Content-Type),指定其做為回放腳本時“Content-Type”請求頭的值,例如“text/html”。
Web_custom_request函數不處理未編碼的請求體。請求體參數將會使用已經指定的編碼方式。因此,如果指定了不匹配HTTP請求體的“EncType”,會引發服務端的錯誤。通常我們建議不要手動修改錄制時的“EncType”值。
任何對於“EncType”的指定都會覆蓋web_add_[auto_]header函數指定的Content-Type。當指定了“EncType=”(空值)時,不會產生“Content-Type” 請求頭。當省略了“EncType”時,任何一個web_add_[auto_]header函數都會起作用。如果既沒有指定EncType也沒有web_add_[auto_]header函且“Method=POST”,
“application/x-www-form-urlencoded”會做為默認值來使用。其他情況下,不會產生Content-Type請求頭。

EXTRARES:一個分界參數,指示下一個參數將是資源屬性列表。
Listof Resource Attributes:資源屬性列表。
LAST:指示參數列表結束的標記。

例子(接口請求):
GET請求(公司微信博餅接口請求):
web_custom_request("web_custom_request",
"URL=http://bobing.dragonit.com.cn/activity/bobing/run2.php",
"Method=GET",
"Resource=0",
"Referer=",
"Mode=HTTP",
"Body=",
LAST);

POST請求:
//手寫腳本
web_custom_request("web_custom_request",
"URL=http://1.1.20.3:8080/ISS20/rest/api/main/", //頁面地址
"Method=POST",//頁面的提交方式
"Resource=0", //url是否為資源,0不是,1是
"Referer=",//當前頁面關聯的頁面
"Mode=HTTP",//請求方式
"Body=interfaceCode=SP_CTM_LOGIN&access_token=NEb3DUK4oobyL9FgcgVxUDcAdaPB2buv&busContsCode=&app=&pageCount=&ctmUsrKey=&verifyCode=&cookieKey=&pageSize=&domainName=3&newPwd=&oldPwd=&content=&authcode=&totalCount=&email=&pageNo=&clientIp=1.1.6.12&totalPage=&loginPwd=123456&mobile=&loginName=13720892693", //接口參數/參數值
LAST);

//錄制腳本
web_custom_request("SystemInfoPage.do_10",
"URL=http://192.168.5.110:8050/cat/common/SystemInfoPage.do",
"Method=POST",
"Resource=0",
"RecContentType=text/html",
"Referer=http://192.168.5.110:8050/cat/MenuPage.do",
"Snapshot=t316.inf",
"Mode=HTTP",
"EncType=application/x-www-form-urlencoded; charset=UTF-8",
"Body=__EventSource=doAjax&__EventParam=%7B%22method%22%3A%22loadBm%22%2C%22params%22%3A%5B%22BM_RQ%22%5D%7D",
LAST);
POST請求Json串發送
注意點:body中中文內容需轉換成UTF8,且json串中的雙引號前需加轉義字符
示例:
lr_convert_string_encoding("管理員",LR_ENC_SYSTEM_LOCALE,LR_ENC_UTF8,"users");
lr_convert_string_encoding("古麗扎爾·庫爾班",LR_ENC_SYSTEM_LOCALE,LR_ENC_UTF8,"xms");
lr_convert_string_encoding("性能測試",LR_ENC_SYSTEM_LOCALE,LR_ENC_UTF8,"resons");
lr_save_string(lr_eval_string("{xms}"),"xm");
lr_save_string(lr_eval_string("{users}"),"user");
lr_save_string(lr_eval_string("{resons}"),"reson");
web_custom_request("xxcx",
"URL=http://104.4.237.53:8888/pdn/service",
"Method=POST",
"TargetFrame=",
"Resource=0",
"RecContentType=application/json",//響應頭的內容類型
"Referer=",
"Mode=HTTP",
"EncType=application/json;charset=UTF-8",//編碼類型,“Content-Type”請求頭的值
"Body={"SenderId":"C11-10000001","ServiceId":"S11-10000006","AuthorizeInfo":"B48A-1EEF-164C-B4CA","EndUser":{"UserCardId":"000000000000000","UserName":"{user}","UserDept":"010000000000","CallReason":"{reson}"},"Method":"PageQuery","Params":{"Condition":"SFZH = '653100197610030022' AND XM = '{xm}'","RequiredItems":"CSDGJ,SWYY,ZJXY,JSYXM,HYLBS,JGXZ,QLBZDZMS,BYZK,XQDM,SHGX1LXFS,SYBXH,CSSJ,CSZMBH,QTZZXZ,SHGXREGX,MZ,SHGXR2SFZH,DYSBH,SQJCWHDM,D1HZ,QWDZ,SHGXR2XM,JLXDM,SWZMBH,JHRYXM,HKXZ,MQXM,SHGX2LXFS,SSXQ,WHCD,SHGXR1XM,CSDXZ,BDSJ,D5HZ,YDDH,KGBS,SYQK,SWSJ,QCSJ,LXDH,SJDM,CSRQ,XM,XB,D1QZ,D3HZ,D2HZ,CZSJ,SJJZDXZ,JZYY,CSZMQFDW,FWCS,JSDW,SHGXR1SFZH,HYQLBZ,JHREJHGX,HYZK,FWCQRSFHM,BYJYCS,D3QZ,SHGXRYGX,YILBXH,HJDXZ,JHREGMSFHM,POXM,FJDM,HH,HSLBS,JHSY,JSZH,ZY,JGSSXQ,QTZJBH,YALBXH,XX,MQGMSFHM,PCSDM,HSQLBZ,ZZMM,CSZQFRQ,YHZGX,BDYY,YX,CZRXM,FWCQRXM,FQGMSFHM,SFHSBS,CZDWMC,QLBSDZMS,CZDWDM,QTZJMC,CSDSSXQ,BZ,DZBH,XZJDDM,FWXZ,SHGXREZZ,SFZH,POGMSFHM,GLZT,JHRYJHGX,HYZH,CYM,HKLB,FCZBH,SHGXRYZZ,SG,D5,BDFW,D4,JHRYGMSFHM,JGGJ,XMPY,QTZJLX,JHREXM,ZYLB,QCYY,D2,D3,D1,SWZMQFDW,FQXM","OrderItems":{"XM":"asc"},"RowsPerPage":10,"PageNum":1,"InfoCodeMode":"1"}}",
LAST);

List of Attributes支持的屬性EncType
示例:
lr_save_string("53.1.49.62:8581","node_url");
lr_save_string("S90-34000035","vm_servce_id");
lr_save_string("C90-34000007","vm_sender_id");
//請求頭內容
web_add_header("content-type","application/json;charset=UTF-8");
web_add_header("service_id","{vm_servce_id}");
web_add_header("sender_id","{vm_sender_id}");
web_add_header("fingerprint","{"endUser":"bukx,350825198101012620,0100,001"}");
web_add_header("task_period","60");
lr_start_transaction("rest-sawp");
web_reg_save_param("status",
"LB="status":"",
"RB="",
LAST);
web_custom_request("rest-sawp",
"URL=http://{node_url}/GatewayMsg/rest/invoke?opt=%7B%22condition%22:%22ajbh%20=%27A3401001052005040001%27%22,%22requiredItems%22:%5B%22ajbh%22,%22ajmc%22,%22asjbh%22,%22bb%22,%22bmbh%22,%22bmmc%22,%22clzt%22,%22djr%22,%22djrbh%22,%22djrq%22,%22dw%22,%22dwbh%22,%22dwd_zjid%22,%22dwmc%22,%22ms%22,%22ryid%22,%22sawp%22,%22sawpbm%22,%22sawplxdm%22,%22sawplxmc%22,%22sawplyxtsm%22,%22sawpwjbz%22,%22sawpwjid%22,%22sawpwjm%22,%22sawpztdm%22,%22sawpztmc%22,%22sjid%22,%22sl%22,%22zjz%22%5D,%22sortItems%22:%5B%22djrq%22%5D,%22pageNum%22:%221%22,%22pageSize%22:%2210%22,%22infoCodeMode%22:%220%22%7D",
"Method=GET",
"RecContentType=text/xml"
"EncType=",
LAST);

if(strcmp(lr_eval_string("{status}"),"000") == 0)
{
    lr_end_transaction("rest-sawp", LR_PASS);
}
else
{
    lr_error_message("返回報文結果有誤,異常狀態代碼:%s",lr_eval_string("{status}"));
    lr_end_transaction("rest-sawp", LR_FAIL);
}

Options方法,跨域請求的預檢,需要向另外域名服務器發送OPTIONS請求,用以判斷實際發送的請求是否安全,該部分內容可注釋,通常出現這種情況時,某些請求的方式需要添加請求頭
// web_custom_request("user",
// "URL=http://192.168.5.106:6020/api/qb-qtda-xm/user",
// "Method=OPTIONS",
// "TargetFrame=",
// "Resource=0",
// "Referer=http://192.168.5.147:8585/",
// "Mode=HTML",
// LAST);

4. 事務函數 lr_start_transaction, lr_end_transaction

事務是記錄從客戶端到服務器端,服務器端返回到客戶端應答的時間,可以反映出一個操作所用的時間。
lr_start_transaction("事務名稱"):事務開始
lr_end_transaction("事務名稱","事務狀態"):事務結束,事務狀態LR_AUTO,LR_PASS,LR_FAIL,LR_STOP

5. 關聯函數 web_reg_save_param

關聯定義:在服務器所響應的內容中查找,得到相應的值,以變量的形式替換錄制時的靜態值,從而向服務器發出正確的請求,這種動態獲得服務器響應內容的方法被稱作關聯。
關聯核心原理:本質是:查找;從哪里查找:從響應中查找;如何查找:通過左右邊界查找;
雙引號需做轉義。
參數與關聯函數的區別:參數列表中的參數都是靜態參數。關聯函數保存的是動態參數。
web_reg開頭的都是放置請求前,預處理函數。
例子(獲取請求頭內容)
web_reg_save_param("authorization",
"LB=authorization: ",
"RB=\r\n", //回車換行的標識
"Search=Headers",
LAST);
查找的響應內容如下:

例子(人員背審動態獲取taskid):
web_reg_save_param("taskid",
"LB=data":"",
"RB=",",
“Search=Body”,
"ORD=ALL", //如果多個值ORD=1
LAST);
從下一個請求返回的內容中做關聯。

注意:當要保存的內容長度超出256字節時,報錯如下:
Error -26377: No match found for the requested parameter "userInfo". Check whether the requested boundaries exist in the response data. Also, if the data you want to save exceeds 256 bytes, use web_set_max_html_param_len to increase the parameter size

出現該報錯信息時,需要在關聯函數web_reg_save_param前面加入函數web_set_max_html_param_len設置參數字符串的最大長度
web_set_max_html_param_len
語法:
int web_set_max_html_param_len(const char * length);
說明:
設置可檢索並保存為參數的任何HTML字符串的最大長度
例子:
web_set_max_html_param_len("1024")

6.web_reg_find

為了使測試結果有效,則需要在腳本中加入檢查點。web_reg_find就是檢查點常用函數。
例子(ZDR登錄成功檢查點):
web_reg_find("Fail=NotFound",
"Search=Body",
"SaveCount=loginst",
"Text=河南重點人員動態管控系統",
LAST);
參數解釋: Search用來定義查找范圍,SaveCount定義查找計數變量名稱,該參數可以記錄在緩存中查找內容出現的次數,可以使用該值,來判斷要查找的內容是否被找到;
//判斷是否找到
if (atoi(lr_eval_string("{loginst}")) > 0){
lr_end_transaction("登錄", LR_PASS);}
else{
lr_end_transaction("登錄", LR_FAIL);
}

7.atoi

函數說明:把字符串轉換成整型數。
例子(將計數變量轉成整型以便進行數值判斷):
atoi(lr_eval_string("{loginst}")

8.lr_eval_string

函數說明:返回參數的值(從參數中取得對應的值,並且轉換為一個字符串)。
例子(返回計數變量參數的值):
lr_eval_string("{loginst}")

9.lr_save_string

函數說明:將指定字符串保存至參數。
int lr_save_string( const char *param_value, const char *param_name);
例子({n}是一個隨機的參數值,通過隨機的參數值組合成uuid值,保存到參數uuid供使用):
lr_save_string(lr_eval_string("{n}{n}{n}{n}{n}{n}{n}{n}{n}{n}{n}{n}{n}{n}{n}{n}{n}{n}{n}{n}{n}{n}{n}{n}{n}{n}{n}{n}{n}{n}{n}{n}"),"uuid");

10.lr_convert_string_encoding

函數說明:字符串編碼轉換。
lr_convert_string_encoding(const char *sourceString, const char *fromEncoding,const char *toEncoding, const char *paramName);
sourceString:被轉換的源字符串。
fromEncoding:轉換前的字符編碼。
toEncoding:要轉換成為的字符編碼。
paramName:轉換后的目標字符串。
例子(將從服務器返回的內容(例:單位名稱)從編碼UTF-8轉成系統編碼,以便進行識別查看):
lr_convert_string_encoding( lr_eval_string("{deptName}"),LR_ENC_UTF8,LR_ENC_SYSTEM_LOCALE,"dept" );

lr_convert_string_encoding(lr_eval_string("{deptName}"),"utf-8",NULL,"dept");
轉碼多出\x00(空格),通過 lr_save_string(lr_eval_string("{gkmjxmUtf}"),"gkmjxmUtf8"); 可去掉該多余內容

LR日志亂碼轉換:
lr_convert_string_encoding("緋葷粺寮傚父錛欳",LR_ENC_UTF8 ,LR_ENC_SYSTEM_LOCALE, "UnicodeString");
lr_error_message("123ErrMsg:%s",lr_eval_string("{UnicodeString}"));

11.字符串處理函數

【strcmp】
函數說明:比較字符串是否相等
int strcmp( const char *string1, const char *string2 );
示例1(中秋博餅檢查點判斷):
//比較輸出字符串
int result;
result = strcmp(lr_eval_string("{status}"),"true");
//字符串相等則通過
if(result==0){
lr_output_message(lr_eval_string("{status}"));
lr_end_transaction("BoBing", LR_PASS);
}else{
lr_end_transaction("BoBing", LR_FAIL);
}
示例2(接口返回報文狀態碼校驗)
if(strcmp(lr_eval_string("{code}"),"000") == 0)
{
lr_end_transaction("數據比對", LR_PASS);
}
else
{
lr_error_message("返回報文結果有誤,異常狀態代碼:%s",lr_eval_string("{code}"));
lr_end_transaction("數據比對", LR_FAIL);
}

【strcat】
函數說明:連接2個字符串
char *strcat( char *to, const char *from );
例子:
char msgtest[1024]="導入名單共";
strcat(msgtest,“3人”);
最終效果:msgtest變量值=“導入名單共3人”

【strcpy】
將一個字符串復制到另一塊空間地址中的函數。
char* strcpy(char* destination,const char* source);
示例:
char cUrl[100];
char *str="李";
strcpy(cUrl,urlEncDebug(str));

12.消息輸出函數

【lr_message】
int lr_message (const char *format, exp1, exp2,...expn.);
中文解釋:lr_message函數將信息發送到日志文件和輸入窗口。在VuGen中運行時,輸入文件為output.txt。
【lr_log_message】
int lr_log_message (const char *format, exp1, exp2,...expn.);
中文解釋:lr_log_message函數將消息發送到Vuser或代理日志文件(取決於應用程序),而不是發送到輸出窗口。通過向日志文件發送錯誤消息或其他信息性消息,可以將該函數用於調試。
【lr_error_message】
int lr_error_message (const char *format, exp1, exp2,...expn. );
中文解釋:lr_error_message函數將錯誤消息發送到輸出窗口和Vuser日志文件。要發送不是特定錯誤消息的特殊通知,請使用lr_output_message。
【lr_output_message】
int lr_output_message (const char *format, exp1, exp2,...expn.);
中文解釋:lr_output_message函數將帶有腳本部分的行號的消息發送到輸出窗口和日志文件。
【lr_vuser_status_message】
int lr_vuser_status_message (const char *format);
中文解釋:lr_vuser_status_message函數向控制器或優化模塊控制台的vuser窗口的“狀態”區域發送字符串。它還將該字符串發送到vuser日志。從VuGen運行時,消息被發送到output.txt。

lr_vuser_status_message("正在請求首頁");

13.集合點函數

lr_rendezvous("rdz");//放在事務開始之前

14.web_concurrent_start、int web_concurrent_end

web_concurrent_start
語法:
int web_concurrent_start ( [char * ConcurrentGroupName,] NULL );
參數:
ConcurrentGroupName:可選的,並發組的標識符。
NULL:參數列表結束的標記符。
int web_concurrent_end
語法:
 int web_concurrent_end ( reserved );
參數:
 reserved:保留的供擴展的字段。
返回值
整型。返回LR_PASS (0)表示成功,返回LR_FAIL (1)表示失敗。
說明
 web_concurrent_start函數是並發組開始的標記。組中所有的函數是並發執行的。web_concurrent_end函數是並發組結束的標記。腳本執行時,碰到 web_concurrent_end函數時,開始並發執行所有記錄的函數。
在並發組中,可以包含的函數有:web_url、web_submit_data、web_custom_request、web_create_html_param、web_create_html_param_ex、web_reg_save_param、web_add_header。
在並發組中的函數不是立即執行的。在並發組開始時,所有的函數首先被記錄下來,當並發組結束時,所有的函數並發執行。
所有的Web 用戶,HTTP模式下的WAP用戶持本函數。運行在Wireless Session Protocol(WSP)回放模式下的WAP虛擬用戶,不支持本函數。

int web_concurrent_end
語法:
 int web_concurrent_end ( reserved );
參數:
 reserved:保留的供擴展的字段。
返回值
 整型。返回LR_PASS (0)表示成功,返回LR_FAIL (1)表示失敗。
說明
 web_concurrent_end,並發組結束的標記。腳本執行時,碰到 web_concurrent_end函數時,開始並發執行所有記錄的函數。
在並發組中的函數不是立即執行的。在並發組開始時,所有的函數首先被記錄下來,當並發組結束時,所有的函數並發執行。

15.URL編碼函數 web_convert_param

語法:
int web_convert_param( const char *ParamName, [char *SourceString] char *SourceEncoding, char *TargetEncoding, LAST );
參數:

說明:
參數轉碼為url編碼
例子(url地址編碼,紅色字體為url編碼,假設要對url地址進行參數化,則參數化后需要進行url編碼再發送):
http://192.168.7.121:9080/didsserver/login?service=http%3A%2F%2F192.168.160.7%3A1010%2Ftdas_xj%2Findex.html&appId=010000000000011&loginPage=dragonQQFW2LoginView_prm.jsp&forwardUrl=/tdas_xj/index.html&isReturn=true)
使用fiddler工具進行轉碼,操作如下:

腳本:
lr_save_string("http://192.168.160.7:1010/tdas_xj/","url");
lr_convert_string_encoding(lr_eval_string("{url}"),LR_ENC_SYSTEM_LOCALE, LR_ENC_UTF8 , "urlcode");
web_convert_param("urlcode", "SourceEncoding=PLAIN", "TargetEncoding=URL",LAST );

16.lr_save_var截取任意字符串長度

lr_save_var(token+272,36,0,"the_token");//截取token值,token的起始位置272,token值長度36

17.web_add_auto_header 自動在每個請求上添加請求頭

web_add_auto_header("Authorization", "{authorization}");
web_add_auto_header("app_key", "appId");
異步請求頭:
web_add_auto_header("x-requested-with","XMLHttpRequest");

18.web_add_header添加請求頭

web_add_header("content-type","application/json;charset=UTF-8");

19.flex_amf_call flex協議請求函數

flex_amf_call("AMF3_call_5",
"Gateway=http://192.168.23.230:9080/dids/messagebroker/amf",
"Snapshot=t52.inf",
"ResponseParameter=resultXml",
MESSAGE,
"Method=null",
"TargetObjectId=/7",
BEGIN_ARGUMENTS,
" "
"<flex.messaging.messages.RemotingMessage>\n flexService<"
"/destination>\n A03DDE4F-ECAE-FEBB-4FEF-70B51DFF1166</"
"messageId>\n 0 \n 0 \n"
" \n \n DSEndpoint \n "
" my-amf \n
\n \n DSId"
"
\n BF27F9CF-5F1C-ED7E-0405-6B21C35B5E42</string"
">\n
\n
\n run \n "
" \n <flex.messaging.io.amf.ASObject serialization=""
"custom">\n \n \n "
" \n 0.75 \n "
" 12 \n
\n 16 \n"
" 8 \n USER_PWD \n <null"
"/>\n orgId \n <string"
">00000000000000000000000000000001\n Method</"
"string>\n findManAll \n <string"
">pageStart
\n 1 \n manArgs</"
"string>\n <flex.messaging.io.amf.ASObject serialization=""
"custom">\n \n \n "
" \n 0.75 \n "
" 12 \n
\n "
" 16 \n 3 \n findType<"
"/string>\n 1 \n ManVo</"
"string>\n <flex.messaging.io.amf.ASObject serialization=""
"custom">\n \n <map"
">\n \n 0.75</"
"loadFactor>\n 12 \n "
"
\n 16 \n 3<"
"/int>\n policeNo \n "
" \n idcard \n "
" \n name \n "
" {name} \n
\n "
" <flex.messaging.io.amf.ASObject>\n \n "
" false \n "
" false \n
\n "
" </flex.messaging.io.amf.ASObject>\n </"
"flex.messaging.io.amf.ASObject>\n rightScope</"
"string>\n 00000000000000000000000000000001</string"
">\n
\n <flex.messaging.io.amf.ASObject>\n "
" \n false \n "
" false \n
\n "
" </flex.messaging.io.amf.ASObject>\n </"
"flex.messaging.io.amf.ASObject>\n beanId \n "
" manAction \n USER_NO \n "
" admin \n rightCode \n "
" \n \n "
"<flex.messaging.io.amf.ASObject>\n \n "
" false \n false</"
"inToString>\n
\n </"
"flex.messaging.io.amf.ASObject>\n </flex.messaging.io.amf.ASObject"
">\n
\n</flex.messaging.messages.RemotingMessage></"
"object-externalizable-custom>
",
END_ARGUMENTS,
LAST);

//獲取總條數
lr_xml_get_values("XML={resultXml}",
"FastQuery=/AMFPacket/Messages/Message/AMF3/object-externalizable-custom/flex.messaging.messages.AcknowledgeMessageExt/flex.messaging.io.amf.ASObject/map/com.dragonsoft.commons.dao.ResultSet/total",
"ValueParam=total",
LAST);

20. lr_xml_get_values xml格式數據獲取

int NumOfValues;
int i;
char buf[1000];
NumOfValues=lr_xml_get_values("XML={SEARCHresult}",
"Query=/AMFPacket/Messages/Message/AMF3/object-externalizable-custom/flex.messaging.messages.AcknowledgeMessageExt/flex.messaging.io.amf.ASObject/map/com.dragonsoft.commons.dao.ResultSet/rs/object-array/com.dragonsoft.dids.manager.flexservice.action.org.ManVo/idcard",
"ValueParam=ParamValueidcard",
"SelectAll=yes", //返回多個值時使用,默認是no,返回第一個值
LAST);
//從所有值里面隨機取一個值
i=rand()%NumOfValues;
sprintf (buf, "{ParamValueidcard_%d}", i);
lr_output_message(lr_eval_string(buf));

21.web_service_call webservice協議請求函數

web_service_call( "StepName=query_103",
"SOAPMethod=CommonCallServiceImplService|commonCall|query",
"ResponseParam=response",
"Service=CommonCallServiceImplService",
"URL=http://192.168.23.203:8080/service/services/commonCall",
"ExpectedResponse=SoapResult",
"Snapshot=t1572403092.inf",
BEGIN_ARGUMENTS,
"opt={"ServiceID":"model","first":"{sheng}","second":"大慶市"}",
END_ARGUMENTS,
BEGIN_RESULT,
END_RESULT,
LAST);

請求服務
web_service_call( "StepName=PageQuery_102",
"SOAPMethod=SjcxWebServiceService|RequestService|PageQuery",
"ResponseParam=response",
"Service=SjcxWebServiceService",
"ExpectedResponse=SoapResult",
"Snapshot=t1543314317.inf",
BEGIN_ARGUMENTS,
"SenderID=C00-10002281",
// "SenderID=C00-10000241",
"ServiceID=S10-10006150",
"xml:EndUser="
" "
" ptjian 1234567 010000000000 7654321 "
"
",
"DataObjectCode=C001",
"Condition=HPHM = '川S87177'",
"xml:RequiredItems="
" "
"
",
"InfoCodeMode=",
"RowsPerPage=50",
"PageNum=1",
END_ARGUMENTS,
BEGIN_RESULT,
END_RESULT,
LAST);

22.lr_paramarr_random 從關聯參數中隨機取值

//link為返回的所有參數值,通過關聯獲取
lr_paramarr_random(link)

23.web_set_max_html_param_len("1024");

24.lr_save_datetime("%Y%m%d%H%M%S",DATE_NOW,"timenow");

uuid設置A-Z 0-9拼裝

lr_save_string(lr_eval_string("{n}{n}{n}{n}{n}{n}{n}{n}{n}{n}{n}{n}{n}{n}{n}{n}{n}{n}{n}{n}{n}{n}{n}{n}{n}{n}{n}{n}{n}{n}{n}{n}"),"uuid");

25、web_get_int_property獲取返回數據大小

使用函數web_get_int_property,判斷圖片大小,圖片大小是body+header 判斷大於800bytes即可

i = web_get_int_property(HTTP_INFO_DOWNLOAD_SIZE);
lr_output_message("The download size of the URL was: %d",i);
if(i > 10000)
{ lr_end_transaction("DownloadUrL", LR_PASS); }
else { lr_end_transaction("DownloadUrL", LR_FAIL); }

腳本編寫注意點

1.變量放置位置需要放置在最前面,否則會報錯

如下圖所示:

2.有些場景請求雖然已發送完成,但實際上后台任務並未完成,這時需要自己手動加入一些判斷條件

例子:
上傳采集,請求已完成,但是后台的入庫並未完全完成,需要增加判斷條件
如下圖所示(加入do while判斷):


免責聲明!

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



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