Action()
{
char * ip,temp;
int state;
double time_elapsed, duration, waste;
merc_timer_handle_t timer_check;
/*
lr_save_datetime("%y-%b-%d-%s",DATE_NOW*(ONE_HOUR),"time");
保存当天的日期到参数time中
lr_message("the day is:%s",lr_eval_string("{time}"));
输出time的值
*/
lr_rendezvous("shenqintixiankaishi");//提现集合点
lr_think_time();
lr_start_transaction("shenqintixian"); timer_check = lr_start_timer();//此处如果启用lr_start_timer可以计算出文本检查点花费的时
web_custom_request(" aj_sp_message.php_4",
"URL=http://ip/lsmvas/account/pretr.action",
"Method=POST",
"Resource=0",
"RecContentType=text/html",
"Referer=http://newtest.xiaolin.com/new_sp/lsb_record.php?act=bills",
"Snapshot=t12.inf",
"Mode=HTML",
"EncType=",
//Body是请求的内容,可以咨询开发
"Body=accountNum={accountNum}&bankName=银行名称&bankAccountName=用户名&bankAccountNumber=212332131231&bankArea=BJBJ&bnName=提现出账&bnNumber={bnNumber}",
LAST);
//accountNum ,bnNumber 参数化 更真实模拟业务,符合数据库范式要求
lr_log_message("******************AccountNum is:%s",lr_eval_string("{accountNum}")); //print AccountNum
lr_log_message("******************BnNumber is:%s",lr_eval_string("{bnNumber}")); //print BnNumber time_elapsed = lr_end_timer(timer_check);
waste = time_elapsed * ;
lr_wasted_time(waste);
lr_end_transaction("shenqintixian", LR_AUTO);
return ;
}

http://www.51testing.com/html/71/410671-810897.html

利用web_custom_request函数学习

web_custom_request
 语法:
Int web_custom_request (const char *RequestName, <List of Attributes>, [EXTRARES, <List of Resource Attributes>,] LAST ); 返回值
 返回LR_PASS()代表成功,LR_FAIL()代表失败。 参数:
 RequestName:步骤的名称,VuGen中树形视图中显示的名称。 List of Attribute:支持的属性有以下几种: . URL:页面地址。 . Method :页面的提交方式,POST或GET。 . TargetFrame:包含当前链接或资源的frame的名称。参见List of Attributes的同名参数。 . EncType:编码类型。 . RecContentType:响应头的内容类型。参见List of Attributes的同名参数。 . Referer:参见List of Attributes的同名参数。 . Body:请求体。参见List of Attributes的同名参数。 . RAW BODY:参见List of Attributes的同名参数。 . BodyFilePath:作为请求体传送的文件的路径。它不能与下面的属性一起使用:Body,或者其他Body属性或Raw Body属性包括BodyBinary,BodyUnicode, RAW_BODY_START或Binary=。 . Resource、ResourceByteLimit、Snapshot、Mode:参见List of Attributes的同名参数。 . ExtraResBaseDir:参见List of Attributes的同名参数。 . UserAgent:用户代理,它是一个HTTP头的名字,用来标识应用程序,通常是浏览器,它呈现的是用户和服务器的交互。 例如:头信息“User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)”识别的是Window NT下的IE浏览器6.。其他的User-Agent的值用来描述其他的浏览器,或者非浏览器程序。通常,一个应用程序中所有的请求都使用相同的用户代理,录制者作为一个运行时参数来指定(Run-Time Setting—Browser Emulation—User Agent)。不管怎么说,即使是在一个简单的浏览器进程中,仍有可能会用到直接与服务器交互的非浏览器组件(例如ActiveX控件),通常他们有着不同于浏览器的用户代理属性。指定“UserAgent”表示这是一个非浏览器的请求。指定的字符串被HTTP头“User-Agent:” 使用,在某些情况下,它同时会影响回放脚本时的行为。例如,不使用浏览器缓存,假设指定的URL属于资源等等。 LoadRunner本身不检查指定的字符串与浏览器本身的值是否相同。 . Binary:“Binary=”表示页面请求体中的每一个以\\x##形式出现的值(在这里“##”代表2个十六进制数字),都会被替换为单字节的十六进制的值。 如果“Binary=”(默认值),所有的字符序列只是按照字面的值传递。 需要注意双斜杠的用法。在C编译器中双斜杠被解释为单斜杠。如果不需要零字节,单斜杠可以在Binary不等于1的情况下使用(例如,使用\x20代替\\x20)。如果需要零字节,那么只能使用\\x00且设置 “Binary=”,\x00在逻辑上会被截断。 . ContentEncoding 指定请求体的使用指定的方式(gzip或者deflate)进行编码(例如,压缩),相应的“Content-Encoding:” HTTP头会和此请求一起发送。这个参数适用于web_custom_request和web_submit_data。 EXTRARES:表明下面的参数将会是List Of Resource Attributes了。 LAST :结尾的标示符。 List of Attributes  FtpAscii:“”使用ASCII模式处理FTP操作;"" 使用二进制模式。 TargetFrame: 当前链接或资源所在Frame的名称。除了Frame的名字,还可以指定下面的参数: _BLANK:打开一个空窗口。 _PARENT:把最新更改过的的Frame替换为它的上级。 _SELF:替换最新更改过的的Frame。 _TOP:替换整个页面。 RecContentType:录制脚本时响应头的内容类型。例如text/html、 application/x-javascript等。当没有设置Resource属性时,用它来确定目标URL是否是可记录的资源。此属性包含主要的和次要的资源。最频繁使用的类型是 text、application、image。次要的类型根据资源不同变化很多。例如:"RecContentType=text/html":表示html文本。"RecContentType=application/msword":表示当前使用的是Msword。 Referer: 当前页面关联的页面。如果已经显式指定了url的地址,此项可以省略。 Resource:指示URL是否属于资源。 是; 不是。设置了这个参数后,RecContentType参数被忽略。“Resource=”,意味着当前操作与所在脚本的成功与否关系不大。在下载资源时如果发生错误,是当作警告而不是错误来处理的;URL是否被下载受“Run-Time Setting—Browser Emulation--Download non-HTML resources” 这个选项的影响。此操作的响应信息是不做为HTML来解析的。“Resource=”,表明此URL是重要的,不受发送请求(RTS)的影响,在需要时也会解析它。 ResourceByteLimit:web页面下载资源的极限大小。当达到设置的极限后,无法下载其他资源。仅仅对需要下载的资源有效。 下载过程:如果总计下载大小小于极限值,则正常开始下载。如果当下载时达到了设置的极限值,资源大小可知(在HTTP响应头中指定了Content-Length),这中情况下,如果只需要一个缓冲区,那么下载可以正常完成。如果需要的不止一个缓冲区,或者资源大小不可知,下载就会中断同时关闭当前连接。 这个特性可以用来模拟用户不等待一个页面下载完成时导航到另一个页面的情况。 ResourceByteLimit 在HTTP模式中无法使用,在Concurrent Groups(Vuser脚本中的一个区,此区中的所有函数并发执行)区中也无法使用。仅仅适用于Sockets的回放,WinInet也是不适用的。 Snapshot:快照的文件名,关联时使用。 Mode:两种录制级别HTML、HTTP。 HTML级别:在当前Web界面上录制直观的HTML动作。以一步步的web_url、web_link、web_image、web_submit_form来录制这些动作。VuGen仅仅录制返回HTML页面的请求,不处理脚本和应用程序。 HTTP级别:VuGen把所有的请求录制为web_url指令,不生成web_link、web_image、web_submit_form这些函数。这种方法更为灵活,但是生成的脚本不够直观。 ExtraResBaseDir(目前仅适用与web_custom_request函数):根URL,放在EXTRARES组里。它是用来解析相对URL的(译者加:类似于Windows的相对路径和绝对路径)。 URL可以是绝对路径(例如http://weather.abc.com/weather/forecast.jsp?locCode=LFPO),也可以是相对路径(例如“forecast.jsp?locCode=LFPO”)。 真正的URL的下载是通过绝对路径进行的,所以相对URL路径必须使用根路径URL去解析。例如,使用http://weather.abc.com/weather/做为根路径来解析“forecast.jsp?locCode=LFPO”,最后的URL是:http://weather.abc.com/weather/forecast.jsp?locCode=LFPO。如果没有指定“ExtraResBaseDir”,默认的根URL是主页面的URL。 Body(目前仅适用与web_custom_request函数):请求体。不同的应用中,请求体分别通过Body、BodyBinary或者BodyUnicode参数来传递。请求体可以只使用其中一个参数,也可以使用一连串的分开的参数组成多请求体。例如: web_custom_request( …… "BodyUnicode=REPRICE" "BodyBinary=\\x08\\x00\\xCC\\x02\\x00\\x00" "Body=.\r\n" "-dxjjtbw/(.tp?eg:ch/6--\r\n", LAST); 在上面的代码中,使用了3个参数来划分请求体,一个是Unicode段,一个是二进制段,最后一个是常规的字符串。最终的请求体是这3个参数按照在函数中的顺序连接起来的值。 还有一个很少用到的参数,Binary。它也能描述二进制请求体,但只允许函数中只有一个请求体参数。 所有的请求体都是ASCII字符,以null结束。 Body:表示规则的,可打印的字符串。无法表示空字节。所有的字符都以一个反斜杠表示。注意:在旧的脚本中,可以看见不可打印的字符在请求体中以16进制方式进行编码。(例如 “\\x5c”),在这种情况下,必须使用“Binary=”来标识。空字节使用"\\00"来表示。 相反,新脚本则会把把请求体分开放在不同的参数中("Body=...", "BodyBinary=...", Body=...")。 BodyBinary :表示二进制代码。不可打印的字符在请求体中以16进制方式\\xHH进行编码。在这里HH 表示十六进制值。空字节使用"\\00"来表示。 BodyUnicode:美国英语, 特指拉丁 UTF-16LE(little-endian)编码。这种编码方式会在在每个字符末尾附加一个0字节,以便使字符更可读。但是在VuGen中实际的参数把所有的0字节都去掉的。但是在发送给Web 服务器之前, web_custom_request函数会重新添加0字节的。对于不可打印的字符,使用单反斜杠表示,无法表示空字节。 注意:如果请求体大于100K,会使用一个变量来代替Body参数。变量是在 lrw_custom_body.h中定义的。 Raw Body(目前仅适用与web_custom_request函数):请求体是作为指针传递的,此指针指向一串数据。 二进制的请求体可以使用BodyBinary 属性来发送(或者使用Body 属性来传递,前提是必须设置"Binary=1" )。无论如何,这种方法需要使用转义字符反斜杠把不可打印的字符转换为ASCII字符。为了能有一种更简便的表现原始数据的方式,Raw Body属性应运而生,可以传递指向二进制数据的指针。 使用4个连续的参数集来表示指针,而且必须按照顺序排列: RAW_BODY_START 指向数据缓冲区的指针 (int) 长度 RAW_BODY_END 例子: char *abc= .../* a pointer to the raw data */ web_custom_request("StepName", "URL=http://some.url ", "Method=POST", RAW_BODY_START, "abc", , RAW_BODY_END, LAST); 在应用中,即使设置了数据的长度为0,指针也必须有值,不能为空。 在“Binary=”时,不能使用上面的语法传递原始数据。 数据缓冲区中的数据不能使用参数化。也就时说,缓冲区中的任何参数(例如 "{MyParam}")不能被正确的替代为相应的值,只会以字面值发送。 List of Resource Attributes  Web页面中的非HTML机制产生了资源列表,包含了Javascript, ActiveX, Java applets and Flash所请求的资源。VuGen's 的Recording 选项中,可以设置把这些资源录制在当前的操作中(默认是此设置)还是作为单独的步骤来录制。 支持以下资源: URL
 要加载的web资源的url。  Referer
 关联的url。  ENDITEM
 每个资源的结束标记 相对于把每个资源都录制为单独的步骤来说,不录制非HTML元素使脚本更加简短和可读,特别是在VuGen的Tree视图下更为突出。 当VuGen录制过程中发现附加的资源(比如JS)时,会以列表的形式加到附加资源项中。回放脚本时,这些资源文件也是请求的一部分。可以对一些按规则变化的资源使用关联。 实例: Action()
{
char * ip,temp;
int state;
double time_elapsed, duration, waste;
merc_timer_handle_t timer_check;
/*
lr_save_datetime("%y-%b-%d-%s",DATE_NOW*(ONE_HOUR),"time");
保存当天的日期到参数time中
lr_message("the day is:%s",lr_eval_string("{time}"));
输出time的值
*/
lr_rendezvous("shenqintixiankaishi");//提现集合点
lr_think_time();
lr_start_transaction("shenqintixian"); timer_check = lr_start_timer();//此处如果启用lr_start_timer可以计算出文本检查点花费的时
web_custom_request(" aj_sp_message.php_4",
"URL=http://ip/lsmvas/account/pretr.action",
"Method=POST",
"Resource=0",
"RecContentType=text/html",
"Referer=http://newtest.xiaolin.com/new_sp/lsb_record.php?act=bills",
"Snapshot=t12.inf",
"Mode=HTML",
"EncType=",
//Body是请求的内容,可以咨询开发
"Body=accountNum={accountNum}&bankName=银行名称&bankAccountName=用 户名&bankAccountNumber=212332131231&bankArea=BJBJ&bnName=提现出账& amp;bnNumber={bnNumber}",
LAST);
//accountNum ,bnNumber 参数化 更真实模拟业务,符合数据库范式要求
lr_log_message("******************AccountNum is:%s",lr_eval_string("{accountNum}")); //print AccountNum
lr_log_message("******************BnNumber is:%s",lr_eval_string("{bnNumber}")); //print BnNumber time_elapsed = lr_end_timer(timer_check);
waste = time_elapsed * ;
lr_wasted_time(waste);
lr_end_transaction("shenqintixian", LR_AUTO);
return ;
} 利用自定义函数发送数据的好处: )更能真实地反映服务器处理能力 ) 使用性能测试提前,进行单元性能测试,避免后期性能测试的风险。 )另外个人认为,此方法可以运用到功能测试中,在测试登录时可以参数化其中的一些数据,达到数据驱动测试的目的。

LR11中自定义函数web_custom_request请求的更多相关文章

  1. Hive中自定义函数

    Hive的自定义的函数的步骤: 1°.自定义UDF extends org.apache.hadoop.hive.ql.exec.UDF 2°.需要实现evaluate函数,evaluate函数支持重 ...

  2. [VBA]用一个简单例子说明如何在Excel中自定义函数

    Excel中的函数无疑是强大的,但是再强大的战士也有他脆弱的脚后跟[1].这两天在使用Excel的时候遇到了一个需求,要在某一个单元格里面自动计算今天是星期几(如显示 Today is Tuesday ...

  3. SQL Server中自定义函数:用指定的分隔符号分割字符串

    微软SQL Server数据库中包含了很多内置的函数,入下图: 它们用于处理日期.数学.元数据.字符串等. 其中最为常用的就是处理字符串,里面包含了CharIndex()等函数,非常方便使用. 但是对 ...

  4. [原创]java WEB学习笔记42:带标签体的自定义标签,带父标签的自定义标签,el中自定义函数,自定义标签的小结

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  5. sqlserver中自定义函数+存储过程实现批量删除

    由于项目的需要,很多模块都要实现批量删除的功能.为了方便模块的调用,把批量删除方法写成自定义函数.直接上代码. 自定义函数: ALTER FUNCTION [dbo].[func_SplitById] ...

  6. MATLAB 中自定义函数的使用

    MATLAB在文件内部(在函数内部)定义函数,但文件名以开头函数来命名,与Java中每个文件只能有一个公开类,但在文件内部还是可以定义其他非公开类一个道理. 无参函数 do.m function do ...

  7. 微信小程序中自定义函数的学习使用

    新手,最近在给学校搞个党费计算器.需要自己定义函数来实现某个功能. 1.无参函数: 函数都是写在js文件里面的. Page({ data:{ income1:'0', }, cal:function( ...

  8. [转]hive中自定义函数(UDAF)实现多行字符串拼接为一行

    函数如何使用: hive> desc concat_test;OKa       intb       string hive> select * from concat_test;OK1 ...

  9. JavaScript中自定义函数以及文本框、radio、下拉框的值的获取,结合淘宝竞拍案例来理解。。。

    淘宝竞拍案例: HTML部分代码: <form action="#" method="post"> <h2>欢迎进入淘宝竞拍</h ...

随机推荐

  1. windows环境下封装条件wait和signal

    linux 环境有提供好的pthread_cond_wait() 和 phread_signal().pthread_broadcast() windows需要自己封装,利用semophore控制线程 ...

  2. base64解码

    网络传输经常用base64编码的数据,因此我们需要将其解码成正常字符集合. base64.h #ifdef __cplusplus extern "C" { #endif char ...

  3. libxml2在mingw下编译

    1.配置MingW路径,在环境变量path中加入/mingw32/bin2.解压libxml,进入win32目录3.记事本打开configure.js,找到var compiler = "m ...

  4. DialogFragment 将数据传回Activity的onActivityResult方法

    在MyActivity中 弹出一个DialogFragment (某一个控件的点击事件) search= findViewById(R.id.search); search.setOnClickLis ...

  5. spoj 1825 Free tour II

    http://www.spoj.com/problems/FTOUR2/ After the success of 2nd anniversary (take a look at problem FT ...

  6. HNOI2004 宠物收养所 (Treap)

    1285 宠物收养所 http://codevs.cn/problem/1285/  时间限制: 1 s  空间限制: 128000 KB     题目描述 Description 最近,阿Q开了一间 ...

  7. [数据库中间件]将用户添加到DB2组授权

    1.将用户oracle添加到db2的用户组中,命令如下: usermod -a -G db2iam #将用户添加到组中并不改变当前所属组 注:以下与主题无关,只是列举一些关于用户的命令 id user ...

  8. js父页面和子页面相互取值

    iframe子页面与父页面通信根据iframe中src属性是同域链接还是跨域链接,通信方式也不同. 一.同域下父子页面的通信 父页面parent.html <html> <head& ...

  9. Docker 配置国内镜像拉取中心,Configure docker to use faster registries in China.

    Networking in China is really bad when it comes to using some cloud based tools like docker, it's us ...

  10. python模块之StringIO/cStringIO(内存文件)

    1. StringIO/cStringIO是什么 这个模块提供了一个类,这个类的实例就像是一个文件一样可以读写,实际上读写的是一个字符串缓存,也可以称之为内存文件. StringIO和文件对象拥有共同 ...