您的位置:首页 > 产品设计 > UI/UE

web_custom_request应用示例

2015-09-07 10:40 453 查看
http://www.cnblogs.com/guanhe/archive/2006/09/04/494223.html

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方式对该操作进行录制。录制后的脚本中与删除相关的部分大致如下:


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);




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语句:


web_custom_request("itinerary.pl",


"Method=POST",


"URL=http://localhost/MercuryWebTours/itinerary.pl",


"RecContentType=text/xml",


creq,


"Snapshot=t4.inf",


LAST);

较为完整的代码如下:


Action()


{


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;


}


#1楼 2007-08-06
15:55 11[未注册用户]

web_custom_request("new.html",

"url=https://www.helloworld.com.cn/connect/SFSFDUOEWNNSF/1/1/new.html",

"mothed=post",

...........

)

其中"SFSFDUOEWNNSF" 为动态数据,每次都不同,

我如何才能关联它,因为它是发向server的数据?


#2楼 2007-08-08
21:10 关河[未注册用户]

@11

关键是这个数据"SFSFDUOEWNNSF" 怎么来的?

这决定于具体的应用实现。一种比较常用的web应用的实现是,服务器返回一条javascript的语句让浏览器重定向到指定的URL,如果是这种方式,很容易从返回的页面中抓到这个URL并使用关联处理之。


#3楼 2007-08-16
11:16 11[未注册用户]

请教一个问题:

关于LOADRUNNER测试 java applet的问题

录制后 所有函数都转化为 web_custom_request来处理

有个问题是 有一个连接 我录制的时候 在generation log发现 他的 response 长度比较长 特别是body里

但是在回放的时候 发现 收到的response 只有部分

重要的是 没收到的response里 有我需要关联的东西

所以 问一下 这个 问题如何解决


#4楼 2008-07-24
11:45 检验[未注册用户]

检验
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: