解决loadrunner请求和log乱码问题
2016-12-08 11:34
197 查看
这是一个HTTP接口测试中经常会碰到的问题,目前的服务器采用的都是UTF-8编码方式,而我们的客户机Windows系统一般默认采用的编码方式是GBK,这正是我们采用录制方式的时候会发现许多中文乱码的原因。
Loadrunner录制的时候可以通过在Virtual
User Gen的Tools->Recoding Options -> Advanced -> Support charset -> UTF-8的设置规避(其实也只是部分规避),下面我们讨论在手写测试脚本时如何解决UTF-8转码的问题。
实践一:在脚本中直接采用中文明文进行请求
web_custom_request("web_custom_request",
"URL=http://172.16.4.191/list?id=环球影院",
"Method=GET",
"TargetFrame=",
"Resource=0",
"Referer=",
"Body=",
LAST);
结果:服务端返回404错误,找不到相应的资源id,明显服务端不能正确响应非UTF8编码方式的请求。
实践二:
为解决这个问题,最关键的是要把本地GBK编码的汉字转换成UTF-8编码格式的信息,为此我们引进loadrunner自带的编码函数lr_convert_string_encoding
Converts a string to a different encoding.
C Language
intlr_convert_string_encoding( const char *sourceString, const char *fromEncoding, const char *toEncoding,
const char *paramName);
Example See Also
lr_convert_string_encodingconverts a string encoding between the following encodings: System locale, Unicode, and UTF-8.The function
saves the result string, including its terminating NULL, in the parameterparamName.
lr_convert_string_encodingis added manually to a script. when needed. It is not recorded.
Possible values for 'fromEncoding' and 'toEncoding' :
[align=left] [/align]
[align=left] [/align]
[align=left]根据函数说明,我们编写测试脚本如下[/align]
lr_convert_string_encoding( "环球影院",
LR_ENC_SYSTEM_LOCALE,
LR_ENC_UTF8,
"str" );
web_custom_request("web_custom_request",
"URL=http://172.16.4.191/list?id={str}",
"Method=GET",
"TargetFrame=",
"Resource=0",
"Referer=",
"EncType=text/xml;charset=UTF-8",
"Body=",
LAST);
[align=left] [/align]
[align=left]使用lr_convert_string_encoding函数,将中文转换成UTF-8编码以后,作为参数传递给请求,并发送。[/align]
[align=left]测试结果:仍然返回404错误,查看loadrunner日志信息“环球影院”已经正确转换成UTF8编码方式,那为什么还是请求失败呢?[/align]
[align=left]再次查看日志如下[/align]
Action.c(7): t=825ms: 223-byte request headers for "http://172.16.4.191/list?id=鐜悆褰遍櫌"
(RelFrameId=1)
Action.c(7): GET /list?id=鐜悆褰遍櫌\x00 HTTP/1.1\r\n
Action.c(7): Content-Type: text/xml;charset=UTF-8\r\n
Action.c(7): User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows)\r\n
Action.c(7): Accept-Encoding: gzip, deflate\r\n
Action.c(7): Accept: */*\r\n
Action.c(7): Connection: Keep-Alive\r\n
Action.c(7): Host: 172.16.4.191\r\n
Action.c(7): \r\n
发现在请求地址“/list?id=鐜悆褰遍櫌”后面还带了一个\x00,这正是lr_convert_string_encoding函数说明中标红的说明:The function saves the result string,
including its terminating NULL, in the parameterparamName.
[align=left]也就是说,我转换成UTF-8之后,如果直接作为变量传到代码之中的话,在最后的字符串之中,会多出来一个“NULL”,在C语言中NULL是一个字符串的结束,而正是这个null字节的存在导致了服务端识别id出错。[/align]
[align=left] [/align]
[align=left]实践三:[/align]
char tmp[50];
lr_convert_string_encoding( "环球影院",
LR_ENC_SYSTEM_LOCALE,
LR_ENC_UTF8,
"str" );
strcpy(tmp,lr_eval_string("{str}"));
lr_log_message("str is %s",tmp);
lr_save_string(tmp,"sorvalue");
web_custom_request("web_custom_request",
"URL=http://172.16.4.191/list?id={sorvalue}",
"Method=GET",
"TargetFrame=",
"Resource=0",
"Referer=",
"Body=",
LAST);
通过lr_eval_string函数取参数值时会自动去掉\x00,测试结果正常,正确返回HTTP响应内容。
Loadrunner录制的时候可以通过在Virtual
User Gen的Tools->Recoding Options -> Advanced -> Support charset -> UTF-8的设置规避(其实也只是部分规避),下面我们讨论在手写测试脚本时如何解决UTF-8转码的问题。
实践一:在脚本中直接采用中文明文进行请求
web_custom_request("web_custom_request",
"URL=http://172.16.4.191/list?id=环球影院",
"Method=GET",
"TargetFrame=",
"Resource=0",
"Referer=",
"Body=",
LAST);
结果:服务端返回404错误,找不到相应的资源id,明显服务端不能正确响应非UTF8编码方式的请求。
实践二:
为解决这个问题,最关键的是要把本地GBK编码的汉字转换成UTF-8编码格式的信息,为此我们引进loadrunner自带的编码函数lr_convert_string_encoding
lr_convert_string_encoding
Return Values | Parameterization |
C Language
intlr_convert_string_encoding( const char *sourceString, const char *fromEncoding, const char *toEncoding,
const char *paramName);
Example See Also
sourceString | The string to convert |
fromEncoding | The encoding of the sourceString |
toEncoding | The encoding to convert of the string saved in parameterparamName |
paramName | The name of the parameter in which the destination string will be saved |
saves the result string, including its terminating NULL, in the parameterparamName.
lr_convert_string_encodingis added manually to a script. when needed. It is not recorded.
Possible values for 'fromEncoding' and 'toEncoding' :
Constant | Value |
---|---|
LR_ENC_SYSTEM_LOCALE | NULL |
LR_ENC_UTF8 | "utf-8" |
LR_ENC_UNICODE | "ucs-2" |
[align=left] [/align]
[align=left]根据函数说明,我们编写测试脚本如下[/align]
lr_convert_string_encoding( "环球影院",
LR_ENC_SYSTEM_LOCALE,
LR_ENC_UTF8,
"str" );
web_custom_request("web_custom_request",
"URL=http://172.16.4.191/list?id={str}",
"Method=GET",
"TargetFrame=",
"Resource=0",
"Referer=",
"EncType=text/xml;charset=UTF-8",
"Body=",
LAST);
[align=left] [/align]
[align=left]使用lr_convert_string_encoding函数,将中文转换成UTF-8编码以后,作为参数传递给请求,并发送。[/align]
[align=left]测试结果:仍然返回404错误,查看loadrunner日志信息“环球影院”已经正确转换成UTF8编码方式,那为什么还是请求失败呢?[/align]
[align=left]再次查看日志如下[/align]
Action.c(7): t=825ms: 223-byte request headers for "http://172.16.4.191/list?id=鐜悆褰遍櫌"
(RelFrameId=1)
Action.c(7): GET /list?id=鐜悆褰遍櫌\x00 HTTP/1.1\r\n
Action.c(7): Content-Type: text/xml;charset=UTF-8\r\n
Action.c(7): User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows)\r\n
Action.c(7): Accept-Encoding: gzip, deflate\r\n
Action.c(7): Accept: */*\r\n
Action.c(7): Connection: Keep-Alive\r\n
Action.c(7): Host: 172.16.4.191\r\n
Action.c(7): \r\n
发现在请求地址“/list?id=鐜悆褰遍櫌”后面还带了一个\x00,这正是lr_convert_string_encoding函数说明中标红的说明:The function saves the result string,
including its terminating NULL, in the parameterparamName.
[align=left]也就是说,我转换成UTF-8之后,如果直接作为变量传到代码之中的话,在最后的字符串之中,会多出来一个“NULL”,在C语言中NULL是一个字符串的结束,而正是这个null字节的存在导致了服务端识别id出错。[/align]
[align=left] [/align]
[align=left]实践三:[/align]
char tmp[50];
lr_convert_string_encoding( "环球影院",
LR_ENC_SYSTEM_LOCALE,
LR_ENC_UTF8,
"str" );
strcpy(tmp,lr_eval_string("{str}"));
lr_log_message("str is %s",tmp);
lr_save_string(tmp,"sorvalue");
web_custom_request("web_custom_request",
"URL=http://172.16.4.191/list?id={sorvalue}",
"Method=GET",
"TargetFrame=",
"Resource=0",
"Referer=",
"Body=",
LAST);
通过lr_eval_string函数取参数值时会自动去掉\x00,测试结果正常,正确返回HTTP响应内容。
相关文章推荐
- 解决LoadRunner请求返回中文为乱码的问题
- 解决p42svn中文log乱码的问题
- 解决p42svn中文log乱码的问题
- jboss get请求中文乱码问题的解决[zt]
- linux下tomcat部署get请求乱码问题解决方法
- javaWEB开发中get方式请求的乱码问题解决
- jsp带中文请求参数的乱码问题的解决方法
- LoadRunner脚本中的乱码问题以及解决办法 ZT
- get请求中的中文乱码问题的解决方法
- 解决loadrunner回放脚本时乱码问题
- Web容器下的get和post方式请求的乱码问题解决
- LoadRunner脚本中的乱码问题以及解决办法
- [解决]在用AJAX进行异步请求(asp)的时候,出现了乱码问题。
- 解决URL请求的中文乱码问题
- JSP页面请求参数乱码问题的解决
- 在LoadRunner中录制脚本时,出现乱码的问题解决
- 请求servlet 的乱码问题解决
- linux下tomcat部署get请求乱码问题解决方法
- Struts2中解决POST请求和GET请求中的中文乱码问题
- LoadRunner脚本中的乱码问题以及解决办法