最近在做HTTP协议接口压测时,遇到一些编写脚本方面的问题,在这里总结记录下,以便以后温习,也希望能帮助到和我有同样困惑的朋友吧。
//实战代码如下所示:
Action()
{
lr_start_transaction("事物"); // 断言内容:processcode":"0000","processdes:"处理成功" web_reg_save_param("processcode",
"NotFound=warning",
"LB=processcode\":\"",
"RB=\",\"processdes",
"Ord=1",
"Search=Body",
LAST); web_reg_save_param("processdes",
"NotFound=warning",
"LB=processdes\":\"",
"RB=\",\"checkresult",
"Ord=1",
"Search=Body",
LAST); //接口1:发送指定key:value参数的json报文
web_submit_data("request",
"Action=http://IP:port/sss/idCardCheck11",
"Method=POST",
"Mode=HTTP",
"RecContentType=application/json",
ITEMDATA,
"Name=msgbody", "Value={\"app_sign\":\"287cca63e9316c031\",\"businesscode\":\"05\","
"\"note\":\"\",\"brnchcd\":\"4001\",\"b64pic\":\"\",\"inputtype\":\"11\",\"teller\":\"2666\","
"\"idcardno\":\"139891119211X\",\"name\":\"user\",\"wthrespic\":\"1\",\"app_id\":null,"
"\"bankcode\":\"31100396\",\"timestamp\":\"1536118078193\"}", ENDITEM,
LAST);
//接口2:发送json格式报文
web_custom_request("request",
"Url=http://IP:port/sss/idCardCheck11",
"Method=POST",
"Mode=HTTP",
"EncType=application/json",
"RecContentType=application/json",
"Body={\"app_sign\":\"287cca63e9316c031\",\"businesscode\":\"05\",\"note\":\"\",\"brnchcd\":\"4001\","
"\"b64pic\":\"\",\"inputtype\":\"11\",\"teller\":\"2666\",\"idcardno\":\"139891119211X\","\"name\":"
"\"user\",\"wthrespic\":\"1\",\"app_id\":null,\"bankcode\":\"31100396\",\"timestamp\":\"1536118078193\"}",
LAST);
//响应报文key值和预期结果比较,如果等于0则请求处理成功
if(strcmp(lr_eval_string("{processcode}"),"") == ){
lr_end_transaction("事物", LR_PASS); }else{
lr_end_transaction("事物", LR_FAIL);
//事物失败后打印processdes字段的值,也就是错误信息,但是LR打印出来的中文出现乱码,所以这里做了转码的操作
lr_convert_string_encoding(lr_eval_string("{processdes}"),LR_ENC_UTF8,LR_ENC_SYSTEM_LOCALE,"resultMsg");
//解码后返回单笔核对请求处理成功
lr_error_message("错误信息:%s",lr_eval_string("{resultMsg}")); } // lr_end_transaction("事物",LR_AUTO); return ;
}
以下是web_submit_data()函数 API示例代码:
从示例可以看到发送的是name,value对,提交表单的形式,但实际Value值也可能存在json数组,xml等形式。
// web_submit_data() API示例
web_submit_data("default.aspx",
"Action=http://lazarus/flightnet/default.aspx",
"Method=POST",
"TargetFrame=",
"RecContentType=text/html",
"Referer=http://lazarus/flightnet/",
"Snapshot=t7.inf",
"Mode=HTML",
ITEMDATA,
"Name=grpType", "Value=radRoundtrip", ENDITEM,
"Name=lstDepartingCity", "Value=DEN", ENDITEM,
"Name=lstDestinationCity", "Value=LAX", ENDITEM,
"Name=btnAvailableFlights", "Value=Next >", ENDITEM,
LAST );
接口请求报文如下:
msgbody:{app_sign:287cca63e9316c031,businesscode:,note:,brnchcd:,b64pic:,inputtype:,teller:,idcardno:139891119211X,name:user,wthrespic:,app_id:null,bankcode:,timestamp:}
问题描述:
往常使用LR编写处理HTTP接口脚本,惯用的函数是web自定义请求函数 web_custom_request(),使用接口测试工具postman请求成功后就直接编写脚本,尝试了几种组body的方法均返回请求方法格式出错或者直接请求失败,尝试请求方法如下所示:
web_custom_request("request",
"Url=http://10.148.0.161:1111/check/idCardCheck",
"Method=POST",
"Mode=HTTP",
"EncType=application/json",
"RecContentType=application/json",
"Body={msgbody:{\"app_sign\":\"287cca63e9316c031\",\"businesscode\":\"05\",\"note\":\"\",\"brnchcd\":\"4001\","
"\"b64pic\":\"\",\"inputtype\":\"11\",\"teller\":\"2666\",\"idcardno\":\"139891119211X\","\"name\":"
"\"user\",\"wthrespic\":\"1\",\"app_id\":null,\"bankcode\":\"31100396\",\"timestamp\":\"1536118078193\"}}",
LAST); web_custom_request("request",
"Url=http://10.148.0.161:1111/check/idCardCheck",
"Method=POST",
"Mode=HTTP",
"EncType=application/json",
"RecContentType=application/json",
"Body={\"msgbody\":{\"app_sign\":\"287cca63e9316c031\",\"businesscode\":\"05\",\"note\":\"\",\"brnchcd\":\"4001\","
"\"b64pic\":\"\",\"inputtype\":\"11\",\"teller\":\"2666\",\"idcardno\":\"139891119211X\","\"name\":"
"\"user\",\"wthrespic\":\"1\",\"app_id\":null,\"bankcode\":\"31100396\",\"timestamp\":\"1536118078193\"}}",
LAST); web_custom_request("request",
"Url=http://10.148.0.161:1111/check/idCardCheck",
"Method=POST",
"Mode=HTTP",
"EncType=application/json",
"RecContentType=application/json",
"Body=msgbody:{\"app_sign\":\"287cca63e9316c031\",\"businesscode\":\"05\",\"note\":\"\",\"brnchcd\":\"4001\","
"\"b64pic\":\"\",\"inputtype\":\"11\",\"teller\":\"2666\",\"idcardno\":\"139891119211X\","\"name\":"
"\"user\",\"wthrespic\":\"1\",\"app_id\":null,\"bankcode\":\"31100396\",\"timestamp\":\"1536118078193\"}",
LAST);
结论:如果提供的报文是key:value格式的就使用web_submit_data()函数,反之可选择使用web_custom_request()函数,如以上内容表述或总结后期会不断完善。