用LoadRunner,这个问题99.82%的人都遇到过

发表于:2017-10-19 11:57

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:zqzq    来源:搜狗测试

  上周有一个小伙伴发了这样一篇文章LoadRunner,这个问题99%的人都遇到过,这次小编也有LoadRunner相关的问题和大家分享。小编觉得这个问题貌似比上周的问题覆盖面更广,因此掐指一算发现,遇到这个问题的人竟然高达惊人的99.82%,惊不惊喜害不害怕?
  好了,说正事儿~最近小编在做服务端压力测试的时候,遇到了两个小问题,虽然是两个比较简单的问题,但是很常见,因此小编总结了一下,分享给需要的小伙伴们。
  一、发post请求时,Body中需要填充Json字符串
  在小编的项目业务中,服务端跟客户端之间通信的时候约定使用post请求,在post请求的body中发送了一串Json格式的数据。小编在LoadRunner中的代码如下(当然,与小编真正的代码不完全一样):
  web_custom_request("test",
  "Method=Post", //使用Post方法
  "Resource=0",
  "URL=http://test.sogou.com/a.php,
  "RecContentType=application/json",
  "EncType=application/json",
  "Body={"id":"1","platform":"android","data":["hello"]}",
  "Mode=HTTP",
  LAST);
  按部就班写出上面的几行代码,调试的时候发现报错了,机智的小编断定肯定是body里面的Json字符串由于双引号没有转义引起的,于是把上面脚本中body那一行改成了下面这样:
  "Body={\"id\":\"1\",\"platform\":\"android\",\"data\":[\"hello\"]}",
  想着这下应该没问题了。再次发请求的时候发现LoadRunner提示返回500,去服务端查log发现服务器根本没有收到这个请求。这是怎么回事儿呢?
  查阅了资料之后发现原来是这样:由于我们在body中传了一个json格式的字符串,该字符串中{和 }符号与LoadRunner中参数化时的符号冲突了!对,参数化的时候也是用的这两个符号,因此会报错。
  找到了问题,解决方法也很简单:把LoadRunner中参数化的标记符号改一下就行了。在Tools —> General Options选项中,选择Parameterization进行修改即可:
  按照网上大神的建议,将参数化标记符号修改为<和>,再次运行脚本,顺利通过,服务端收到了请求,当然返回的数据也是非常的excited!
  二、发post请求时,Body中对汉字的处理
  在调通上面的问题一之后,小编紧接着又发现了一个问题:在脚本中,有时候需要传一些汉字进去,而传了汉字之后请求就会出现异常,比如当脚本中的body变成这样时:
  "Body={\"id\":\"1\",\"platform\":\"android\",\"data\":[\"好啊\"]}",
  发送请求,发现LoadRunner中没有报错,但是返回的数据为空。去服务器上看log之后发现报了一条errorLog,说是请求格式错误。之前数据是英文的时候没事儿,变成汉字就有问题,首先考虑是编码的问题:由于客户端的汉字是GBK编码,发送到服务端之后无法被服务端识别,因此没有数据返回。
  在LoadRunner中,改变编码有特定的函数:lr_convert_string_encoding,该函数的定义如下:
  // 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
  int lr_convert_string_encoding ( const char *sourceString, const char *fromEncoding, const char *toEncoding, const char *paramName);
  LoadRunner的函数说明文档中也给出了一些参数可以取的值:
  Values for fromEncoding and toEncoding
  在web_custom_request( )函数之前,我们先将要发送的汉字进行转码:
  lr_convert_string_encoding( "好啊",LR_ENC_SYSTEM_LOCALE,LR_ENC_UTF8,"str" );
  脚本中的body相应地也变成了这样(由于之前把参数化的标记符号改成了“< >”,因此这儿的str参数需要用 “< >” 包起来):
  "Body={\"id\":\"1\",\"platform\":\"android\",\"data\":[\"<str>\"]}",
  改完之后,发请求,服务端log正常,返回的数据当然也是excited!
  以上就是小编在项目中遇到的两个小坑,在此总结并分享给大家,小编相信所有踩过的坑总结后都会变成宝贵的经验,希望可以帮到大家。也欢迎小伙伴们留言分享自己遇到的问题,小编和其他的小编们一定尽力帮大家解决。
相关文章:用LoadRunner,这个问题99%的人都遇到过
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号