zoukankan      html  css  js  c++  java
  • 在loadrunner中使用winsocket协议编写脚步三部曲

     

    这两天写了一个winsocket的脚本,没有通过录制的方式,是直接手写的。下面贴出来和大家分享:

    脚本的写法很简单,大体说来,就像把大象放进冰箱一样,总共分三步:

    第一步:把冰箱门打开。

    //建立到服务端的连接
        rc =     lrs_create_socket("socket0", "TCP", "LocalHost=0", "RemoteHost=128.64.64.23:8988", LrsLastArg);
    if (rc==0) 

           lr_output_message("Socket  was successfully created "); 

    else 

           lr_output_message("An error occurred while creating the socket, Error Code: %d", rc); 

    第二步:把大象装进去。
     
       lrs_send("socket0", "buf0", LrsLastArg);   //往"socket0"发送"buf0"中的数据


       lrs_receive("socket0", "buf1", LrsLastArg);//将"socke0"中返回的数据存放到"buf1"中


    第三步:把冰箱门带上。
        
        //关闭连接
        lrs_close_socket("socket0");

    大家肯定已经看出来了,整个关键是在第二步,要把这么一头大象装到冰箱里可不是件容易的事情,我们要对传送的数据做一些处理才行。如果大家有进行过winsocket协议的脚本录制就会知道,LR会把你发送的数据包内容写到data.ws这个文件中,那么我们在此也同样应该把数据写到data.ws中去。假设我要发送的是“00100312303456”这一串字符,那么我就直接把它写到data.ws中,脚本如下:


    ;WSRData 2 1

    send buf0 10

    "00100312303456"  //注意要加""

    recv buf1 128


    -1

    运行脚本,可以看到执行成功。在日志信息中可以打印出发送的BUFFER和接收到的BUFFER内容。

    接下来,我们要对发送的字符串进行参数化,让脚本每次发送的字符串都不一样,怎么做呢?
    方法有两种:
    1、直接参数化。在data.ws中是可以直接进行参数化的,具体操作我就不多说了。要注意的是默认的参数名称符号是尖括号(<>),和HTTP协议的大括号({})不同(搞不懂为什么LR要把不同协议的默认参数名称符号设成不一样,这不是折腾人嘛)。脚本如下:

    send buf0 106 
    "<string>"  //string是自定义的参数名

    这种方法最简单,也容易理解。

    2、第二种方法则麻烦一点,下面重点做个介绍。(不是我故意要找麻烦,而是因为我每次遇到的问题总是要比一般的情况麻烦一点,5555~~)

    事情是这样的:话说如果我要发送的数据是很通过简单的方法拼接起来,举个简单的例子,比如是“用户名(假设是123)+密码(假设是456)”,在这种情况下,使用第一种方法就够用了,我可以设置两个参数<username>和<password>,写成

    send buf0 106 
    "<username><password>"

    的方式就可以了。

    但是这边的情况稍微复杂一些,发送的数据格式还需要加上字符串的长度,比如在上面的例子中,需要这样表示:00100312303456。
    前四位0010是表示后面发送的字符串总长度是10,后面的03则表示用户名有3位,再后面的123才是真正的用户名,再后面的03456也是同样的道理。而每次发送的用户名长度不同,字符串也就不同,比如用户名如果是1234,那么我的报文就应该是这样“001104123403456”这样一来,我就不能通过简单地拼接的方式来发送了,而需要再对它进行一些处理。

    我的方法是在action中进行字符串的拼接和处理:
     char data[200];
     char length[20];

     len = strlen(lr_eval_string("{usermame}"));
     sprintf(length,"%d",len);
     strcat(data,length);
     strcat(data,"{username}");

    然后,再通过lrs_save_param_ex函数把该数据保存到data_param参数中。

    lrs_save_param_ex("socket0", "user", data, 0, strlen(data),NULL, "data_param");

    最后,在data.ws文件中使用data_param参数发送数据包:

    send buf0 "<data_param>"
     
  • 相关阅读:
    dubbo入门(一)
    java中文件操作《一》
    Unity 游戏框架搭建 2019 (七) 自定义快捷键
    凉鞋:我所理解的框架 【Unity 游戏框架搭建】
    Unity 游戏框架搭建 2019 (六) MenuItem 复用
    Unity 游戏框架搭建 2019 (五) 打开所在文件夹
    Unity 游戏框架搭建 2019 (四) 导出 UnityPackage
    Unity 游戏框架搭建 2019 (三) 生成文件名到剪切板
    Unity 游戏框架搭建 2019 (二) 文本复制到剪切板
    Unity 游戏框架搭建 2019 (一) 简介与第一个示例文件名的生成
  • 原文地址:https://www.cnblogs.com/shengs/p/4358256.html
Copyright © 2011-2022 走看看