网络上很多说明这2个函数区别的文章,我就从其他摘抄了内容,其中区别自己查看附录,我主要说明2点
(1)用web_custom_request提交请求如果是json,则会会使用关键字符{},但是{},是lr的参数化关键字,所以需要lr中设置:Tool - General Options - Parameterization 中将ParameterBraces 改为<>即可,如图

 
(2)提交的body中如果有有“=”之类的特殊字符,此时必须通过URL编码,LoadRuner中提供了一个这样的编码转换函数:

web_convert_param(“vs1″,“SourceEncoding=HTML”,“TargetEncoding=URL”, LAST);



附录
文章转自: http://blog.csdn.net/manchester117/article/details/7914632
 web_custom_request方法可以发送POST和GET类型的请求

web_submit_data只能发送POST类型的请求
所有web_submit_data方法发送的请求都可以使用web_custom_request来实现

web_custom_request可以实现web_submit_data无法实现的请求,
比如“查询所有邮件并删除”这个案例中,查询时我们使用关联把所有邮件对应的标识抓取成一个数组,如果使用web_submit_data来完成这 个删除的请求,需要很多个web_submit_data请求才能完成,但使用web_custom_request就可以通过一个请求完成,方法是自己 写代码拼一个web_custom_request 方法POST请求的Body值。
web_submit_data请求中提交的数据是以这样的方式存在的
“Name=属性名称,”,“Value=属性值” 
如:

[cpp] view plain copy
  1. “Name=locale”, “Value=L2″, ENDITEM,
  2. “Name=dataCenter”, “Value=yh”, ENDITEM,
  3. “Name=username”, “Value=12044″, ENDITEM,

如果我们想提交的某个属性包含包含多个值(上文的例子中就是这样的情况),它就无法处理了,只能通过多个web_submit_data来处理。

 下面是一个典型的web_submit_data和web_custom_request请求,可以看到web_custom_request中提交的数据(body)是以这样的方式存在的

“Body=属性名称=属性值&属性名称=属性值&……”

[cpp] view plain copy
  1. web_submit_data(“login”,
  2. “Action=http://192.168.14.21:78……ndex_sso.jsp”,
  3. “Method=POST”,
  4. “RecContentType=text/html”,
  5. “Referer=http://192.168.14.21:7888…%3D%2Findex_sso.jsp”,
  6. “Mode=HTML”,
  7. ITEMDATA,
  8. “Name=locale”, “Value=L2″, ENDITEM,
  9. “Name=dataCenter”, “Value=yh”, ENDITEM,
  10. “Name=username”, “Value=12044″, ENDITEM,
  11. “Name=password”, “Value=”, ENDITEM,
  12. “Name=_eventId”, “Value=submit”, ENDITEM,
  13. “Name=isPureWeb”, “Value=true”, ENDITEM,
  14. “Name=solutionName”, “Value=eas”, ENDITEM,
  15. “Name=dbType”, “Value=1″, ENDITEM,
  16. “Name=easSessionId”, “Value=eas;yh;L2;12044;BaseDB”, ENDITEM,
  17. “Name=userAuthPattern”, “Value=BaseDB”, ENDITEM,
  18. “Name=loginFlow”, “Value=true”, ENDITEM,
  19. LAST);
  20. web_custom_request(“CommonQueryDialog.jsf_3″,
  21. “URL=http://192.168.14.21:7888/ea…ueryDialog.jsf”,
  22. “Method=POST”,
  23. “Resource=0″,
  24. “RecContentType=text/javascript”,
  25. “Referer=http://192.168.14.21:7888/…DailyLoanUERc%2Bihtml”,
  26. “Mode=HTML”,
  27. “EncType=application/x-www-form-urlencoded;charset=UTF-8″,
  28. “Body=queryDialog%3AselectSolutionList=%E6%9F%A5%E8%AF%A2&queryDialog%3Aj_iduserFilterPanel_3_value=Kd5QoAEPEADgAAf8wKgEDMznrtQ%3D&=%E6%B9%96%E5%8D%97%E4%BA%9A%E5%8D%8E%E4%B9%B3%E4%B8%9A%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8&queryDialog%3Aj_iduserFilterPanel_6=&queryDialog%3Aj_iduserFilterPanel_9_value=3&=%E5%A4%A7%E4%BA%8E%E7%AD%89%E4%BA%8E&queryDialog%3Aj_iduserFilterPanel_11=0&queryDialog%3Aj_iduserFilterPanel_14_value=&=&queryDialog%3Aj_iduserFilterPanel_17_value=&=&queryDialog%3Aj_iduserFilterPanel_20_value=&=&queryDialog%3Aj_iduserFilterPanel_23_value=&=&queryDialog%3Aj_iduserFilterPanel_26_value=&=&queryDialog%3Aj_iduserFilterPanel_29_value=&=&queryDialog%3Aj_iduserFilterPanel_32=&queryDialog%3Aj_iduserFilterPanel_35_value=&=&queryDialog%3Aj_iduserFilterPanel_38=2008-08-01&queryDialog%3Aj_iduserFilterPanel_41=2008-08-28&queryDialog%3AfilterGrid_modifiedData=%5B%5D&queryDialog%3AfilterGrid_removedData=%5B%5D&queryDialog%3A_postback=&queryDialog%3AuserFilterPanel=%2Fcp%2Fbc%2FdailyLoanBillCommQuery.xhtml&javax.faces.ViewState={vs2}”,
  29. LAST);

通过我的观察,发现有两种情况下的POST请求会被LoadRunner录制为web_custom_request,

1.上文提到的批量提交多条同属性名称的数据的请求
2.header属性x-requested-by值为XMLHttpRequest的POST请求

这两种实现请求的方法还有一个需要注意的地方就是web_custom_request中body中的属性值如果包含一些特殊字符,必须通过URL编码,否则Web服务器会返回500错误,一个典型的例子是如果Body中包含ViewState,ViewState中常常有“=”之类的特殊字符,此时必须通过URL编码,LoadRuner中提供了一个这样的编码转换函数

[cpp] view plain copy
  1. web_convert_param(“vs1″, “SourceEncoding=HTML”,  “TargetEncoding=URL”, LAST);

除LoadRunner外,你可以在Fiddler中按Ctrl+E来转换


 

web_custom_request和web_submit_data的更多相关文章

  1. web_url、web_custom_request、web_submit_data、web_submit_form的使用实例

    业务:根据url获取图片用web_url()函数访问数据;请求方式:HTTP GET 请求;Action(){web_url("imageproxytest", "URL ...

  2. 转:web_custom_request 和 web_submit_data的差别

    web_custom_request方法可以发送POST和GET类型的请求 web_submit_data只能发送POST类型的请求 所有web_submit_data方法发送的请求都可以使用web_ ...

  3. LoadRunner中web_custom_request 和 web_submit_data的差别

  4. web_custom_request函数详解

    在LR中当使用HTML录制方式时,录制的脚本中主要由函数web_link().web_submit_form().web_url().web_submit_data()组成,当使用HTTP录制方式时, ...

  5. 转:web_custom_request 函数

    语法:Int web_custom_request (const char *RequestName, <List of Attributes>, [EXTRARES, <List ...

  6. loadrunner 脚本开发-web_custom_request函数详细介绍

    脚本开发-web_custom_request函数详细介绍 by:授客 QQ:1033553122 c语言版本: int web_custom_request(const char *RequestN ...

  7. 彻底抛弃脚本录制,LR脚本之使用web_custom_request函数自定义

    原文  http://www.cnblogs.com/Bonnie83/p/3525200.html 初学性能测试时候,第一步必学脚本录制,但一路下来各种录制失败.回放脚本失败的问题层出不穷,究其原因 ...

  8. 彻底抛弃脚本录制,LR脚本之使用web_custom_request函数自定义http请求

    初学性能测试时候,第一步必学脚本录制,但一路下来各种录制失败.回放脚本失败的问题层出不穷,究其原因一是LR本身存在对测试环境的兼容性问题导致录制失败,更深层次的原因是录制者不清楚LR录制脚本的原理,或 ...

  9. LR11中自定义函数web_custom_request请求

    Action() { char * ip,temp; int state; double time_elapsed, duration, waste; merc_timer_handle_t time ...

随机推荐

  1. HBase数据访问的一些常用方式

    类型 特点 场合 优缺点分析 Native Java API 最常规和高效的访问方式 适合MapReduce作业并行批处理HBase表数据 Hbase Shell HBase的命令行工具,最简单的访问 ...

  2. 5-[HTML]-body常用标签2

    1.表格标签 table 表格由<table> 标签来定义.每个表格均有若干行(由 <tr> 标签定义),每行被分割为若干单元格(由<td>标签定义).字母 td ...

  3. 【HNOI2013】数列

    题面 题解 设\(\{a_n\}\)为差分数组,可以得到柿子: \[ \begin{aligned} ans &= \sum_{a_1 = 1} ^ m \sum_{a_2 = 1} ^ m ...

  4. java异常处理 日志记录异常具体位置的方法

    首先要在方法处抛出 Exception异常 然后在方法调用处try catch接收此异常对象 这样就能够记录异常具体位置了 控制台输出: 日志: 要点: System.getProperty(&quo ...

  5. angular 服务 service factory provider constant value

    angular服务 服务是对公共代码的抽象,由于依赖注入的要求,服务都是单例的,这样我们才能到处注入它们,而不用去管理它们的生命周期. angular的服务有以下几种类型: 常量(Constant): ...

  6. window.location.hash 页面跳转,精确定位,实例展示:

    window.location.hash 页面跳转,精确定位,实例展示: (1).index.phtml,页面用于传参 <script id="bb_list_template&quo ...

  7. 动态加载与插件系统的初步实现(一):反射与MEF解决方案

    涉及内容: 反射与MEF解决方案 AppDomain卸载与代理 WinForm.WcfRestService示 PRRT1: 反射实现 插件系统的基本目的是实现宿主与组件的隔离,核心是作为接驳约定的接 ...

  8. elk6.3 centos集群搭建 head插件安装

    版本elk均为6.3+centos7.0 准备工作 官网下载elk6.3的linux环境的压缩包,sftp上传 下载对应的head插件sftp上传到指定目录 tar.gz文件解压 tar -zxvf ...

  9. win10家庭版没有组策略怎么办?(win10管理员已阻止你运行此应用”解决方法)

    把下面代码复制到TXT文本中,把文本再改成   .cmd  格式保存后以管理员身份运行 @echo off pushd "%~dp0" dir /b C:\Windows\serv ...

  10. WebRTC入门

    什么是WebRTC? 众所周知,浏览器本身不支持相互之间直接建立信道进行通信,都是通过服务器进行中转.比如现在有两个客户端,甲和乙,他们俩想要通信,首先需要甲和服务器.乙和服务器之间建立信道.甲给乙发 ...