在使用Loadrunner录制或者回放脚本的时候有时候会出现乱码的情况,来看看怎么解决这种情况,以及UTF-8及GBK字符编码的定义是什么。
1 录制的脚本出现乱码
录制的时候出现乱码,有的时候可以正常回放,我们可以不用管它,但如果影响回放,我们可以使用以下方法解决:
1)更改录制选项
选择菜单栏 Tools-->Recording Options
勾选Advance页面中的“Support Charset”和“UTF-8”两项。
2)更改web服务器端的字符编码
更改服务器端使用的字符编码,使其与本地使用字符编码一致,例如改为“gb2312”。
2 回放脚本时出现乱码
LoadRunner回放脚本时,如果在日志中出现乱码,可以按以下方法操作:
1)更改运行时设置:
点击菜单栏中的Vuser,选择Run-time Settings(或者直接按F4键):
在弹出的窗口左侧点击Internet Protocol Preference下的Advanced,然后在右侧窗口中点击Options按钮,在弹出的窗体中找到General下的Convert from/to UTF-8,将其设为Yes。
2)更改IE浏览器设置:
打开IE浏览器,在页面-->编码-->勾选“自动选择”和“Unicode(UTF-8)”。
3)使用函数转换编码:
可以使用lr_convert_string_encoding函数来转换编码。
lr_convert_string_encoding( const char *sourceString, const char *fromEncoding,const char *toEncoding, const char *paramName);
lr_convert_string_encoding converts a string encoding betweenthe following encodings: System locale, Unicode, and UTF-8.
LR_ENC_SYSTEM_LOCALE | NULL |
LR_ENC_UTF8 | "utf-8" |
LR_ENC_UNICODE | "ucs-2" |
下面是一个使用的例子:
Action()
{
int compare=1;
web_reg_save_param("payRespBody",
"LB=",
"RB=",
"NotFound=ERROR",
"Search=Body",
LAST);
web_reg_save_param("responseMsg",
"LB=responseMsg\":\"",
"RB=\",",
"NotFound=ERROR",
"Search=All",
LAST);
web_custom_request("pay.htm",
"URL=http://xxx/a/b/pay.htm?x={orderId}&pwd=x",
"Method=POST",
"TargetFrame=",
"Resource=0",
"RecContentType=application/json",
"Referer=",
"Mode=HTML",
"EncType=application/x-www-form-urlencoded; charset=UTF-8",
LAST);
lr_convert_string_encoding(lr_eval_string("{responseMsg}"),"utf-8",NULL,"msg");//将返回消息responseMsg值做编码转换
lr_output_message("转换编码前payRespBody----%s",lr_eval_string("{payRespBody}"));
lr_convert_string_encoding(lr_eval_string("{payRespBody}"),"utf-8",NULL,"bodymsg"); <pre name="code" class="cpp"> //将返回消息的body做编码转换
compare=strcmp(lr_eval_string("{msg}"),"支付成功");//将编码转换后的responseMsg值与可识别的中文做比较,判断事务成功或失败
if(compare==0){
lr_end_transaction("3--支付",LR_PASS);
}
else{
lr_end_transaction("3--支付",LR_FAIL);
lr_output_message("支付失败orderId:----%s,responseMsg----%s",lr_eval_string("{orderId}"),lr_eval_string("{msg}"));//打印转换编码后的返回
lr_output_message("转换编码后payRespBody----%s",lr_eval_string("{bodymsg}"));//打印转换编码后的返回,便于定位问题
}
return 0;
}
3 字符编码介绍
UTF-8:Unicode TransformationFormat-8bit,允许含BOM,但通常不含BOM。是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24为(三个字节)来编码。UTF-8包含全世界所有国家需要用到的字符,是国际编码,通用性强。UTF-8编码的文字可以在各国支持UTF8字符集的浏览器上显示。如,如果是UTF8编码,则在外国人的英文IE上也能显示中文,他们无需下载IE的中文语言支持包。
GBK:是国家标准GB2312基础上扩容后兼容GB2312的标准。GBK的文字编码是用双字节来表示的,即不论中、英文字符均使用双字节来表示,为了区分中文,将其最高位都设定成1。GBK包含全部中文字符,是国家编码,通用性比UTF8差,不过UTF8占用的数据库比GBD大。
GBK、GB2312等与UTF8之间都必须通过Unicode编码才能相互转换:
GBK、GB2312-Unicode-UTF8
UTF8-Unicode-GBK、GB2312
END