zoukankan      html  css  js  c++  java
  • Loadrunner C/S关联函数(LSP)AND(LSSS)使用案例

    LSP就是lrs_save_param()函数

    LSSS就是lrs_save_searched_string()函数

    一下我们用一个例子去说明他们的使用.

    C/S机制和B/S不一样,特别是有一个data.ws
    里面的数据就是一些向服务端发的数据包和服务端返回的数据包
    以下就是我录制完以后的data.ws内容
    ;WSRData 2 1
    send  buf0 55
     "4##SELECT agent_name FROM AGENTS ORDER BY agent_name###"
    recv  buf1 55
     "0##Alex#Amanda#Debby#Julia#Mary#Robert#Sharon#Suzan###"
     "\x00"
    send  buf2 68
     "2##1## SELECT DISTINCT departure FROM Flights ORDER BY departure ###"
    recv  buf3 56
     "0##Denver#Los Angeles#Portland#San Francisco#Seattle###"
     "\x00"
    send  buf4 298
     "2##0##SELECT departure, flight_number, departure_initials, day_of_week, ar"
     "rival_initials, arrival, departure_time, arrival_time, airlines, seats_ava"
     "ilable, ticket_price, mileage   FROM  Flights WHERE arrival = 'Portland' A"
     "ND departure = 'Denver' AND day_of_week = 'Friday'ORDER BY flight_number #"
     "##"
    recv  buf5 128
     "0##5787;250;5587;03:11 PM;DEN;Friday;POR;04:52 PM;NW;164;Denver#6242;250;6"
     "042;08:00 AM;DEN;Friday;POR;11:00 AM;AA;177;Denver###"
     "\x00"
    send  buf6 82
     "11##UPDATE Counters SET counter_value=counter_value+1 WHERE table_name='OR"
     "DERS'###"
    recv  buf7 8
     "0##1###"
     "\x00"
    send  buf8 67
     "12##SELECT counter_value FROM Counters WHERE table_name='ORDERS'###"
    recv  buf9 10
     "0##101###"
     "\x00"
    send  buf10 72
     "12##SELECT customer_no FROM Customers WHERE customer_name='<Customer>'###"
    recv  buf11 9
     "0##-1###"
     "\x00"
    send  buf12 85
     "11##UPDATE Counters SET counter_value=counter_value+1 WHERE table_name='CU"
     "STOMERS'###"
    recv  buf13 8
     "0##1###"
     "\x00"
    send  buf14 70
     "12##SELECT counter_value FROM Counters WHERE table_name='CUSTOMERS'###"
    recv  buf15 9
     "0##31###"
     "\x00"
    send  buf16 81
     "11##INSERT INTO Customers (customer_name,customer_no) VALUES ('<Customer>',"
     " <userid>)###"
    recv  buf17 8
     "0##1###"
     "\x00"
    send  buf18 58
     "12##SELECT agent_no FROM Agents WHERE agent_name='<agent>'###"
    recv  buf19 8
     "0##4###"
     "\x00"
    send  buf20 195
     "11##INSERT INTO Orders (order_number,agent_no,customer_no,flight_number,de"
     "parture_date,tickets_ordered,class,send_signature_with_order) VALUES (<orderno>,"
     " <agentid>, <userid>, 6242, {d '2011-11-11'}, 1, '3', 'N')###"
    recv  buf21 8
     "0##1###"
     "\x00"
    send  buf22 13
     "11##COMMIT###"
    recv  buf23 8
     "0##0###"
     "\x00"

    -1
     

    下面就是我们的ACTION里面的脚本了

    #include "lrs.h"

    Action()
    {
     int random;
     lrs_create_socket("socket0", "TCP", "RemoteHost=172.16.2.9:3456",  LrsLastArg);
        lrs_send("socket0", "buf0", LrsLastArg); //返回agent name
        lrs_receive("socket0", "buf1", LrsLastArg); 
     srand(time(NULL));
     random=rand() % 8 + 2;
     lrs_save_searched_string("socket0", NULL, "agent", "LB=#", "RB=#", random,0,-1);
        lr_think_time(12);
        lrs_send("socket0", "buf2", LrsLastArg); //返回航班起始地和目的地
        lrs_receive("socket0", "buf3", LrsLastArg);
        lr_think_time(13);
        lrs_send("socket0", "buf4", LrsLastArg);  //查询航班信息
        lrs_receive("socket0", "buf5", LrsLastArg);
        lr_think_time(18);
        lrs_send("socket0", "buf6", LrsLastArg);  //生成订单号
        lrs_receive("socket0", "buf7", LrsLastArg);
        lrs_send("socket0", "buf8", LrsLastArg); //返回订单号码
        lrs_receive("socket0", "buf9", LrsLastArg);
     
     lrs_save_param("socket0", NULL, "orderno", 3, 3);//利用关联返回订单号
        lrs_send("socket0", "buf10", LrsLastArg);  //查找是否是新用户,新用户返回-1,否则返回客户编号
        lrs_receive("socket0", "buf11", LrsLastArg);
     lrs_save_param("socket0", NULL, "userid", 3, 2);
     if (strcmp(lr_eval_string("<userid>"),"-1")==0)
     {
        lrs_send("socket0", "buf12", LrsLastArg);//生成客户编号
        lrs_receive("socket0", "buf13", LrsLastArg);
        lrs_send("socket0", "buf14", LrsLastArg);//返回客户编号
        lrs_receive("socket0", "buf15", LrsLastArg);
     lrs_save_param("socket0", NULL, "userid", 3, 2);
        lrs_send("socket0", "buf16", LrsLastArg);//插入客户记录
        lrs_receive("socket0", "buf17", LrsLastArg);
     };
        lrs_send("socket0", "buf18", LrsLastArg); //返回agent id
        lrs_receive("socket0", "buf19", LrsLastArg);
        lrs_save_param("socket0", NULL, "agentid", 3, 1);
        lrs_send("socket0", "buf20", LrsLastArg); //插入订单记录
        lrs_receive("socket0", "buf21", LrsLastArg);
        lrs_send("socket0", "buf22", LrsLastArg);  //提交
        lrs_receive("socket0", "buf23", LrsLastArg);
        lr_think_time(7);  
        return 0;
    }
     

    srand(time(NULL));
     random=rand() % 8 + 2;
     lrs_save_searched_string("socket0", NULL, "agent", "LB=#", "RB=#", random,0,-1);
    我们从这段代码开始分析。
    srand(time(NULL));
     random=rand() % 9 + 2;
    这个随机数的作用是为了
    lrs_save_searched_string("socket0", NULL, "agent", "LB=#", "RB=#", random,0,-1);
    函数从
    recv  buf1 55
     "0##Alex#Amanda#Debby#Julia#Mary#Robert#Sharon#Suzan###"
     "\x00"
    中随机获得一个关联数据,为什么是数据说的范围是2-9呢,细看一下
    ##Alex#Amanda#Debby#Julia#Mary#Robert#Sharon#Suzan###
    就知道以左边界和右边界为#的是有11对D,不过只有第二开始到第九个才是对我们有用的。
    所以我们这样取值。从上面我们也可以看出WINSOCKET协议里面使用的关联和HTTP/HTML协议里面的关联函数是有区别的,区别是http的协议里面关联函数的位置一定要在打开的页面的前面,在Winsocket里面是在后面。
    所以执行完以下脚本
    srand(time(NULL));
     random=rand() % 8 + 2;
     lrs_save_searched_string("socket0", NULL, "agent", "LB=#", "RB=#", random,0,-1);
    agent就会随机得到Alex、Amanda、Debby、Julia、Mary、Robert、Sharon、Suzan其中的一个。
     
    我再来分析
    lrs_save_param("socket0", NULL, "orderno", 3, 3);
    这段代码是data.ws包里面提取所以要的数据
    recv  buf9 10
     "0##101###"
     "\x00"
    从以下的范例
    lrs_save_param( char *s_desc,char *buf_desc, char *param_name, intoffset, intparam_len);
    可以看出
    lrs_save_param("socket0", NULL, "orderno", 3, 3);
    是从"0##101###"的第3位开始取值,取3位,所以
    Orderon=101
    再来说一说这两个函数的一个大家不太了解的地方,然后就结束本章。
    lrs_save_searched_string("socket0", NULL, "agent", "LB=#", "RB=#", random,0,-1);
    lrs_save_param("socket0", NULL, "orderno", 3, 3);
    其中我们都发现有一个NULL,NULL的作用就是在刚从服务端里面的数据中取值,
    lrs_send("socket0", "buf8", LrsLastArg); //返回订单号码
    lrs_receive("socket0", "buf9", LrsLastArg);
    lrs_save_param("socket0", NULL, "orderno", 3, 3);
    如果写NULL,我们要从buf9中取值的话,关联函数就得在
    lrs_receive("socket0", "buf9", LrsLastArg);
    的后面
    如果
    lrs_receive("socket0", "buf10", LrsLastArg);
    lrs_save_param("socket0", NULL, "orderno", 3, 3);
    就是在duf10中取值。
    还有一种情况如果在
    lrs_receive("socket0", "buf10", LrsLastArg);
    后面取duf9的值就必须这么写
    lrs_save_param("socket0","buf9", "orderno", 3, 3);

    ----------- 软件性能测试工作室:提供性能测试咨询、培训和项目指导 (QQ: 2225045276 E-Mail: Testing_is_believing@126.com)
  • 相关阅读:
    建造者(Builder)模式
    模板方法模式(Tempalte Method Pattern)
    NIO Socket编程实例
    Java NIO概述
    转:Java中的Clone()方法详解
    调停者(Mediator)模式
    门面(Facade)模式
    struts2中方法拦截器(Interceptor)的中的excludeMethods与includeMethods的理解
    Struts2默认拦截器配置
    struts2的json-default和struts-default的区别
  • 原文地址:https://www.cnblogs.com/preftest/p/2175070.html
Copyright © 2011-2022 走看看