LoadRunner字符编码转换
LoadRunner进行脚本开发时,经常会出现请求中包含中文或特殊符号(+、=等)导致请求失败,或者响应报文中包含中文,输出响应报文乱码的情况,出现类似情况,可通过LR字符串编码转换函数lr_convert_string_encoding,将字符串转换为需要的编码方式;下面介绍LR字符转编码转换函数和长江的编码转换处理;
lr_convert_string_encoding( const char *sourceString, const char *fromEncoding,const char *toEncoding, const char *paramName); #sourceString:被转换的源字符串。 #fromEncoding:转换前的字符编码。 #toEncoding:要转换成为的字符编码。 #paramName:转换后的目标字符串。
字符编码方式:
编码方式 | 编码值 |
---|---|
LR_ENC_SYSTEM_LOCALE | NULL |
LR_ENC_UTF8 | "utf-8" |
UR_ENC_UNICODE | "ucs-2" |
在url请求消息中,请求参数包含中文或特殊符号,不能被正确识别,需要进行url编码;
url编码前,请求url内容:http://203.3.227.214:9080/request/auth/getUserToken?auth=01234128&mobile=yzk7kd+fsjj==
url编码后,请求url内容:http://203.3.227.214:9080/request/auth/getUserToken?auth=01234128&mobile=yzk7kd%2Bfsjj%3D%3D
将特殊符号+号和=号进行了编码处理;
url编码操作包含3步:
1)调用lr_convert_string_encoding函数,将mobile参数内容由LR本身的无编码格式转换为UTF-8编码格式;该参数包含的字符串有字符串结束标识符NULL;
2)调用lr_save_string函数,将转换后字符串的NULL标识符去掉;
3)调用web_convert_param函数,将参数编码类型由PLAIN类型转换为URL类型;
代码如下:
//将包含中文或特殊字符的字符串保存到参数mobile中,然后将mobile参数编码转换为UTF8,保存到name1参数中 lr_convert_string_encoding(lr_eval_string("{mobile}"),LR_ENC_SYSTEM_LOCALE,LR_ENC_UTF8,"name1"); //将name1参数字符串结尾标识符去掉,保存到变量param1中 lr_save_string(lr_eval_string("{name1}"),"param1"); //将param1编码类型由PLAIN转换为URL类型 web_convert_param("param1","SourceEncoding=PLAIN","TargetEncoding=URL",LAST); //通过{param1}调用编码后的参数 web_customer_request("request", "URL=http://203.3.227.214:9080/request/auth/getUserToken?auth=01234128&mobile={param1}", "Method=POST", "Body=", LAST);
3、响应报文乱码转码
http请求报错,响应报文中中文显示乱码,为了方便定位问题,需要将响应报文中文进行转码,使其能够正常显示;
响应报文乱码转码分为2步:
1)调用web_reg_save_param函数,将响应报文保存到参数中;
2)调用lr_convert_string_encoding函数,将参数由UTF-8编码转换为LR编码(LR_ENC_SYSTEM_LOCALE);
代码如下:
//获取响应报文 web_reg_save_param("response", "LB=", "RB=", LAST); //调用http请求 web_customer_request("request", "URL=http://203.3.227.214:9080/request/auth/getUserToken?auth=01234128&mobile={param1}", "Method=POST", "Body=", LAST); //响应报文中文转码(UTF8转换为LR本地编码LR_ENC_SYSTEM_LOCAL) lr_convert_string_encoding(lr_eval_string("{response}"), "LR_ENC_UTF8", "LR_ENC_SYSTEM_LOCALE", "str"); //输出转换后的响应内容 lr_error_message("response:%s",lr_eval_string("{str}"));