loadrunner乱码问题解决办法
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=127.0.0.1/postreply.aspx?infloat=1&topicid=2&&inajax=1",
"Method=POST",
"EncType=multipart/form-data",
"RecContentType=text/xml",
"Referer=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,url编码处理
"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=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=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=192.168.0.15/xxx/xxx/xxx.aspx?HotelName={hotelname}",
"Resource=0",
"RecContentType=text/html",
"Referer=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=192.168.20.60:8080/zk/search.aspx?key=U%3D%E4%B8%AD",
"URL=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=192.168.20.60:8080/zk/search.aspx?key=U%3D%E4%B8%AD%E5%9B%BD%E9%87%8E%E7%94%9F%E8%B "Url=../images/bg.png", "Referer=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%E "Url=../images/cluster-pic.png", "Referer=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 "Url=../images/search-select-current.png", "Referer=192.168.20.60:8080/zk/search.aspx?key=U%3D%E4%B8%AD%E5%9B%BD%E9%87%8E%E7%94%9 "Url=../images/search-select-bg.png", "Referer=192.168.20.60:8080/zk/search.aspx?key=U%3D%E4%B8%AD%E5%9B%BD%E9%87%8E%E7%94%9F%E
HTTP Referer是header的⼀部分,当浏览器向web服务器发送请求的时候,⼀般会带上Referer,告诉服务器我是从哪个页⾯链接过来
的,服务器籍此可以获得⼀些信息⽤于处理
因此这部分的参数服务器可能是不会处理的,⽐如次例中,gif和png都是静态⽂件,因此后免的Refer
er中的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=qikan.cqvip/zk/search.aspx?key=U%3D{skey}",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t39.inf",
"Mode=HTML",
EXTRARES,
"Url=../images/bg.png", "Referer=qikan.cqvip/zk/search.aspx?key=U%3D%E4%B8%AD%E5%9B%BD", ENDITEM,
"Url=../images/search-left-bg.gif", "Referer=qikan.cqvip/zk/search.aspx?
key=U%3D%E4%B8%AD%E5%9B%BD", ENDITEM,
"Url=../images/search-select-bg.png", "Referer=qikan.cqvip/zk/search.aspx?
key=U%3D%E4%B8%AD%E5%9B%BD", ENDITEM,
"Url=../images/search-select-current.png", "Referer=qikan.cqvip/zk/search.aspx?
key=U%3D%E4%B8%AD%E5%9B%BD", ENDITEM,
"Url=../images/cluster-name-bg.png", "Referer=qikan.cqvip/zk/search.aspx?
key=U%3D%E4%B8%AD%E5%9B%BD", ENDITEM,
"Url=../images/cluster-group-show.gif", "Referer=qikan.cqvip/zk/search.aspx?
key=U%3D%E4%B8%AD%E5%9B%BD", ENDITEM,
"Url=../images/close-op.png", "Referer=qikan.cqvip/zk/search.aspx?key=U%3D%E4%B8%AD%E5%9B%BD", ENDITEM,
"Url=../images/cluster-pic.png", "Referer=qikan.cqvip/zk/search.aspx?key=U%3D%E4%B8%AD%E5%9B%BD", ENDITEM,
"Url=../images/type-ico-id.png", "Referer=qikan.cqvip/zk/search.aspx?key=U%3D%E4%B8%AD%E5%9B%BD", ENDITEM,
"Url=../ajax/stateview.ashx?info=Ozs7MDs7L33NlYaC5&_t=1415241852",
"Referer=qikan.cqvip/zk/search.aspx?key=U%3D%E4%B8%AD%E5%9B%BD", ENDITEM,
LAST);
return 0;
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论