时隔2年,我又回来了~

【转】LoadRunner参数化时的中文乱码问题

上一篇 / 下一篇  2011-10-19 10:03:19 / 个人分类:LoadRunner

转自:http://blog.sina.com.cn/s/blog_6cf205160100mdxi.html
 

昨天在参数化的过程中遇到了中文乱码问题。经过一天的查阅资料在公司李工和“我爱测试”群中点姐的帮助下,顺利搞定这个问题。下面总结一下,分享之。能帮助别人解决问题固然大善,没人看留着自已总结经验也是好的。

1、 问题的出现:

昨天录制了系统的新建客户功能。录制完后发现脚本中从界面上输入的中文都是乱码,当时没有在意,自顾自的参数化之然后回放脚本,OK脚本回放成功。然后查询数据库发现数据没有想预期一样插入数据库中。郁闷ing!!!

2、 问题分析

想起点姐的一句话,脚本回放的result是pass并不一定是真的回放成功。于是开始调试脚本。

首先要添加调试点,定位问题。

分析过程:脚本共分为一下三大块-------登录,新建客户,查询出新建客户。

于是添加文本调试信息,登录成功会进入首页,在首页信息中选择一个字段做标记。方法如下:

 LoadRunner参数化时的中文乱码问题

同理为新建用户添加文本检查点。

     然后开启文本检查功能。这个功能默认是不开启的,应为它也是消耗系统资源的。开启的方法是:

LoadRunner参数化时的中文乱码问题

为了能跑完整个脚本,开启即使有错误依然运行功能:

LoadRunner参数化时的中文乱码问题

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,我给它赋值:郑州大学(我的母校LoadRunner参数化时的中文乱码问题)。废话不多说直接看代码:

 

      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=<buffalo-call>\n"

           "<method>insertCust</method>\n"

           "<m>\n"

           "<t>java.util.HashMap</t>\n"

           

           "<s>cust_address</s>\n"

           "<s>{str}</s>\n"

           "</buffalo-call>",

           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、 我们先来看我的参数化内容:

LoadRunner参数化时的中文乱码问题

   2、分析日志输出:

     我把custaddress参数化也可以理解为赋值”郑州大学”,然后通过转化函数str得到了转化后的的值”閮戝窞澶у”,然后它把这个值用loadrunner传向数据库,然后数据库就可以得到正确的值”郑州大学”。

3、 查表验证:

LoadRunner参数化时的中文乱码问题

 

     哇哈哈,成功插入。中文乱码写表问题宣布解决。

     解决问题的成就感总是让人很满足,吼吼!!!LoadRunner参数化时的中文乱码问题


TAG:

 

评分:0

我来说两句

Open Toolbar