当前位置: 首页 > article >正文

Loadrunner中对中文进行UTF-8转码

这是一个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 parameter paramName
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/perTest/p/5570344.html

http://www.lryc.cn/news/2417601.html

相关文章:

  • 【论文合集】Awesome Diffusion Models 2
  • 视频编码标准H.264/AVC
  • python 天天向上续以七天为周期_《天天向上》主持人高天鹤回应考试作弊后续:以后要靠自己去拼搏...
  • 渗透测试知识点总结(非常详细),从零基础入门到精通,看完这一篇就够了
  • 分享一些好用的网站
  • MATLAB算法实战应用案例精讲-【人工智能】时空人工智能(Spatio-TemporalAI)(概念篇)
  • python交易是什么意思_py交易是什么意思 py交易是什么梗
  • 生产管理ERP系统应用案例图
  • 如何快速搭建一个免费的 鉴黄 平台?
  • 2022考研计算机-数据库原理教程1-7章
  • 最最详细的黑马前端HTML5+CSS3笔记,给大家整理好了
  • ios+测试版软件,ios15测试版描述文件
  • LIBRARY_PATH和LD_LIBRARY_PATH环境变量的区别
  • 【沃顿商学院学习笔记】商业基础——Accounting:06财务报表的几大比率知识学习(完)
  • MyEclipse 2017配置Tomcat8
  • mysql PREPARE用法_PHP5 mysqli的
  • matlab分类算法代码,[转载]两种图像分类算法和matlab源代码
  • 常见的Web漏洞——CORS
  • iphone怎么更新9.0系统更新服务器,iOS 9 推送前你必须知道的几件事:iOS 9 升级指南...
  • table 设置边框
  • 直播盒子在海外直播中的关键作用与应用
  • 2006年世界顶级杀毒软件排名
  • JavaSE基础知识(五)--面向对象代码实现收尾(多态概述)
  • 课题分享:物流配送人员车辆调度管理系统,基于java+SSM+mysql
  • 光立方,永远的神!
  • 射频天线设计-窄带阻抗匹配电路设计
  • 怎么下载安装Firebug和使用Firebug
  • Apache和PHP部署
  • 面向食品类目的AI导购对话系统设计与实践
  • jQuery创建多个setInterval函数