zoukankan      html  css  js  c++  java
  • LR中点鼠标做关联(winsock协议)

    转自:http://blog.csdn.net/zeeslo/article/details/1661791

    今天写一下winsock的关联操作。
    以前看过一个文档。在英文版的讲winsock的,其中讲到关联。大致操作是:
    1,录制。
    2,回放。这里是失败。
    3,到data.ws里找需要关联的数据。
    4,按F7,打开EBCDIC translation对话框。
    5,查找数据的位置及偏移量。
    6,到脚本中写函数用:lrs_save_param, lrs_save_param_ex, lrs_save_searched_string,这三个函数。
     
    Notes:winsock的关联函数要写到需要关联的代码行的下面。
     
    说明一下这几个函数:
    Lrs_save_param:
    int lrs_save_param ( char *s_desc,char *buf_desc, char *param_name, int offset, int param_len);
    这个函数保存buffer中的数据到一个参数里。这个函数是用来在脚本中做关联的。
    前两个参数是为了指定特定的参数。
    在指定活动的socket和buffer之后,需要指定一个参数来保存数据。指定偏移量来显示buffer中数据的偏移量和数据的长度。
    保存了参数之后,可以在脚本和数据文件使用它,代替所有需要替代的值。替换时要用选项中的定义的符号来引用。
    注意:要从buffer中保存一个编码过的数据到参数中,要用lrs_save_param_ex函数。
    lrs_save_param_ex
    int lrs_save_param_ex ( char *s_desc, char *type, char *buff, int offset, int length, char *encoding, char *param );
     
     
    下面说不用这么麻烦的操作的,直接点几下就可以了。
     
    1         录制脚本
    这个没什么说的吧。选择协议winsock,这要是也不懂,我建议你去看十遍手册。
    我这里录制到的脚本如下:
           lrs_create_socket("socket0", "TCP", "LocalHost=0", "RemoteHost=192.168.1.114:5560", LrsLastArg);
           lrs_send("socket0", "buf0", LrsLastArg);
           lrs_receive("socket0", "buf1", LrsLastArg);
           lrs_create_socket("socket1", "TCP", "LocalHost=0", "RemoteHost=192.168.1.114:5560", LrsLastArg);
           lrs_send("socket1", "buf2", LrsLastArg);
           lrs_receive("socket1", "buf3", LrsLastArg);
    相应的data.ws如下:
    ;WSRData 2 1
     
    send buf0 50
           "OPERTYPE(LOGIN)ACCOUNTNAME(admin)PASSWORD(admin)"
     
    recv buf1 155
           "DATALEN{{155}}000000USERID{{90}}USERNAME{{DMS"
           "/xcf/xb5/xcd/xb3"
           "WEB"
           "/xb2/xe9/xd1/xaf/xd5/xca/xbb/xa7"
           "}}USERDESCRIBE{{"
           "/xba/xfe/xd6/xdd/xb5/xe7/xc1/xa6/xbe/xd6"
           "//DMS"
           "/xcf/xb5/xcd/xb3"
           "WEB"
           "/xb2/xe9/xd1/xaf/xd5/xca/xbb/xa7"
           "}}DEPARTNAME{{"
           "/xce/xb4/xd6/xaa"
           "}}ADMIN{{0}}CLIENTSESSIONID{{2}}"
     
    send buf2 53
           "CLIENTSESSIONID(2)OPERTYPE(INITDEPARTLIST)"
     
    recv buf3 683
           "DATALEN{{683}}000000XMLDATA{{<?xml version=/"1.0/" encoding=/"GB2312/"?>/n"
           "<!DOCTYPE DepartList>/n"
           "<DepartList>/n"
           ………………………………………………………………………………………………
    这里就省略了些数据。反正也看着也晕乎乎的。
    这里说明一下,我这里是用GIS系统,需要sessionID关联的。我这上面的代码很简单,在buf1中有一个sessionID,在buf2中send时就用到了它。
    2         回放一下
    在不关联时回放是一定会有问题的。我回放的结果是:
    Virtual User Script started
    Starting action vuser_init.
    Ending action vuser_init.
    Running Vuser...
    Starting iteration 1.
    Starting action Action.
    Action.c(4): lrs_create_socket(socket0, TCP, ...)
    Action.c(6): lrs_send(socket0, buf0)
    Action.c(8): lrs_receive(socket0, buf1)
    Action.c(11): lrs_create_socket(socket1, TCP, ...)
    Action.c(13): lrs_send(socket1, buf2)
    Action.c(15): lrs_receive(socket1, buf3)
    Action.c(15): Mismatch (expected 683 bytes, 42 bytes actually received)
    Action.c(17): lrs_create_socket(socket2, TCP, ...)
    Action.c(19): lrs_send(socket2, buf4)
    Action.c(21): lrs_receive(socket2, buf5)
    Action.c(21): Mismatch (expected 34143 bytes, 42 bytes actually received)
    Action.c(23): lrs_create_socket(socket3, TCP, ...)
    Action.c(25): lrs_send(socket3, buf6)
    Action.c(27): lrs_receive(socket3, buf7)
    Action.c(27): Mismatch (expected 100 bytes, 42 bytes actually received)
    Action.c(29): lrs_create_socket(socket4, TCP, ...)
    Action.c(31): lrs_send(socket4, buf8)
    Action.c(33): lrs_receive(socket4, buf9)
    Action.c(33): Mismatch (expected 134 bytes, 42 bytes actually received)
    Action.c(35): lrs_send(socket4, buf10)
    Action.c(38): lrs_receive(socket4, buf11)
    Action.c(38): Mismatch (expected 17520 bytes, 42 bytes actually received)
    Action.c(41): lrs_create_socket(socket5, TCP, ...)
    Action.c(43): lrs_send(socket5, buf12)
    Action.c(45): lrs_receive(socket5, buf13)
    Ending action Action.
    Ending iteration 1.
    Ending Vuser...
    Starting action vuser_end.
    Ending action vuser_end.
    Vuser Terminated.
    主要来看一下蓝色的部分,因为没有关联,服务器是返回了42字节的数据,但是和录制时的数据是不同的。所以会mismatch。这里可以在LOG把Mismatch的值打印出来,不过太长了,我就不打印了。^@^。
    3         转到树视图做关联
    选择buf1看到数据:
    DATALEN{{155}}000000USERID{{90}}USERNAME{{DMS/xcf/xb5/xcd/xb3WEB/xb2/xe9/xd1/xaf/xd5/xca/xbb/xa7}}USERDESCRIBE{{/xba/xfe/xd6/xdd/xb5/xe7/xc1/xa6/xbe/xd6//DMS/xcf/xb5/xcd/xb3WEB/xb2/xe9/xd1/xaf/xd5/xca/xbb/xa7}}DEPARTNAME{{/xce/xb4/xd6/xaa}}ADMIN{{0}}CLIENTSESSIONID{{2}}
    选择CLIENTSESSIONID{{2}}中的2.右击后选择:create parameter。在弹出窗口中。看到默认的是用lrs_save_param,这个函数只能关联固定长度的数据。如果是固定的话,到这里点击一下OK,就关联成功了。LR会自动生成语句并且提示检查其他的需要关联的地方。弹出一个窗口提示。
    而我这里的sessionID是动态的值。所以需要选择:extract parameter data using boundaries复选框。这时生成的语句是这样的:
    lrs_save_searched_string( "socket0", LRS_LAST_RECEIVED, "Parameter3", NULL, NULL, -1, 152, 1 );
    左右边界是NULL空的,这里点击left的浏览,弹出选择左边界的窗口,用鼠标选择:SESSIONID{{,点击Done。
    再点击right的浏览,选择}}。
    就确定了左右边界了。
    这里的语句如下:
    lrs_save_searched_string("socket0",LRS_LAST_RECEIVED,"Parameter4","LB/BIN=SESSIONID{{", "RB/BIN=}}", 1, 0, -1);
    一路小跑点OK。
    弹出提示是否替换所有符合左右边界的值。
    点击yes。LR会自动搜索所有需要关联的地方并替换。
    再转到脚本视图,看到脚本如下:
     lrs_create_socket("socket0", "TCP", "LocalHost=0", "RemoteHost=192.168.1.114:5560", LrsLastArg);
           lrs_send("socket0", "buf0", LrsLastArg);
           lrs_receive("socket0", "buf1", LrsLastArg);  
       lrs_save_searched_string("socket0", LRS_LAST_RECEIVED, "Parameter1", "LB/BIN=SESSIONID{{", "RB/BIN=}}", 1, 0, -1);
        lr_output_message("小样还抓不到你!你不就是: %s嘛!",lr_eval_string("{Parameter1}"));       lrs_create_socket("socket1", "TCP", "LocalHost=0", "RemoteHost=192.168.1.114:5560", LrsLastArg);
           lrs_send("socket1", "buf2", LrsLastArg);
           lrs_receive("socket1", "buf3", LrsLastArg);
    看蓝色部分。后面一句输出是我加上去的。
    这样就关联成功了。
    4         再次回放
    看到LOG如下:
    Virtual User Script started
    Starting action vuser_init.
    Ending action vuser_init.
    Running Vuser...
    Starting iteration 1.
    Starting action Action.
    Action.c(4): lrs_create_socket(socket0, TCP, ...)
    Action.c(6): lrs_send(socket0, buf0)
    Action.c(8): lrs_receive(socket0, buf1)
    Action.c(10): lrs_save_searched_string(socket0, get_last_received_buffer, Parameter1, LB/BIN=SESSIONID{{, RB/BIN=}}, 1, 0, -1)
    Action.c(12): 小样还抓不到你!你不就是: 8嘛!
    Action.c(14): lrs_create_socket(socket1, TCP, ...)
    Action.c(16): lrs_send(socket1, buf2)
    Action.c(18): lrs_receive(socket1, buf3)
    Action.c(20): lrs_create_socket(socket2, TCP, ...)
    Action.c(22): lrs_send(socket2, buf4)
    Action.c(24): lrs_receive(socket2, buf5)
    Action.c(26): lrs_create_socket(socket3, TCP, ...)
    Action.c(28): lrs_send(socket3, buf6)
    Action.c(30): lrs_receive(socket3, buf7)
    Action.c(32): lrs_create_socket(socket4, TCP, ...)
    Action.c(34): lrs_send(socket4, buf8)
    Action.c(36): lrs_receive(socket4, buf9)
    Action.c(38): lrs_send(socket4, buf10)
    Action.c(41): lrs_receive(socket4, buf11)
    Action.c(44): lrs_create_socket(socket5, TCP, ...)
    Action.c(46): lrs_send(socket5, buf12)
    Action.c(48): lrs_receive(socket5, buf13)
    Ending action Action.
    Ending iteration 1.
    Ending Vuser...
    Starting action vuser_end.
    Ending action vuser_end.
    Vuser Terminated.
    看,输出了:
    Action.c(12): 小样还抓不到你!你不就是: 8嘛!
  • 相关阅读:
    [Luogu] 借教室
    [Luogu] 子共七
    [Luogu] 让我们异或吧
    【bzoj1030】[JSOI2007]文本生成器
    HDU3068 最长回文
    【bzoj2342】[Shoi2011]双倍回文
    【NOIP2012】借教室
    HDU2203 亲和串
    【POJ2001】Shortest Prefixes
    vodevs3031 最富有的人
  • 原文地址:https://www.cnblogs.com/shengs/p/4358250.html
Copyright © 2011-2022 走看看