come from: http://blog.sina.com.cn/s/blog_6cf205160100mdxi.html
昨天在参数化的过程中遇到了中文乱码问题。经过一天的查阅资料在公司李工和“我爱测试”群中点姐的帮助下,顺利搞定这个问题。下面总结一下,分享之。能帮助别人解决问题固然大善,没人看留着自已总结经验也是好的。
1、 问题的出现:
昨天录制了系统的新建客户功能。录制完后发现脚本中从界面上输入的中文都是乱码,当时没有在意,自顾自的参数化之然后回放脚本,OK脚本回放成功。然后查询数据库发现数据没有想预期一样插入数据库中。郁闷ing!!!
2、 问题分析
想起点姐的一句话,脚本回放的result是pass并不一定是真的回放成功。于是开始调试脚本。
首先要添加调试点,定位问题。
分析过程:脚本共分为一下三大块-------登录,新建客户,查询出新建客户。
于是添加文本调试信息,登录成功会进入首页,在首页信息中选择一个字段做标记。方法如下:
同理为新建用户添加文本检查点。
然后开启文本检查功能。这个功能默认是不开启的,应为它也是消耗系统资源的。开启的方法是:
OK!运行脚本!
果然报错,根据文本检查点来看,登录是没有问题的,但是新建失败了,但是传参没有问题。然后我将参数的中文换成英文,没有报错运行成功。于是我感觉到脚本录制的没有问题,问题出在参数上。然后去查看oracle的日志。擦!问题找到了,原来loadrnner传给数据库的参数是乱码,无法写入oracle数据库。问题找到了,让我解决它。
1、 问题的解决:
既然问题是传给数据库的是乱码,那么我们把传给数据库的参数转化成正确的字符集就OK了。又是一番查找帮助文档。找到了lr的自带转换函数。
函数如下:
int lr_convert_string_encoding ( const char *sourceString, const char *fromEncoding, const char *toEncoding, const char *paramName);
函数中有4个参数:
SourceString :源字符串。就是本来的字符串
fromEncoding: 从哪个字符集转化。
toEncoding : 到哪个字符集。
ParamName:参数名
OK!,开始转化吧。转化的思路是:
正常的字符--------通过转化函数换成乱码------通过loadrunner出去后又变成了正常的字符。
下面就用我的脚本为例:
我要转化的是客户地址custaddress,我给它赋值:郑州大学(我的母校)。废话不多说直接看代码:
lr_convert_string_encoding( lr_eval_string("{custaddress}"),
LR_ENC_SYSTEM_LOCALE, LR_ENC_UTF8, "str" );
web_custom_request("CustService_7",
"URL=http://134.224.106.122:11001/CrmWeb/nfapp/buffalo/CustService?replyType=vo&fields=",
"Method=POST",
"Resource=0",
"RecContentType=text/xml",
"Referer=http://134.224.106.122:11001/CrmWeb/business/core/setCust.html",
"Snapshot=t38.inf",
"Mode=HTML",
"EncType=",
"Body=
"
"
"
"cust_address\n"
"{str}\n"
"",
LAST);
lr_log_message("地址参数化结果str:%s", lr_eval_string("{str}"));
lr_log_message("地址参数化结果custadress:%s", lr_eval_string("{custaddress}"));
然后编译脚本,再次运行。我们先来看replay log:
Action.c(1161): Notify: Parameter Substitution: parameter "str" = "閮戝窞澶у\x00"
地址参数化结果str:閮戝窞澶у
Action.c(1162): Notify: Parameter Substitution: parameter "custaddress" = "郑州大学"
地址参数化结果custadress:郑州大学
我们分析一下:
1、 我们先来看我的参数化内容:
2、分析日志输出:
我把custaddress参数化也可以理解为赋值”郑州大学”,然后通过转化函数str得到了转化后的的值”閮戝窞澶у”,然后它把这个值用loadrunner传向数据库,然后数据库就可以得到正确的值”郑州大学”。
3、 查表验证: