web_custom_request应用示例-飞机订票系统中的删票操作
来源:互联网 发布:恒生指数期货模拟软件 编辑:程序博客网 时间:2024/06/11 23:54
LoadRunner提供的web_custom_request函数可以用于实现参数的动态生成。在LoadRunner中,web_reg_save_param和custom_request都常于处理参数的动态生成。
web_reg_save_param函数是大家都已经熟悉的了,它的主要作用是从一个response中获得后续的request需要使用的数据,然后将其作为一个参数保存下来,供后续步骤使用。该方法在LoadRunner中被称为Correlation(关联)。
而web_custom_request函数则可以用于完全自定义向服务端发送的request。
接下来我们用一个实际的例子说明一下web_custom_request的具体应用:
以Mercury自带的MercuryWebTours例子为例,假设我们希望在登录进入后将用户的前两条记录删除,我们来看看用web_custom_request如何实现这个目标。
首先,我们尝试用HTML方式对该操作进行录制。录制后的脚本中与删除相关的部分大致如下:
"URL=http://localhost/MercuryWebTours/welcome.pl?page=itinerary",
"Resource=0",
"RecContentType=text/html",
"Referer=http://localhost/MercuryWebTours/nav.pl?page=menu&in=home",
"Snapshot=t3.inf",
"Mode=HTML",
EXTRARES,
"URL=images/in_itinerary.gif", "Referer=http://localhost/MercuryWebTours/nav.pl?page=menu&in=itinerary", ENDITEM,
"URL=images/home.gif", "Referer=http://localhost/MercuryWebTours/nav.pl?page=menu&in=itinerary", ENDITEM,
LAST);
lr_think_time(2);
web_submit_form("itinerary.pl",
"Snapshot=t4.inf",
ITEMDATA,
"Name=1", "Value=on", ENDITEM,
"Name=2", "Value=on", ENDITEM, "Name=removeFlights.x", "Value=116", ENDITEM,
"Name=removeFlights.y", "Value=8", ENDITEM,
LAST);
我们通过树型模式查看一下在submit form的时候实际向服务器发出的请求的内容:
从请求内容中可以看到,我们通过POST方法发出了请求,请求发送的目的URL是/MercuryWebTours/itinerary.pl,发送的内容是:
"1=on&flightID=384-798-JM&2=on&flightID=3026-1592-JM&3=on&flightID=1194-2326-JM&.cgifields=1&.c"
"gifields=2&.cgifields=3&removeFlights.x=116&removeFlights.y=8"
从发送的内容中可以很明显的分析得出,1=on表示第一个checkbox是被选中的,flightID=384-798-JM表示的是第一条记录所对应的flightID。因此,如果我们需要自己组成这个发送的request的话,必须首先通过关联的方式获得前两条记录的flightID,然后再组成request的内容。
web_custom_request方法的原型是:
int web_custom_request (const char *RequestName, <List of Attributes>,[EXTRARES, <List of Resource Attributes>,] LAST );
其中List of Attributes的主要项目是Method,URL和BODY等。对这个例子来说,我们可以很容易构造出我们需要的request的BODY内容。
……
strcpy(creq, "Body=1=on&flightID=");
strcat(creq, lr_eval_string("{fID1}"));
strcat(creq, "&2=on&flightID=");
strcat(creq, lr_eval_string("{fID2}"));
strcat(creq, "&.cgifields=1&.cgifields=2");
strcat(creq, "&removeFlights.x=116&removeFlights.y=8");
……
其中{fID1}、{fID2}等都是通过关联获得的flightID的数据。
因此,我们可以根据图中的数据编写custom_request语句:
"Method=POST",
"URL=http://localhost/MercuryWebTours/itinerary.pl",
"RecContentType=text/xml",
creq,
"Snapshot=t4.inf",
LAST);
较为完整的代码如下:
{
char creq[500];
web_reg_save_param("fID1", "LB=INPUT TYPE=\"hidden\" NAME=\"flightID\" VALUE=\"", "RB=\"", "ORD=1",
"SEARCH=BODY", LAST);
web_reg_save_param("fID2", "LB=INPUT TYPE=\"hidden\" NAME=\"flightID\" VALUE=\"", "RB=\"", "ORD=2",
"SEARCH=BODY", LAST);
web_url("welcome.pl",
"URL=http://localhost/MercuryWebTours/welcome.pl?page=itinerary",
"Resource=0",
"RecContentType=text/html",
"Referer=http://localhost/MercuryWebTours/nav.pl?page=menu&in=home",
"Snapshot=t3.inf",
"Mode=HTML",
EXTRARES,
"URL=images/in_itinerary.gif", "Referer=http://localhost/MercuryWebTours/nav.pl?page=menu&in=itinerary", ENDITEM,
"URL=images/home.gif", "Referer=http://localhost/MercuryWebTours/nav.pl?page=menu&in=itinerary", ENDITEM,
LAST);
lr_think_time(2);
strcpy(creq, "Body=1=on&flightID=");
strcat(creq, lr_eval_string("{fID1}"));
strcat(creq, "&2=on&flightID=");
strcat(creq, lr_eval_string("{fID2}"));
strcat(creq, "&.cgifields=1&.cgifields=2");
strcat(creq, "&removeFlights.x=116&removeFlights.y=8");
lr_output_message(creq);
web_custom_request("itinerary.pl",
"Method=POST",
"URL=http://localhost/MercuryWebTours/itinerary.pl",
"RecContentType=text/xml",
creq,
"Snapshot=t4.inf",
LAST);
return 0;
}
- web_custom_request应用示例-飞机订票系统中的删票操作
- UFT在飞机订票系统中的应用
- 飞机订票系统
- 飞机订票系统
- 飞机订票系统
- 飞机订票系统实现
- 飞机订票系统源代码
- 课程设计---飞机订票系统
- web_custom_request应用示例
- web_custom_request应用示例
- C语言版飞机订票系统
- 飞机订票系统---缺陷报告
- Java版飞机订票系统
- 数据结构课程设计 飞机订票系统
- 数据结构课程设计--飞机订票系统
- 一个完成不了的飞机订票系统
- 飞机订票系统登录测试脚本
- 大一C语言课程设计--飞机订票系统
- 【OC语言】第一篇·Objective-C概述和面向对象
- 【OC语言】第二篇·对象的作用、字符串类型以及多文件开发
- 【OC语言】第三篇·类方法的使用、匿名类以及封装
- 【OC语言】第四篇·类的继承、多态、类对象以及SEL类型
- 【OC语言】第五篇·@property和@synthesize关键字、动态类型检测和构造方法
- web_custom_request应用示例-飞机订票系统中的删票操作
- 【OC语言】第六篇·内存管理
- 【OC语言】第七篇·ARC和分类
- 【OC语言】第八天·block和Protocol
- 【OC语言】第九篇·NSString,NSArry,NSDictionary
- 【OC语言】第十篇·NSFileManager、NSDate、沙盒、copy以及单例模式
- 【OC笔记】关于MRC中的注意问题
- 【OC笔记】MRC中多对象内存管理以及循环retain
- 【OC笔记】分类和延展