用心做人,用心做事!

发布新日志

  • Explore.EXE找不到序数:无法定位序数968于动态链接库LIBEAY32.dll上。

    2009-04-13 19:55:52

     

      解决方案:用LoadRuner\bin下的LIBEAY32.dll覆盖c:\windows\system32下的

    同名文件。覆盖后,此错误提示框不再出现

  • (转)web_custom_request应用示例

    2009-04-10 18:35:48

    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;
    }
Open Toolbar