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

LoadRunner(三)再识web_custom_request函数

web_custom_request函数在LR中使用非常普遍,特别是在手工脚本替代录制脚本的今天,几乎所有的请求都使用此函数来完成。
从理论上讲,该函数属于万能函数,完全可以替代web_link()、web_url()、web_submit_data()这些函数的存在。
事情是这样的:昨天在对某一接口进行脚本编写的时候,发现一个很奇怪的情况,该接口调用方式为:http://xxxxxxx/xx/xx?data=“json数据”的方式来进行;最初的想法是直接在web_custom_request函数的URL参数中拼接json数据,这种方式在最初的几条数据的情况下是可以完美的实现的,如下代码:

        web_custom_request("web_custom_request",
                         "URL={URL}
                         "Method=POST",
                         .....
                          LAST);

但是项目要求JSON数据至少需要上百条,这上百条数据拼接起来长度直接上2000字节,此时LR回放直接报错:

Action.c(44): 错误 -26631: 对于“http://......”,HTTP 状态代码=400 (Bad Request)      [MsgId: MERR-26631]
Action.c(44): web_custom_request("web_custom_request") 最高严重级别为“ERROR”,324 个正文字节,179 个标头字节   [MsgId: MMSG-26388]
Action.c(44): 错误 -27748: 生成 HTTP 请求时,缓冲区溢出。尝试增加运行时设置中的“网络缓冲区大小”。    [MsgId: MERR-27748]

之类的错误层出不穷,然后想到既然如此,为何不把内容写入Body中,这样发送的时候会自动分片,于是有了如下的写法:

        web_custom_request("web_custom_request",
                         "URL=http://192.168.51.123:81/dc-api/action",
                         "Method=POST",
                         "Resource=0",
                         "RecContentType=text/html",
                         "Referer=",
                         "Snapshot=t2.inf",
                         "Mode=HTML",
                         "EncType=text/html",
                         "Body=data={param}",
                          LAST);

运行后是不报错了,但是接口部分返回缺提示:

{"Result":false,"Message":"传入data为空","Code":"ERR-0x00000095","Version":"","Data":null}

这就奇怪了,然后修改了各种方法,都不行,最后进行了如下修改:

        web_custom_request("web_custom_request",
                         "URL=http://192.168.51.123:81/dc-api/action",
                         "Method=POST",
                         "Resource=0",
                         "RecContentType=text/html",
                         "Referer=",
                         "Snapshot=t2.inf",
                         "Mode=HTML",
                         "EncType=application/x-www-form-urlencoded", 
                         "Body=data={param}",
                          LAST);

即指定了EncType为application/x-www-form-urlencoded的方式,接口提示成功了。

通过研究后发现,web_custom_request的EncType编码类型。此参数给出一个内容类型(Content-Type),指定其做为回放脚本时“Content-Type”请求头的值,例如“text/html”。Web_custom_request函数不处理未编码的请求体。请求体参数将会使用已经指定的编码方式。因此,如果指定了不匹配HTTP请求体的“EncType”,会引发服务端的错误。通常我们建议不要手动修改录制时的“EncType”值。
任何对于“EncType”的指定都会覆盖web_add_[auto_]header函数指定的Content-Type。当指定了“EncType=”(空值)时,不会产生“Content-Type” 请求头。当省略了“EncType”时,任何一个web_add_[auto_]header函数都会起作用。如果既没有指定EncType也没有web_add_[auto_]header函且“Method=POST”,
“application/x-www-form-urlencoded”会做为默认值来使用。其他情况下,不会产生Content-Type请求头。

在后面分析的时候,也是通过抓包方式发现了确实两种不同编码方式有不同的请求头,而不同的头在接口方向接收的时候处理会出现异常。

相关文章:

  • VC++获取不同Windows版本的方法
  • 解决VS2012/VS2013/VS2015下编译的程序无法在XP下运行的问题
  • Advanced Installer 打包后,安装包在WIN10下重启后再次运行安装的解决办法
  • robot framework-requests库安装过程问题解决
  • Outlook2016创建账户后无法发送和接收邮件的解决办法
  • 在华为服务器 RH 2288H V3上装 windows server 2012 R2的办法
  • 谈谈集成显卡双2K/4K输出的那点事情
  • 在windows server 2012/2016上,任务管理器性能页面增加磁盘监控的办法
  • Advanced Installer,搜索注册表,根据注册表选择安装路径
  • PCI简易通讯控制器驱动的安装办法
  • LoadRunner监控window系统各项指标详解
  • LoadRunner--Analysis各项指标详解
  • Advanced Installer读取注册表时将Program Files读取为Program Files (x86)的解决办法
  • Loadrunner调用Webservice接口进行性能测试时的方法及优化总结
  • VC2010及以后版本调用WebService接口的方法
  • Android 控件背景颜色处理
  • iOS 颜色设置看我就够了
  • java中的hashCode
  • leetcode-27. Remove Element
  • Zepto.js源码学习之二
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 悄悄地说一个bug
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 【云吞铺子】性能抖动剖析(二)
  • HanLP分词命名实体提取详解
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • scrapy中间件源码分析及常用中间件大全
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • (003)SlickEdit Unity的补全
  • (C++20) consteval立即函数
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (四)Linux Shell编程——输入输出重定向
  • (一)为什么要选择C++
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • (转)scrum常见工具列表
  • .Net 8.0 新的变化
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .NET MVC第五章、模型绑定获取表单数据
  • .Net 访问电子邮箱-LumiSoft.Net,好用
  • .net 怎么循环得到数组里的值_关于js数组
  • .Net下使用 Geb.Video.FFMPEG 操作视频文件
  • @Conditional注解详解
  • @德人合科技——天锐绿盾 | 图纸加密软件有哪些功能呢?
  • [] 与 [[]], -gt 与 > 的比较
  • [acwing周赛复盘] 第 94 场周赛20230311
  • [Bada开发]初步入口函数介绍
  • [BUG] Hadoop-3.3.4集群yarn管理页面子队列不显示任务
  • [codeforces]Levko and Permutation
  • [Erlang 0129] Erlang 杂记 VI 2014年10月28日
  • [hdu1561] The more, The Better 【树形DP】
  • [HTML API]HTMLCollection
  • [HTML]Web前端开发技术18(HTML5、CSS3、JavaScript )HTML5 基础与CSS3 应用——喵喵画网页