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嘛!
  • 相关阅读:
    SQL Server Audit监控触发器状态
    SQL Server 数据变更时间戳(timestamp)在复制中的运用
    SQL Server 更改跟踪(Chang Tracking)监控表数据
    SQL Server 变更数据捕获(CDC)监控表数据
    SQL Server 事件通知(Event notifications)
    SQL Server 堆表行存储大小(Record Size)
    SQL Server DDL触发器运用
    SQL Server 默认跟踪(Default Trace)
    SQL Server 创建数据库邮件
    SQL Server 跨网段(跨机房)FTP复制
  • 原文地址:https://www.cnblogs.com/shengs/p/4358250.html
Copyright © 2011-2022 走看看