发布新日志

  • LR中点鼠标做关联(winsock协议)

    2008-05-14 12:09:13

    LR中点鼠标做关联(winsock协议)

    字体:        | 上一篇 下一篇 | 打印  | 我要投稿  | 每周一问,答贴有奖

    今天写一下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中的数据到一个参数里。这个函数是用来在脚本中做关联的。

    前两个参数是为了指定特定的参数。

    在指定活动的socketbuffer之后,需要指定一个参数来保存数据。指定偏移量来显示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 );

    这个函数保存一个buffer或者一个buffer的某一部分到参数中。这个变量指定buffer中某种类型的数据被保存:用户buffer,录制的buffer,或者上一个接收到的buffer.推荐使用在用户数据中。

    [Z1] 

     

     

    下面说不用这么麻烦的操作的,直接点几下就可以了。

     

    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,在buf2send时就用到了它。

    2         回放一下

    在不关联时回放是一定会有问题的。我回放的结果是:

    Virtual User scrīpt 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。这里可以在LOGMismatch的值打印出来,不过太长了,我就不打印了。^@^



  • Loadrunner学习笔记_磁盘相关

    2008-05-14 12:04:29

     

    字体:        | 上一篇 下一篇 | 打印  | 我要投稿  | 每周一问,答贴有奖

            磁盘的读写(关注的部分)分为:sql server 数据的读写和换页. 
            sql server 在操作时,如果由换页造成磁盘忙于读写且性能下降的,不能说明此操作导致磁盘出现了瓶颈,而是说可能内存不足,先应解决内存不足的问题,然后再看磁盘的读写速率是否有问题。如果是由sql server 读写数据造成的性能瓶颈的,则说明要更换磁盘系统了。
     
     
    监视的参数:
     
    Memory:Page Faults/sec 
            每秒软性页面失效的数目(包括有些可以直接在内存中满足而有些需要从硬盘读取)较page/sec只表明数据不能在内存指定工作集中立即使用。
            如果该值偶尔走高,表明当时有线程竞争内存。如果持续很高,则内存可能是瓶颈。
     
    PhysicalDisk:% Disk Time计数器监视磁盘忙于读/写活动所用时间的百分比。
     
    PhysicalDisk:Current Disk Queue Length有多少系统请求在等待访问磁盘。等待 I/O 请求的数量。
     
            如果 PhysicalDisk:% Disk Time 计数器的值很高(大于 90%),则应再查看PhysicalDisk:Current Disk Queue Length的值,该值应该保持在不超过组成物理磁盘的轴数(大多数磁盘只有一个轴,独立磁盘冗余阵列 (RAID) 设备通常有多个轴)的 1.5 到 2 倍(也有说阀值:主轴数加 2),否则,说明磁盘可能是瓶颈。
     
    对磁盘逻辑分区的监视:
       Logical Disk:Disk Write Bytes/sec
       Logical Disk:Disk read Bytes/sec
     
            如果在同一硬盘上有多个逻辑分区,使用 Logical Disk 计数器而非 Physical Disk 计数器。查看逻辑磁盘计数器有助于确定哪些文件被频繁访问。
            通常,Ultra Wide SCSI 磁盘每秒可以处理 50 到 70 次 I/O 操作。
     
    对sql server 使用磁盘的监视:
            SQL Server:Buffer Manager Page Reads/sec 和 Page Writes/sec 计数器来监视sql server 对磁盘的读写
     
            若这些计数器的值将要达到硬件 I/O 子系统的容量极限,则需要减小这些值,方法是调整应用程序或数据库以减少 I/O 操作(如索引覆盖、索引优化或规范化),增加硬件的 I/O 容量或添加内存。
     
    参考(硬盘读写速率):
            现在的硬盘理论上可以支持到每秒80MB 的速率,但在实际运行时往往是达不到的,较好的情况下恒定读写速率可以达到每秒20MB 左右,这已经是一个非常理想的指标了.



    TAG: Loadrunner

我的栏目

数据统计

  • 访问量: 1620
  • 日志数: 3
  • 建立时间: 2007-12-11
  • 更新时间: 2008-05-14

RSS订阅

Open Toolbar