7、LoadRunner回放脚本时,在浏览器显示的中文是乱码

最近,遇到了好多乱码的问题,解决了一些,还有最后一个乱码,能想到的各种办法都试过了,还是不行,很奇怪啊。

解决这些乱码时,涉及到了http头数据,不是很了解。

第一个乱码:

操作返回的提示信息:操作成功、失败原因,这样的信息返回到页面乱码。最后找到的原因是:返回的ContentType格式不是“text/html”,手动设置response的ContentType类型,页面可以正常显示。

第二个乱码:

下载excel时,部分页面可以正常下载,部分页面无法保存excel,在页面显示一堆乱码,经过对比,发现无法下载的页面,是dwr封装的ajax请求,该请求的返回数据也是经过了一层封装,因此,换了一种提交方式。

第三个乱码:

get提交,url中文参数乱码,这个貌似是最常见的了,但是,基本上能查到的解决方案,都试过了,结果仍然乱码呢!最后,终于找到了一篇可行的文章,需要经过两次转码:

url="……?userName="+encodeURI(encodeURI(userName));

当时调这三种情况的乱码时,是有很多感触的,包括检索方式、问题定位等。这篇文章写的是有点概括性,好吧,就算是给自己留纪念了

解决办法(1):

首先设置Run-Time Settings – Browser – Browser Emulation – User-Agent

解决办法:

使用lr_convert_string_encoding函数来转换编码

下面是一个使用的例子:

lr_convert_string_encoding(lr_eval_string("{ReplyContents}"),LR_ENC_SYSTEM_LOCALE,LR_ENC_UTF8,"ReplyMessage");

web_submit_data("postreply.aspx_2",

"Action=http://127.0.0.1/postreply.aspx?infloat=1&topicid=2&&inajax=1",

"Method=POST",

"EncType=multipart/form-data",

"RecContentType=text/xml",

"Referer=http://127.0.0.1/showtopic-2.aspx",

"Snapshot=t9.inf",

"Mode=HTML",

ITEMDATA,

"Name=iconid", "Value=0", ENDITEM,

"Name=title", "Value=", ENDITEM,

"Name=wysiwyg", "Value=0", ENDITEM,

"Name=checkbox", "Value=0", ENDITEM,

"Name=message", "Value=[localimg=180,112]1[/localimg]\r\n\r\n{ReplyMessage}", ENDITEM,

"Name=e_mediatyperadio", "Value=on", ENDITEM,

"Name=sl_attachdesc", "Value=", ENDITEM,

"Name=attachid", "Value=", ENDITEM,

"Name=attachdesc", "Value=", ENDITEM,

"Name=localid", "Value=", ENDITEM,

"Name=attachdesc", "Value=", ENDITEM,

"Name=localid", "Value=1", ENDITEM,

"Name=attachdesc", "Value=", ENDITEM,

"Name=localid", "Value=2", ENDITEM,

"Name=emailnotify", "Value=on", ENDITEM,

"Name=postreplynotice", "Value=on", ENDITEM,

"Name=postfile", "Value=", "File=Yes", ENDITEM,

"Name=postfile", "Value=D:\\\\图片收集\\\\It's about time.JPG", "File=Yes", ENDITEM,

"Name=postfile", "Value=", "File=Yes", ENDITEM,

"Name=uploadallowmax", "Value=10", ENDITEM,

"Name=uploadallowtype", "Value=jpg,gif", ENDITEM,

"Name=thumbwidth", "Value=300", ENDITEM,

"Name=thumbheight", "Value=250", ENDITEM,

"Name=noinsert", "Value=0", ENDITEM,

LAST);

实例2:

在LoadRunner中,为我们提供了一个字符串编码转换的函数

lr_convert_string_encoding ( const char *sourceString, const char *fromEncoding, const char *toEncoding, const char *paramName);

该函数有4个参数,含义如下:

sourceString:被转换的源字符串。

fromEncoding:转换前的字符编码。

toEncoding:要转换成为的字符编码。

paramName:转换后的目标字符串。

    在本例中可以看到,我们需要把字符编码转换为UTF-8格式,因此用法如下:

    lr_convert_string_encoding("汽车",LR_ENC_SYSTEM_LOCALE,LR_ENC_UTF8,"str");

    这样一来,就成功地完成了字符串的编码转换。此时我们就可以对"汽车"这个参数进行参数化,参数化的方法很简单,地球人都知道!于是最终的脚本编码看起来像这样:

   lr_convert_string_encoding("lr_eval_string("{name}"),LR_ENC_SYSTEM_LOCALE,LR_ENC_UTF8,"str")

由于url不能传输汉字,所以程序要把汉字转换一下,lr怎么参数化呢

看下面的列子

web_url("0.00",
"URL=http://192.168.0.15/xxx/xxx/xxx.aspx?HotelName=%e5%8c%97%e4%ba%ac%e5%8d%8e%e5%87%af%e5%ae%be%e9%a6%86",
"Resource=0",
"RecContentType=text/html",
"Referer=http://192.168.0.15/xxx/xxx/xxx.aspx?hotelid=00101210&hotelname=%e5%8c%97%e4%ba%ac%e5%8d%8e%e5%87%af%e5%ae%be%e9%a6%86",
"Snapshot=t41.inf",
"Mode=HTTP",
LAST); 注意黑体字,被转化了的汉字,使用如下函数 定义两个变量 char temp;
char hotelname[4096]; lr_convert_string_encoding(lr_eval_string("{hotel_name}"),LR_ENC_SYSTEM_LOCALE, LR_ENC_UTF8 ,"temp"); 转化完的字符放到了temp里, strcat(hotelname,lr_eval_string ( "{temp}" )); web_url("0.00",
"URL=http://192.168.0.15/xxx/xxx/xxx.aspx?HotelName={hotelname}",
"Resource=0",
"RecContentType=text/html",
"Referer=http://192.168.0.15/xxx/xxx/xxx.aspx?hotelid=00101210&hotelname=%e5%8c%97%e4%ba%ac%e5%8d%8e%e5%87%af%e5%ae%be%e9%a6%86",
"Snapshot=t41.inf",
"Mode=HTTP",
LAST);

  

在录制选项中,“HTTP属性-高级”中选择支持字符集,UTF-8 此时如果在web_submit_data中有中文,在脚本查看中能正确显示为中文,而不是乱码。 此时web_url中仍会显示为url(注意不是乱码)编码。

其实url编码就是一个字符ascii码的十六进制 如 “胡”的ascii码是-17670,十六进制是BAFA,url编码是“%BA%FA” UTF-8是一种可变长度字符编码,用在网页上可以同一页面显示中文简体繁体及其它语言(如英文,日文,韩文),如“中国”:中国 “HTTP属性-高级”中选择支持字符集选择UTF-8的意义在于将UTF-8 符转换为您所在语言环境的计算机编码,因而能正确显示在屏幕上

常用函数解释:

lr_output_message 输出消息

lr_output_message ("hello,world");

strcpy  复制一个字符串到另外一个字符串
 char tmp[50];
 strcpy(tmp,"hello,world");
 lr_output_message ("%s",tmp);
注意,char tmp[50]变量定义要放在action的最开始,否则会报错

web_url("search.aspx",
//"URL=http://192.168.20.60:8080/zk/search.aspx?key=U%3D%E4%B8%AD",
"URL=http://192.168.20.60:8080/zk/search.aspx?key=U%3D{skey}",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t86.inf",
"Mode=HTML",
EXTRARES,
"Url=../images/search-left-bg.gif", "Referer=http://192.168.20.60:8080/zk/search.aspx?key=U%3D%E4%B8%AD%E5%9B%BD%E9%87%8E%E7%94%9F%E8%B5%84%E6%BA%90", ENDITEM,
"Url=../images/bg.png", "Referer=http://192.168.20.60:8080/zk/search.aspx?key=U%3D%E4%B8%AD%E5%9B%BD%E9%87%8E%E7%94%9F%E8%B5%84%E6%BA%90", ENDITEM,
"Url=../images/cluster-pic.png", "Referer=http://192.168.20.60:8080/zk/search.aspx?key=U%3D%E4%B8%AD%E5%9B%BD%E9%87%8E%E7%94%9F%E8%B5%84%E6%BA%90", ENDITEM,
"Url=../images/search-select-current.png", "Referer=http://192.168.20.60:8080/zk/search.aspx?key=U%3D%E4%B8%AD%E5%9B%BD%E9%87%8E%E7%94%9F%E8%B5%84%E6%BA%90", ENDITEM,
"Url=../images/search-select-bg.png", "Referer=http://192.168.20.60:8080/zk/search.aspx?key=U%3D%E4%B8%AD%E5%9B%BD%E9%87%8E%E7%94%9F%E8%B5%84%E6%BA%90", ENDITEM,

  

HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理
因此这部分的参数服务器可能是不会处理的,比如次例中,gif和png都是静态文件,因此后免的Referer中的key不用做参数替换
本例中,需要对key=U%3D%E4%B8%AD 参数化,其中U%3D表示U=,这部分不变,需要参数话的是%E4%B8%AD,即“中”,参数名为skey

上例中,由于需要参数化%E4%B8%AD的是一个url编码,一般来说参数化文件是一个汉字的列表,所以需要如下面的处理
Action()
{

  //此时skey是一个汉字列表的参数,把它转换为utf-8,存入UnicodeString参数中
    lr_convert_string_encoding(lr_eval_string("{skey}"),LR_ENC_SYSTEM_LOCALE,LR_ENC_UTF8,"UnicodeString");

 //把UnicodeString参数的值又覆盖回skey参数,前2步相当于完成了skey参数的汉字到utf-8的转换
    lr_save_string (lr_eval_string("{UnicodeString}"),"skey" );

//这一步把skey参数从utf-8又转换到url编码  
    web_convert_param("skey", "SourceEncoding=PLAIN", "TargetEncoding=URL", LAST );        
    lr_output_message("Url编码 = %s",lr_eval_string("{skey}"));

 web_url("search.aspx",

      "URL=http://qikan.cqvip.com/zk/search.aspx?key=U%3D{skey}",
       "Resource=0",
       "RecContentType=text/html",
       "Referer=",
       "Snapshot=t39.inf",
       "Mode=HTML",
       EXTRARES,

"Url=../images/bg.png", "Referer=http://qikan.cqvip.com/zk/search.aspx?key=U%3D%E4%B8%AD%E5%9B%BD", ENDITEM,
  "Url=../images/search-left-bg.gif", "Referer=http://qikan.cqvip.com/zk/search.aspx?key=U%3D%E4%B8%AD%E5%9B%BD", ENDITEM,
  "Url=../images/search-select-bg.png", "Referer=http://qikan.cqvip.com/zk/search.aspx?key=U%3D%E4%B8%AD%E5%9B%BD", ENDITEM,
  "Url=../images/search-select-current.png", "Referer=http://qikan.cqvip.com/zk/search.aspx?key=U%3D%E4%B8%AD%E5%9B%BD", ENDITEM,
  "Url=../images/cluster-name-bg.png", "Referer=http://qikan.cqvip.com/zk/search.aspx?key=U%3D%E4%B8%AD%E5%9B%BD", ENDITEM,
  "Url=../images/cluster-group-show.gif", "Referer=http://qikan.cqvip.com/zk/search.aspx?key=U%3D%E4%B8%AD%E5%9B%BD", ENDITEM,
  "Url=../images/close-op.png", "Referer=http://qikan.cqvip.com/zk/search.aspx?key=U%3D%E4%B8%AD%E5%9B%BD", ENDITEM,
  "Url=../images/cluster-pic.png", "Referer=http://qikan.cqvip.com/zk/search.aspx?key=U%3D%E4%B8%AD%E5%9B%BD", ENDITEM,
  "Url=../images/type-ico-id.png", "Referer=http://qikan.cqvip.com/zk/search.aspx?key=U%3D%E4%B8%AD%E5%9B%BD", ENDITEM,
  "Url=../ajax/stateview.ashx?info=Ozs7MDs7L33NlYaC5&_t=1415241852", "Referer=http://qikan.cqvip.com/zk/search.aspx?key=U%3D%E4%B8%AD%E5%9B%BD", ENDITEM,
  LAST);

return 0;
}

Action()
{
lr_convert_string_encoding(lr_eval_string("{skey}"),LR_ENC_SYSTEM_LOCALE,LR_ENC_UTF8,"UnicodeString"); //此时skey是一个汉字列表的参数,把它转换为utf-8,存入UnicodeString参数中
lr_save_string (lr_eval_string("{UnicodeString}"),"skey" ); //把UnicodeString参数的值又覆盖回skey参数,前2步相当于完成了skey参数的汉字到utf-8的转换
web_convert_param("skey", "SourceEncoding=PLAIN", "TargetEncoding=URL", LAST ); //这一步把skey参数从utf-8又转换到url编码
lr_output_message("Url编码 = %s",lr_eval_string("{skey}")); web_url("search.aspx",
"URL=http://qikan.cqvip.com/zk/search.aspx?key=U%3D{skey}",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t39.inf",
"Mode=HTML",
EXTRARES,
"Url=../images/bg.png", "Referer=http://qikan.cqvip.com/zk/search.aspx?key=U%3D%E4%B8%AD%E5%9B%BD", ENDITEM,
"Url=../images/search-left-bg.gif", "Referer=http://qikan.cqvip.com/zk/search.aspx?key=U%3D%E4%B8%AD%E5%9B%BD", ENDITEM,
"Url=../images/search-select-bg.png", "Referer=http://qikan.cqvip.com/zk/search.aspx?key=U%3D%E4%B8%AD%E5%9B%BD", ENDITEM,
"Url=../images/search-select-current.png", "Referer=http://qikan.cqvip.com/zk/search.aspx?key=U%3D%E4%B8%AD%E5%9B%BD", ENDITEM,
"Url=../images/cluster-name-bg.png", "Referer=http://qikan.cqvip.com/zk/search.aspx?key=U%3D%E4%B8%AD%E5%9B%BD", ENDITEM,
"Url=../images/cluster-group-show.gif", "Referer=http://qikan.cqvip.com/zk/search.aspx?key=U%3D%E4%B8%AD%E5%9B%BD", ENDITEM,
"Url=../images/close-op.png", "Referer=http://qikan.cqvip.com/zk/search.aspx?key=U%3D%E4%B8%AD%E5%9B%BD", ENDITEM,
"Url=../images/cluster-pic.png", "Referer=http://qikan.cqvip.com/zk/search.aspx?key=U%3D%E4%B8%AD%E5%9B%BD", ENDITEM,
"Url=../images/type-ico-id.png", "Referer=http://qikan.cqvip.com/zk/search.aspx?key=U%3D%E4%B8%AD%E5%9B%BD", ENDITEM,
"Url=../ajax/stateview.ashx?info=Ozs7MDs7L3prL3NlYXJjaC5hc3B4&_t=1415241852916", "Referer=http://qikan.cqvip.com/zk/search.aspx?key=U%3D%E4%B8%AD%E5%9B%BD", ENDITEM,
LAST); return 0;
}

  

lr_convert_string_encoding 字符串编码转换的函数
int lr_convert_string_encoding ( const char *sourceString, const char *fromEncoding, const char *toEncoding, const char *paramName);
该函数有4个参数,含义如下:
sourceString:被转换的源字符串。
fromEncoding:转换前的字符编码。
toEncoding:要转换成为的字符编码。
paramName:转换后的目标字符串。
例如:
 lr_convert_string_encoding("中",LR_ENC_SYSTEM_LOCALE,LR_ENC_UTF8,"UnicodeString");  
 //把汉字"中"转化为utf-8的格式,输出为名字UnicodeString参数,注意,这是一个lr参数,而不是C变量
 lr_save_string (lr_eval_string("{UnicodeString}"),"skey" );  
 //1、其中skey为前例web_url中被参数化的参数名,由于这是一个参数,所以需要用lr_save_string来为参数赋值;不能直接用=号赋值
    2、由于UnicodeString是一个lr参数,不能直接作为字符串来赋值,需要用lr_eval_string来取得参数的值

lr_eval_string
lr_eval_string("{参数名}")
取得参数的数值。可取得已注册参数或DataFile类型参数的数值    eval就是evaluation的缩写
注意和lr_save_string的入参形式的区别,这里的参数名需要用{}括起来

lr_save_string
lr_save_string(“字符串变量”,"参数名")
将字符变量里的值传递给指定参数。通过该函数来改变DataFile类型参数的数值。该函数还会自动去掉字符串的“\x00”后缀

web_convert_param  可用于文本的url编解码
int web_convert_param( const char *ParamName, [char *SourceString] char *SourceEncoding, char *TargetEncoding, LAST );

ParamName 需要输入一个lr参数名,参数名对应的参数值值会被转换编码,然后覆盖原参数值
SourceString  需要转换的文本内容,注意该参数是可选项,如果传了,则会把该值转换编码后传入第一个参数;如果不传,则第一个参数本身对应的参数值会转换编码后覆盖原参数值
SourceEncoding  源数据的编码格式,有3个选项"SourceEncoding=HTML"、"SourceEncoding=URL"、"SourceEncoding=PLAIN" 
TargetEncoding  源数据的编码格式,有3个选项"SourceEncoding=HTML"、"SourceEncoding=URL"、"SourceEncoding=PLAIN"
LAST  参数结束的标志

例如:
web_convert_param("skey", "SourceEncoding=PLAIN", "TargetEncoding=URL", LAST );    //其中skey是一个lr参数名
该例子把参数skey中的原来的值url编码后,覆盖了原skey参数
lr_output_message("Url编码 = %s",lr_eval_string("{skey}"));

HTML和PLAIN的区别,在http的相应头信息中,Content-Type字段可能有text/html和text/plain两种取值:
如果是html,浏览器在获取到这种文本时会自动调用html的解析器对文件进行相应的处理
如果是plain,意思是纯文本的形式,浏览器在获取到这种文件时并不会对其进行处理

项目中运用:

input()
{ lr_convert_string_encoding(lr_eval_string("{gardenname}"),LR_ENC_SYSTEM_LOCALE,LR_ENC_UTF8,"UnicodeString"); //此时gardenname是一个汉字列表的参数,把它转换为utf-8,存入UnicodeString参数中 lr_save_string (lr_eval_string("{UnicodeString}"),"gardenname" ); //把UnicodeString参数的值又覆盖回gardenname参数,前2步相当于完成了gardenname参数的汉字到utf-8的转换 web_convert_param("gardenname", "SourceEncoding=PLAIN", "TargetEncoding=URL", LAST ); //这一步把gardenname参数从utf-8又转换到url编码 lr_output_message("Url编码=%s",lr_eval_string("{gardenname}")); lr_convert_string_encoding(lr_eval_string("{gardenid}"),LR_ENC_SYSTEM_LOCALE,LR_ENC_UTF8,"UnicodeString"); //此时gardenid是一个汉字列表的参数,把它转换为utf-8,存入UnicodeString参数中 lr_save_string (lr_eval_string("{UnicodeString}"),"gardenid" ); //把UnicodeString参数的值又覆盖回gardenid参数,前2步相当于完成了gardenid参数的汉字到utf-8的转换 web_convert_param("gardenid", "SourceEncoding=PLAIN", "TargetEncoding=URL", LAST ); //这一步把gardenid参数从utf-8又转换到url编码 lr_output_message("Url编码=%s",lr_eval_string("{gardenid}")); web_url("sort-asc.png",
"URL=http://192.168.0.42/resource/Erp_Affiliate/plugin/ingrid/images/sort-asc.png",
"Resource=1",
"RecContentType=image/png",
"Referer=http://0755.testqfang242.com/qfang-broker/house/search",
"Snapshot=t24.inf",
LAST); web_custom_request("queryGarden",
"URL=http://0755.testqfang242.com/qfang-broker/house/search/dictionary/queryGarden",
"Method=POST",
"Resource=0",
"RecContentType=application/json",
"Referer=http://0755.testqfang242.com/qfang-broker/house/search",
"Snapshot=t25.inf",
"Mode=HTML",
"Body=key={gardenname}&orgid={orgid}&longNumber={longnumber}&sqlId=com.qfang.dao.dictionary.GardenDao.getGardenByParams&type=ztree",
LAST); web_custom_request("queryGarden_2",
"URL=http://0755.testqfang242.com/qfang-broker/house/search/dictionary/queryGarden",
"Method=POST",
"Resource=0",
"RecContentType=application/json",
"Referer=http://0755.testqfang242.com/qfang-broker/house/search",
"Snapshot=t26.inf",
"Mode=HTML",
"Body=key={gardenname}&orgid={orgid}&longNumber={longnumber}&sqlId=com.qfang.dao.dictionary.GardenDao.getGardenByParams&type=ztree",
EXTRARES,
LAST); web_custom_request("getBuildingsByGardens",
"URL=http://0755.testqfang242.com/qfang-broker/house/search/getBuildingsByGardens",
"Method=POST",
"Resource=0",
"RecContentType=application/json",
"Referer=http://0755.testqfang242.com/qfang-broker/house/search",
"Snapshot=t26.inf",
"Mode=HTML",
"Body=gardenIds='{gardenid}'",
LAST);

 lr_output_message("success:用户登录成功,楼盘id:%s",lr_eval_string("{gardenid}"));  lr_output_message("success:用户登录成功,楼盘名称:%s",lr_eval_string("{gardenname}"));

return 0;
}

 

从数据库获取的原始变量值,有中文,需要转换

经常碰到在脚本中有输入值是中文,或者返回值中的中文是乱码的问题,今天就抽空把这个问题解决了。

主要使用到的方法是LR自带的lr_convert_string_encoding函数。废话少说,下面是小实验。看懂这个,就知道怎么处理中文乱码问题了。

1、输入值中有中文

Action()
{
//输入值中有中文 char tmp[50]; lr_convert_string_encoding( lr_eval_string("环球影院"),
LR_ENC_SYSTEM_LOCALE,
LR_ENC_UTF8,
"str" ); lr_log_message("11str is %s",lr_eval_string("{str}")); /*
直接转换过来的内容后面,多了\x00,要通过strcpy函数复制到别的变量后再用,才不受\x00的影响。
*/ strcpy(tmp,lr_eval_string("{str}")); //lr_log_message("str is %s",tmp); lr_save_string(tmp,"sorvalue");
lr_log_message("str is %s",lr_eval_string("{sorvalue}")); return 0;
}

  

2、返回值中有中文

Action()
{
// 返回值中有中文 lr_convert_string_encoding(
lr_eval_string("鐧戒簯鏈哄満"),
LR_ENC_UTF8,
LR_ENC_SYSTEM_LOCALE,
"strcn" ); lr_log_message("乱码对应的中文是 %s",lr_eval_string("{strcn}")); return 0;
}

  

LR录制时,经常会出现中文乱码现象

原因是页面编码和LR设置的录制编码不匹配

Tools  --  Recording Options  --  Advanced

里面有一个  Support charset  是用来设置录制时使用的编码

(Recording Options注意:此设置只有设置后再录制才有效,录制完了再去改没有任何的意义)

当设置UTF-8时,页面如果是GB2312等,不同的编码,或者相反,即会造成乱码。

如何去查看页面是什么编码?

1 查看页面源代码 查找 charset (更准确的编码在http response header中 Content-Type)

2 IE打开页面后,菜单查看 – 编码 – 看浏览器自动选择的是哪一项

如果还没有遇到需要对乱码中文进行参数化,或者没有对中文进行验证结果,那么是可以忽略的,乱码只是因为脚本中不同导致显示乱码,发出去服务器还是收到正确的,网络流和文件流一样,只认16进制的字节码。

接下来是如何去解决此问题(已录制完不想重新录制,或者Recording Options怎么改都没用的情况)

打开在保存脚本的目录中有一个叫 default.cfg 的配置文件,内容是INI格式的

如果你是录制的脚本,在这个配置文件的[WEB]节点中,可以找到 UTF8InputOutput

录制时的charset如果是UTF-8,那么这个参数为1,没有选择则为0

1代表为UTF8,  0代表为ANSI,ANSI基本和GBXXX编码相同

当然也有情况没有 UTF8InputOutput ,这说明脚本不是录制的没有生成相关配置,可自加

此配置修改后,发送和接收的编码都会变化

测试方式,打开扩展日志,Runtimesettings – Log – Extened log – Data returned byserver

例如百度(UTF8页面),没有选择UTF-8,此时录制完成后,UTF8InputOutput=0

运行脚本,会看到下方输出里面内容中文是乱码,修改UTF8InputOutput 为1 后,中文正常显示

简易测试代码:

web_url("test",

"URL=http://www.baidu.com/home/xman/data/superload?type=weather&_req_seqid=0xa4908d280003ff2d&asyn=1&t=1420474523457&sid=1449_10491_10874_10496_10752_10923_10219_7477_10355_10442_9950_10619",

"Mode=HTTP",

LAST);

当然此配置修改变更后,如果脚本原来含乱码中文的地方,也需要手动改为正常显示的中文,否则发出去就真的是乱码了

以下是附加内容:

注:此修改方式只在 web_submit_data、web_submit_form、web_custom_request等一些请求中POST ITEMDATA参数中有效,但如果是web_url的URL属性或者web_submit_data的Action属性中(即提交的目标链接),LR对中文只会是认为ANSI,不会是UTF-8

此问题有2种解决方案:(链接一般不会有中文,基本不用考虑。只有很特殊的情况)

1 LR脚本中使用代码进行转换再拼接 lr_convert_string_encoding

2 http://www.baidu.com/?aa={NewParam}, 因为参数文件都是ANSI的,系统默认生成的文件,将文件另存为UTF-8格式(但在参数表格里会是乱码)

web_convert_param 函数在baidu.com搜索测试上的使用

用html方式录制baidu.com,比如查询”linux技巧”,则在runtime-viewer看到查询关键词并非”linux技巧”。

改用url 模式录制,代码如后:

web_url("s",            "URL=http://www.baidu.com/s?wd=linux%BC%BC%C7%C9&cl=3",

"Resource=0",

"RecContentType=text/html",

"Referer=http://www.baidu.com/",

"Snapshot=t4.inf",

"Mode=HTTP",

LAST);

web_url("c.gif",

"URL=http://c.baidu.com/c.gif?t=0&q=linux%BC%BC%C7%C9",

"Resource=0",

"RecContentType=text/html",            "Referer=http://www.baidu.com/s?wd=linux%BC%BC%C7%C9&cl=3",

"Mode=HTTP",

LAST);

回放出错,经ethreal截包,确有:http 204错误。

Action.c(28): Error -26563: Non-empty response body is invalid with HTTP Status Code 204 (No Content) for "http://c.baidu.com/c.gif?t=0&q=linux%BC%BC%C7%C9"     [MsgId: MERR-26563]

Action.c(28): t=1560ms: 1-byte response body for "http://c.baidu.com/c.gif?t=0&q=linux%BC%BC%C7%C9" (RelFrameId=1)

Action.c(28):     \x00

Action.c(28): Warning -26652: Response body length (1) does not match the Content-Length header specification (0) for "http://c.baidu.com/c.gif?t=0&q=linux%BC%BC%C7%C9"       [MsgId: MWAR-26652]

Action.c(28): web_url("c.gif") highest severity level was "ERROR", 1 body bytes, 112 header bytes         [MsgId: MMSG-26388]。

为了参数化以及更正错误,正确的代码如后:

web_convert_param("encoderesult", "SourceString={keyword}","SourceEncoding=HTML",

        "TargetEncoding=URL", LAST);

lr_log_message("encode=%s",lr_eval_string("{encoderesult}"));

web_url("s",

"URL=http://www.baidu.com/s?wd={encoderesult}&cl=3",

"Resource=0",

"RecContentType=text/html",

"Referer=http://www.baidu.com/",

"Snapshot=t4.inf",

"Mode=HTTP",

LAST);

      lr_continue_on_error(LR_ON_ERROR_CONTINUE );

web_url("c.gif",

"URL=http://c.baidu.com/c.gif?t=0&q=linux%BC%BC%C7%C9",

"Resource=0",

"RecContentType=text/html",            "Referer=http://www.baidu.com/s?wd=linux%BC%BC%C7%C9&cl=3",

"Mode=HTTP",

LAST);

 
引用 删除 atmosphere162   /   2014-02-18 17:25:31
万分感谢,这个问题困扰我很久了,终于解决了
引用 删除 liangjz   /   2008-06-02 13:49:23
呵呵,这个编码格式有1年多了,现在是否这样,需要判断下http 编码格式
引用 删除 wzw1982   /   2008-06-02 02:40:54
就是不使用  lr_continue_on_error(LR_ON_ERROR_CONTINUE )  不明白按照这种录制模式请求web_url("c.gif", 会报错
引用 删除 wzw1982   /   2008-06-02 02:30:07
按照楼主的做法 把%BC%BC%C7%C9全部替换成{encoderesult}还是会报204错 经过这个函数转换后技巧这两个字最后应该还是以%BC%BC%C7%C9发送到服务器端的 这个204错误不知道怎么解决 但是这函数可以解决参数话的问题
 
 

loadrunner乱码问题解决办法的更多相关文章

  1. ASP+Access UTF-8 网页乱码问题解决办法

    用ACCESS数据库和ASP做网站时用UTF-8编码有时会出现乱码,再者网页出错或者刷新页面后就是乱码,如果数据库取值乱码在开头加上<%@LANGUAGE="VBSCRIPT" ...

  2. openerp 7.0邮件接收中文附件乱码问题解决办法

    openerp 7.0邮件接收中文附件乱码问题解决办法: 修改文件\addons\mail\mail_thread.py #1064 line插入代码: h=email.Header.Header(n ...

  3. 关于jFinal开发中遇到的中文乱码问题解决办法

    关于jFinal开发中遇到的中文乱码问题解决办法 设置tomcat的编码,修改 <Connector port="8080" protocol="HTTP/1.1& ...

  4. zabbix图形乱码问题解决办法

    zabbix中的图形乱码的问题解决办法: 1.下载字体,例如:simkai.ttf楷体(注:在windows中的字体格式可能是TTC的,所以去网上下载一个ttf的字体) 2.上传到linux中(我使用 ...

  5. Servlet中文乱码问题解决办法

    首先对于源jsp网站和servlet里面的字符集要一样,一般支持中文的字符集为UTF-8最好采用这个字符集(除此之外还有gb2312); 对于源jsp文件的代码中需要设置 设置你的page里面的字符集 ...

  6. PuTTY乱码问题解决办法

    原文链接:http://www.henshiyong.com/archives/403.html 使用PuTTY 时,遇到了乱码问题,查看了别人介绍的信息,解决掉了. 方法其实很简单,现在分享出来. ...

  7. IntelliJ IDEA 中文乱码问题解决办法

    自己最近在使用IntelliJ IDEA,发现总是出现中文乱码的问题,在网上找了很多教程,发现真是“天下文章一大抄”.还不如自己动手试着解决一下. 1.编辑器以及调试信息中文乱码问题 解决方案: 选择 ...

  8. Linux下Birt、JTreeChart中文乱码问题解决办法

    Linux下JTreeChart,Birt等报表工具显示中文乱码解决 1) 现象: 在Windows上生成的报表图片展示正常,但是在Linux上显示(怪异的小方块“口”): 2)问题定位: 这是lin ...

  9. mysql乱码问题解决办法

    最近开发一下小项目,遇到了最常见的乱码问题. 1.数据库使用utf-8  utf-8_generic_ci编码,使用csv上传并导入数据,插入数据的时候出现了问题,有很大部分数据没有被导入,所以使用m ...

随机推荐

  1. Listener 介绍

    当 web 应用在 web 容器中运行时,web 应用内部会不断地发生各种事件:如 web 应用启动.web 应用停止,用户 session 开始.用户 session 结束.用户请求到达等. 实际上 ...

  2. Adreno GPU Profiler工具使用总结

    Adreno Profiler介绍 Adreno Profiler 是高通公司开发的一款针对运行在高通骁龙处理器上用于图形和GPGPU技术应用的性能分析和帧调试工具.工具本质上是一个OpenGL ES ...

  3. C++实现人员信息管理系统模拟

    利用C++语言实现基本的学生信息管理系统: 要求: 1-设置管理员密码 2-人员数据有:姓名,性别等基本的信息 3-可以添加,删除,保存,统计 #include<iostream> #in ...

  4. CentOS6.6安装heartbeat配置资源切换操作笔记实现高可用(原创)

    参考资料:http://www.centoscn.com/CentosServer/cluster/2015/0605/5604.html   背景需求: 使用heartbeat来做HA集群,并且把n ...

  5. 一元回归_ols参数解读(推荐AAA)

    sklearn实战-乳腺癌细胞数据挖掘(博客主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005269003&a ...

  6. [DeeplearningAI笔记]卷积神经网络2.2经典网络

    4.2深度卷积网络 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 [LeNet]--Lécun Y, Bottou L, Bengio Y, et al. Gradient-bas ...

  7. Tensorflow模型变量保存

    Tensorflow:模型变量保存 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献Tensorflow实战Google深度学习框架 实验平台: Tensorflow1.4.0 pyt ...

  8. Google Map API 应用实例说明

    目录 Google Map API 1基础知识 1.1 Google 地图 API 概念 1.2 Google 地图的"Hello, World" 1.2.1 加载 Google ...

  9. [php]数组建立方式

    1.$a[0]=..; $a[1]=..; $a[2]=..; $a[3]=..; 2.$a=array(1,2,3,4,5); 3.自定义数组 $a['logo']="qq"; ...

  10. 母版页 VS shtml—ASP.NET细枝末节(3)

    这算是html的重用吧? 网页很多地方长得一样,也有不一样的地方. 把网页中一样的地方,提取出来,形成一个文档. 在其他网页中引用,是网站开发的一个传统的思维. 当然不同的技术有不同的表现形式. 例如 ...