web_submit_data详解

定义:处理无状态或者上下文无关的表单提交。它用来生成表单的GET或POST请求,这些请求与Form自动生成的请求是一样的,发送这些请求时不需要表单上下文。 
函数形式:web_submit_data( const char *StepName, const char *Action, , ITEMDATA, , [ EXTRARES, ,] LAST ); 

说明:

  • 当VuGen设为基于URL的录制模式,或者基于HTML的录制方式时,但 Recording Options—HTML Advanced下的A script containing explicit URLs only选项被选中时,web_submmit_data函数才会被录制。
  • 不论采用URL查询的方式(GET),还是采用请求体发送(POST)的方式,此函数都指示出Form中的数据是如何发送到服务器的。
  • 如果VuGen处于HTTP录制模式下,此时记录Web进程时,会产生此函数。在提交Form时,如果无法生成web_submit_form函数,VuGen也会生成web_submit_data函数。
  • 在录制选项中,Toos—Recording Option下—Recording选项中,有一个Advanced HTML选项,可以设置是否录制非HTML资源。只有选择了“Record within the current script step”时,List of Resource Attributes才会被录制到。非HTML资源(如:gif和jpg等图象文件)。
  • 任何对于“EncType”的指定都会覆盖web_add_[auto_]header函数指定的Content-Type。当省略了“EncType”时,任何一个web_add_[auto_]header函数都会起作用。如果既没有指定EncType也没有web_add_[auto_]header函数,且“Method=POST”,“application/x-www-form-urlencoded”会作为默认值来使用。其他情况下,不会产生Content-Type请求头。
  • ContentType:文件类型标识符,如果“EncType”是“multipart/form-data”用来上传文件时,需要用到“ContentType”。当在ITEMDATA中的Data子句中指定了“File=Yes”,且文件也在此子句中,ContentType才适用,此时它会作为同一个子句的值来传递。正常情况下,“Content-Type”根据所上传文件的扩展名自动生成。如:
7d025e2b16b064e\r\n Content–Disposition: form–data; name="uploaded_file"; filename="D:\\temp\\a.txt"\r\n Content–Type: text/plain\r\n \r\n
  • “ContentType”如果指定了空值,那么“Content-Type”头将不包含在文件中。如果没有显示的指定“ContentType”的值,当上传的文件为空时,不管文件扩展名是什么,都默认使用“application/x-unknown-content-type”做为”ContentType”的值。VuGen不会检查指定的ContentType是否有效。
  • 通常情况下,如果录制了web_submit_data函数,VuGen会把“name”和“value”一起录制到ITEMDATA一节中。如果不想在脚本中以明文显示“value”,可以对它进行加密。把“Value”改为“EncryptedValue”,然后把录制到的值改为加密后的值。请参考web_submit_form中相关的内容。

示例1:一般的表单提交

web_submit_data("default.aspx",
    "Action=http://lazarus/flightnet/default.aspx",
    "Method=POST",
    "TargetFrame=",
    "RecContentType=text/html",
    "Referer=http://lazarus/flightnet/",
    "Snapshot=t7.inf",
    "Mode=HTML",
    ITEMDATA,
    "Name=grpType", "Value=radRoundtrip", ENDITEM,
    "Name=lstDepartingCity", "Value=DEN", ENDITEM,
    "Name=lstDestinationCity", "Value=LAX", ENDITEM,
    "Name=txtDepartureDate", "Value=8/19/2003", ENDITEM,
    "Name=txtReturnDate", "Value=8/19/2003", ENDITEM,
    "Name=txtQuantity", "Value=1", ENDITEM,
    "Name=radClass", "Value=1", ENDITEM,
    "Name=radSeat", "Value=1", ENDITEM,
    "Name=btnAvailableFlights", "Value=Next >", ENDITEM,
    LAST ); 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

示例2:web_submit_data使用POST方法提交两个文件

web_submit_data("Attachments",
    "Action=http://[email protected]/Attachments?YY=45434",
    "Method=POST",
    "EncType=multipart/form–data",
    "TargetFrame=",
    "RecContentType=text/html",
    "Referer=http:///[email protected]/Compose?YY=20435",
    "Snapshot=t5.inf",
    "Mode=HTML",
    ITEMDATA,
        "Name=userFile0",
        "Value=E:\\sense_sensibility\\Elinor.htm",
        "File=yes",
        "ContentType=text/html", // Override default "text/plain" for .txt files
        FilePath=Elinor.txt",
        "ContentTransferEncoding=html/text",
    ENDITEM,
        "Name=userFile1",
        "Value=E:\\sense_sensibility\\Marianne.jpg",
        "File=yes",
    ENDITEM,
    LAST ); 

注:表单中enctype="multipart/form-data"的意思是设置表单的MIME编码。默认情况,这个编码格式是application/x-www-form-urlencoded,不能用于文件上传;只有使用了multipart/form-data,才能完整的传递文件数据,进行下面的操作。
enctype="multipart/form-data"是上传二进制数据; form里面的input的值以2进制的方式传过去。

java scripts:

web.submit_data("saveFile2",
          "Action=<m_host>/myLoan-mobile/action/api/saveFile",
          new String[]{ //options[]
         "Method=POST",
        "EncType=multipart/form-data",
        "RecContentType=application/josn",
        "Mode=HTTP"
    },
        new String[]{ //data[]
       "Name=token", "Value=<token>", web.ENDITEM,
       "Name=pictureFile", "Value=E:\\LRWorkspace\\loginandsavephototest\\imageidcardfrontpath.jpeg",
       "File=YES",
       "ContentType=image/jpeg",  //不加这一行,LR默认设置为ContentType=image/pjpeg格式,回放失败。
       web.ENDITEM,
      web.LAST
});

传图片时,ie会把 jpg、jpeg翻译成image/pjpeg,png翻译成image/x-png 。而火狐则很标准:jpg、jpeg翻译成image/jpeg,png翻译成image/png。

为了避免这个问题,我在多个浏览器上做了测试,结果如下:

firefox image/jpeg image/bmp image/gif image/png

ie 6 image/pjpeg image/bmp image/gif image/x-png

ie 7 image/pjpeg image/bmp image/gif image/x-png

ie 8 image/pjpeg image/bmp image/gif image/x-png

时间: 2024-12-24 17:32:20

web_submit_data详解的相关文章

转:web_reg_save_param的使用详解

[摘要]利用实际案例说明如何使用Mercury LoadRunner提取包含在 HTML 页内的动态信息并创建参数. [关键词]性能测试,压力测试,Mercury LoadRunner 应用范围 在使用Loadrunner进行性能测试时,经常遇到一种情况,需要通过web页面修改某事务的状态.于是需要首先读出当前的事务的状态,再进行修改,此时便可以使用到web_reg_save_param了.可以通过它先将事务的状态读出写入一个自定义的变量中,根据变量的值来决定下一步的动作. 简要说明 语法: i

Spring事务管理(详解+实例)

写这篇博客之前我首先读了<Spring in action>,之后在网上看了一些关于Spring事务管理的文章,感觉都没有讲全,这里就将书上的和网上关于事务的知识总结一下,参考的文章如下: Spring事务机制详解 Spring事务配置的五种方式 Spring中的事务管理实例详解 1 初步理解 理解事务之前,先讲一个你日常生活中最常干的事:取钱. 比如你去ATM机取1000块钱,大体有两个步骤:首先输入密码金额,银行卡扣掉1000元钱:然后ATM出1000元钱.这两个步骤必须是要么都执行要么都

转载:DenseNet算法详解

原文连接:http://blog.csdn.net/u014380165/article/details/75142664 参考连接:http://blog.csdn.net/u012938704/article/details/53468483 本文这里仅当学习笔记使用,具体细节建议前往原文细度. 论文:Densely Connected Convolutional Networks 论文链接:https://arxiv.org/pdf/1608.06993.pdf 代码的github链接:h

MariaDB(MySQL)创建、删除、选择及数据类型使用详解

一.MariaDB简介(MySQL简介略过) MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品.在存储引擎方面,使用XtraDB(英语:XtraDB)来代替MySQL的InnoDB. MariaDB由MySQL的创始人Michael Widenius(英语:Michael Widenius)主导开发,他早前曾以10亿美元的价格,将自己创建的公司MySQL A

HttpServletResponse和HttpServletRequest详解

HttpServletResponse,HttpServletRequest详解 1.相关的接口 HttpServletRequest HttpServletRequest接口最常用的方法就是获得请求中的参数,这些参数一般是客户端表单中的数据.同时,HttpServletRequest接口可以获取由客户端传送的名称,也可以获取产生请求并且接收请求的服务器端主机名及IP地址,还可以获取客户端正在使用的通信协议等信息.下表是接口HttpServletRequest的常用方法. 说明:HttpServ

POSIX 线程详解(经典必看)

总共三部分: 第一部分:POSIX 线程详解                                   Daniel Robbins ([email protected]), 总裁/CEO, Gentoo Technologies, Inc.  2000 年 7 月 01 日 第二部分:通用线程:POSIX 线程详解,第 2部分       Daniel Robbins ([email protected]), 总裁/CEO, Gentoo Technologies, Inc.  20

.NET深入解析LINQ框架(五:IQueryable、IQueryProvider接口详解)

阅读目录: 1.环路执行对象模型.碎片化执行模型(假递归式调用) 2.N层对象执行模型(纵横向对比链式扩展方法) 3.LINQ查询表达式和链式查询方法其实都是空壳子 4.详细的对象结构图(对象的执行原理) 5.IQueryable<T>与IQueryProvider一对一的关系能否改成一对多的关系 6.完整的自定义查询 1]. 环路执行对象模型.碎片化执行模型(假递归式调用) 这个主题扯的可能有点远,但是它关系着整个LINQ框架的设计结构,至少在我还没有搞懂LINQ的本意之前,在我脑海里一直频

netstat状态详解

一.生产服务器netstat tcp连接状态................................................................................ 2 1.1生产服务器某个业务LVS负载均衡上连接状态数量............................................... 2 1.2生产服务器某个业务web上连接状态数量...............................................

详解go语言的array和slice 【二】

上一篇  详解go语言的array和slice [一]已经讲解过,array和slice的一些基本用法,使用array和slice时需要注意的地方,特别是slice需要注意的地方比较多.上一篇的最后讲解到创建新的slice时使用第三个索引来限制slice的容量,在操作新slice时,如果新slice的容量大于长度时,添加新元素依然后使源的相应元素改变.这一篇里我会讲解到如何避免这些问题,以及迭代.和做为方法参数方面的知识点. slice的长度和容量设置为同一个值 如果在创建新的slice时我们把