上一篇 / 下一篇  2010-02-22 15:20:28

查看( 2378 ) / 评论( 2 ) / 评分( 5 / 0 )

这是一个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

lr_convert_string_encoding

Return Values
Parameterization

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

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

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' :

Constant
Value
LR_ENC_SYSTEM_LOCALE
NULL
LR_ENC_UTF8
"utf-8"
LR_ENC_UNICODE
"ucs-2"
根据函数说明,我们编写测试脚本如下
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);
使用lr_convert_string_encoding函数,将中文转换成UTF-8编码以后,作为参数传递给请求,并发送。
测试结果:仍然返回404错误,查看loadrunner日志信息“环球影院”已经正确转换成UTF8编码方式,那为什么还是请求失败呢?
再次查看日志如下
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.
也就是说,我转换成UTF-8之后,如果直接作为变量传到代码之中的话,在最后的字符串之中,会多出来一个“NULL”,在C语言中NULL是一个字符串的结束,而正是这个null字节的存在导致了服务端识别id出错。
实践三:
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响应内容。

转载于:https://www.cnblogs.com/zhengah/p/4760456.html

Loadrunner中对中文进行UTF-8转码的探索相关推荐

  1. url中传递中文参数时的转码与解码

    URL传递中文参数时的几种处理方式,总结如下: 1.将字符串转码:newString("xxxxx".getBytes("iso-8859-1")," ...

  2. 在URL中传递中文的解决方式

    在URL中传递中文的解决方式 2015年05月13日 17:13:55 thinkinglink 阅读数:10321 标签: URL编码中文编码乱码解决 更多 个人分类: web前端 在URL中传递中 ...

  3. 处理get中的中文乱码情况

    1 最基本的乱码问题. 这个乱码问题是最简单的乱码问题.一般新会出现.就是页面编码不一致导致的乱码. <%@ page language="java" pageEncodin ...

  4. jsp中解决中文乱码问题(基础问题)

    在两个jsp简单页面编写中,出现了一个问题,出现了中文乱码, 本应该出现的中文显示不出来,分析如下:java编程之所以会出现说出现中文乱码是 因为:Java的内核和class文件是基于unicode的 ...

  5. springMVC中URL中文乱码问题

    解决springMVC中URL中文乱码问题 问题: 在java控制器里面如果转发或重定向的URL中有中文,那么请求该URL时就会造成乱码,导致访问出错. 事例 @RequestMapping(&quo ...

  6. LoadRunner中log的使用总结

    LoadRunner中log的使用总结 1.log的设置方式. 在 runtime setting中可以设置log的生成方式: 默认的log方式: Enable logging选中,log optio ...

  7. jquery.ajax的url中传递中文乱码问题的解决方法

    jquery.ajax的url中传递中文乱码问题的解决方法 JQuery JQuery默认的contentType:application/x-www-form-urlencoded 这才是JQuer ...

  8. 理解LoadRunner中的局部变量和全局变量

    以下内容均选自个人作品:<精通软件性能测试与LoadRunner实战>   在C语言中,变量有效性的范围称变量的作用域.不仅对于形参变量,C语言中所有的量都有自己的作用域,按作用域范围不同 ...

  9. 写一个函数,2 个参数,1 个字符串,1 个字节数,返回截取的字符串,要求字符串中的中文不能出现乱码

    题目要求: 写一个函数,2 个参数,1 个字符串,1 个字节数,返回截取的字符串,要求字符串中的中文不能出现乱码. 如("我ABC",4)应该截为"我AB", ...

最新文章

  1. C# 引用类型和值类型
  2. 分布式系统互斥性与幂等性问题的分析与解决
  3. 什么才是软件开发的葵花宝典?
  4. 美国生活社交礼仪必读
  5. 毕设日志——在faster rcnn pytorch上训练KITTI数据集
  6. Linux成长之路-基础篇(2)
  7. Codeforces Round #468 (Div. 2, based on Technocup 2018 Final Round)
  8. 微信下单、支付流程和注意事项
  9. 期刊不收版面费,天下寒士俱欢颜
  10. 分享一款自用的强悍高清录制软件Bandicam4.3.4.1503中文便携特别版
  11. 区块链概念、原理、特点
  12. 图的建立——邻接矩阵
  13. 前端浏览器窗口直接展示pdf文件
  14. java.util.Date java.sql.Date
  15. 迎难而上,阿里高频考点2023Java岗面试突击手册
  16. liux常用命令收集
  17. 解决绿联扩展坞插网线无法联网的问题
  18. Python基础周总结(1)
  19. 私人飞机已不稀奇…国内首颗私人卫星上天!耗费500万,未来可能开直播赚钱
  20. 2011暗组***工具包

热门文章

  1. Redis学习笔记01---配置文件
  2. Firefox 使用 Chrome 浏览器的 PDF 和 Flash 插件
  3. 轻松学会多线程(四)——synchronized同步keyword知多少
  4. FPGA机器学习之学习的方向
  5. MapReduce InputFormat之FileInputFormat
  6. Redis异步消息队列
  7. 什么是空间分配担保策略?
  8. python大写字母怎么表示_python – 如何在字符串中搜索大写字母并返回带有和不带大写字母的单词列表...
  9. Spring中的事务回滚 网上比较不错的文章
  10. Java多线程与并发 面试十大常考题目。