LoadRunner(三)再识web_custom_request函数
来源:互联网 发布:易企秀数据怎么导出 编辑:程序博客网 时间:2024/05/17 22:54
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请求头。
在后面分析的时候,也是通过抓包方式发现了确实两种不同编码方式有不同的请求头,而不同的头在接口方向接收的时候处理会出现异常。
- LoadRunner(三)再识web_custom_request函数
- loadrunner Web_类函数之web_custom_request()
- LoadRunner函数详解之web_custom_request
- loadrunner之 学习四:web_custom_request()函数
- 再识web_custom_request之post(Jmeter VS Loadrunner)
- Loadrunner测试json接口实例以及 web_custom_request 函数详解
- web_custom_request 函数
- web_custom_request 函数
- web_custom_request 函数
- web_custom_request 函数
- web_custom_request 函数
- 性能loadrunner--web_custom_request和web_submit_data
- loadrunner使用web_custom_request post数据
- web_custom_request 函数详解
- web_custom_request函数实例
- web_custom_request函数语法详解
- LoadRunner中web_custom_request和web_submit_data的差别
- [原创]Loadrunner中关联web_custom_request用法
- python学习知识点记录
- http://sdk.weixin.senparc.com/
- 关于Android中的事件分发、拦截和相应的消费问题
- 2016年6月编程语言排行榜:Assembly language涨势最强高达1.36%
- Linux下51单片机开发
- LoadRunner(三)再识web_custom_request函数
- Butterknife @OnClick绑定多控件id
- 在java中,数据缓存的实现
- ImageUtil常用的显示图片方法,好东西留着别忘记了
- 我的c学习:switch求分段函数
- 行业厂商3D传感摄像头参数对比
- 常见排序和查找算法的实现
- Android中Parcelable接口用法
- easyUI单元格合并自定义封装 (一)