web_custom_request应用示例

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

None.gif web_url( " welcome.pl " ,
None.gif    
" URL=http://localhost/MercuryWebTours/welcome.pl?page=itinerary " ,
None.gif        
" Resource=0 " ,
None.gif        
" RecContentType=text/html " ,
None.gif    
" Referer=http://localhost/MercuryWebTours/nav.pl?page=menu&in=home " ,
None.gif    
" Snapshot=t3.inf " ,
None.gif    
" Mode=HTML " ,
None.gif    EXTRARES,
None.gif    
" URL=images/in_itinerary.gif " " Referer=http://localhost/MercuryWebTours/nav.pl?page=menu&in=itinerary " , ENDITEM,
None.gif    
" URL=images/home.gif " " Referer=http://localhost/MercuryWebTours/nav.pl?page=menu&in=itinerary " , ENDITEM,
None.gif        LAST);
None.giflr_think_time(
2 );
None.gif
None.gifweb_submit_form(
" itinerary.pl " ,
None.gif    
" Snapshot=t4.inf " ,
None.gif    ITEMDATA,
None.gif    
" Name=1 " " Value=on " , ENDITEM,
None.gif    
" Name=2 " " Value=on " , ENDITEM,         " Name=removeFlights.x " " Value=116 " , ENDITEM,
None.gif    
" Name=removeFlights.y " " Value=8 " , ENDITEM,
None.gif    LAST);

我们通过树型模式查看一下在submit form的时候实际向服务器发出的请求的内容:
custom_request.JPG

从请求内容中可以看到,我们通过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语句:

None.gif web_custom_request( " itinerary.pl " ,
None.gif
" Method=POST "
None.gif    
" URL=http://localhost/MercuryWebTours/itinerary.pl " ,
None.gif    
" RecContentType=text/xml " ,
None.gif    creq,
None.gif    
" Snapshot=t4.inf " ,
None.gif    LAST);

较为完整的代码如下:
None.gif Action()
ExpandedBlockStart.gif
{
InBlock.gif    
char creq[500];
InBlock.gif
InBlock.gif    web_reg_save_param(
"fID1""LB=INPUT TYPE=\"hidden\" NAME=\"flightID\" VALUE=\"""RB=\"""ORD=1"
InBlock.gif        
"SEARCH=BODY", LAST);
InBlock.gif    web_reg_save_param(
"fID2""LB=INPUT TYPE=\"hidden\" NAME=\"flightID\" VALUE=\"""RB=\"""ORD=2"
InBlock.gif        
"SEARCH=BODY", LAST);
InBlock.gif    web_url(
"welcome.pl",
InBlock.gif        
"URL=http://localhost/MercuryWebTours/welcome.pl?page=itinerary",
InBlock.gif        
"Resource=0",
InBlock.gif        
"RecContentType=text/html",
InBlock.gif        
"Referer=http://localhost/MercuryWebTours/nav.pl?page=menu&in=home",
InBlock.gif        
"Snapshot=t3.inf",
InBlock.gif        
"Mode=HTML",
InBlock.gif        EXTRARES,
InBlock.gif        
"URL=images/in_itinerary.gif""Referer=http://localhost/MercuryWebTours/nav.pl?page=menu&in=itinerary", ENDITEM,
InBlock.gif        
"URL=images/home.gif""Referer=http://localhost/MercuryWebTours/nav.pl?page=menu&in=itinerary", ENDITEM,
InBlock.gif        LAST);
InBlock.gif    lr_think_time(
2);
InBlock.gif
InBlock.gif    strcpy(creq, 
"Body=1=on&flightID=");
InBlock.gif    strcat(creq, lr_eval_string(
"{fID1}"));
InBlock.gif    strcat(creq, 
"&2=on&flightID=");
InBlock.gif    strcat(creq, lr_eval_string(
"{fID2}"));
InBlock.gif    strcat(creq, 
"&.cgifields=1&.cgifields=2");
InBlock.gif    strcat(creq, 
"&removeFlights.x=116&removeFlights.y=8");
InBlock.gif
InBlock.gif    lr_output_message(creq);
InBlock.gif
InBlock.gif    web_custom_request(
"itinerary.pl",
InBlock.gif
"Method=POST"
InBlock.gif        
"URL=http://localhost/MercuryWebTours/itinerary.pl",
InBlock.gif        
"RecContentType=text/xml",
InBlock.gif        creq,
InBlock.gif        
"Snapshot=t4.inf",
InBlock.gif        LAST);
InBlock.gif
InBlock.gif    
return 0;
ExpandedBlockEnd.gif}

转载于:https://www.cnblogs.com/guanhe/archive/2006/09/04/494223.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值