laisfiden 发表于 2007-8-31 16:59:34

好像在哪里见过。

niceleafage 发表于 2007-9-10 16:27:16

请问 #30 mfktafd 的帖子 中的问题,有知道的帮忙解答一下

web_custom_request(.................................
                              LAST);                           //请求(登陆等)


把这个函数怎么使用的,能详细说一下好吗?

还想问一个问题:在调试脚本时,用lr_message(“调试信息”),运行时,调试信息没看到?


附:1、我用的是LR8.1汉化版;
      2、我已经在run-time setting里要打开enable logging的

b47617 发表于 2007-9-28 18:16:48

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


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

    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;
}
2.是在output.txt文件中输出.

serena_meledy 发表于 2007-10-17 15:21:14

看不懂,先收下

serena_meledy 发表于 2007-10-17 15:22:36

搂住能不能详细解释一下:HTTP请求连接超时”“HTTP请求接收超时”“步骤下载超时”到底是指哪段时间呢? 因为不理解,所以不知道都设置为5秒会有什么问题。

xiongshaohuang1 发表于 2008-1-2 10:41:37

好贴!!虽然现在看不是很明白,但是慢慢学习

goodluck7788 发表于 2008-2-18 15:44:09

学习了

感谢楼主,学习了

liujg 发表于 2008-3-10 09:40:24

现在还没达到斑竹的程度!~:L :L

madduck 发表于 2008-8-24 22:21:24

留个言,做个标志。很快就要用到了。。。thx!

qicyt1812 发表于 2008-11-10 14:15:22

:victory:

cls2006 发表于 2008-11-13 19:47:30

看不懂,不过正在学习中。。。。

sunny0258 发表于 2009-7-28 17:42:51

收获了一些,还有一些看不懂,先收藏

whpd 发表于 2009-8-6 16:08:45

更2o楼一样的答案

hlq0514 发表于 2009-8-10 11:17:07

看看,说不定以后用的着

lisanshui1984 发表于 2009-9-14 20:25:37

学习,学习,3q

lbx111111 发表于 2010-11-1 21:11:18

顶一下,不错不错....

弓长亻青 发表于 2010-11-11 15:48:05

“在5秒内”是不是Transactions per Second小于5秒?

炫彩琉璃 发表于 2010-11-22 11:35:25

学习中~

x2test 发表于 2010-12-15 21:50:06

看看再说

xiaoshi_2011 发表于 2012-4-19 14:45:25

深入学习中
页: 1 2 [3] 4
查看完整版本: LoadRunner的一个解决方案