这两天写了一个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>"

在loadrunner中使用winsocket协议编写脚步三部曲相关推荐

  1. java vuser脚本_loadrunner12中JavaVuser脚本的编写

    1.环境准备: 友情提示:用本地环境,不要用虚拟机 LoadRunner11----->对应JDK1.6版本(32位) LoadRunner12----->对应JDK1.7版本(32位) ...

  2. 理解LoadRunner中的局部变量和全局变量

    以下内容均选自个人作品:<精通软件性能测试与LoadRunner实战>   在C语言中,变量有效性的范围称变量的作用域.不仅对于形参变量,C语言中所有的量都有自己的作用域,按作用域范围不同 ...

  3. 在WinForm中通过HTTP协议向服务器端上传文件(转)

    相信用ASP.NET写一个上传文件的网页,大家都会写,但是有没有人想过通过在WinForm中通过HTTP协议上传文件呢? 有些人说要向服务器端上传文件,用FTP协议不是很简单吗?效率又高,为什么还要使 ...

  4. 软件开发中的开源协议详解!

    作者:pdai cnblogs.com/pengdai/p/9227404.html 开源不等于免费!为了加速我们的开发,我们会使用开源的软件和源码: 为避免商业风险,需要在使用时了解第三方如软件协议 ...

  5. 软件测试工具LoadRunner中如何定义SLA?--转载

    软件测试工具LoadRunner中如何定义SLA? 浏览:2242 | 更新:2017-04-09 22:50 SLA 是您为负载测试场景定义的具体目标.Analysis 将这些目标与软件测试工具Lo ...

  6. LoadRunner中Action的迭代次数的设置和运行场景中设置

    LoadRunner中Action的迭代次数的设置和运行场景中设置 LoadRunner是怎么重复迭代和怎么增加并发运行的呢? 另外,在参数化时,对于一次压力测试中均只能用一次的资源应该怎么参数化呢? ...

  7. 命令逐行显示_在LoadRunner中执行命令行程序之:popen()取代system()

    >>>推荐阅读<<< 1.性能测试学习笔记-场景设计 2.性能测试的重要意义 3.性能分析流程及方法 4.应用系统性能调优之性能分析 在LoadRunner中执行命 ...

  8. 设置loadrunner中每个mdrv.exe进程中包含的vuser个数

    设置loadrunner中每个mdrv.exe进程中包含的vuser个数 在loadrunner中,默认的是每50个vuser会使用一个mdrv.exe进程,但是有些时候vuser中的使用的线程太多就 ...

  9. 16.WireShark学习-在WireShark中添加新协议

    16. 在Wireshark中添加新协议 WireShark编程基础 使用Lua开发简单扩展功能 使用WireShark开发新的协议解析器 测试新协议 WireShark支持Lua语言编写的脚本 16 ...

最新文章

  1. gi克隆github文件_如何构建GitHub文件搜索功能的克隆
  2. 16_python_面向对象
  3. Javaweb环境配置,使用2014MyEclipse全过程详解!搭建JDK环境,Tomcat环境!破解2014MyEclipse。
  4. 深度强化学习落地指南:弥合DRL算法原理和落地实践之间的断层 | 文末送书
  5. Jvisualvm--JAVA性能分析工具
  6. python二维高斯分布生成_python 多维高斯分布数据生成方式
  7. 06006_redis数据存储类型——String
  8. 物化视图 sql server 1
  9. 不错的向上滚动广告代码
  10. Git学习总结(9)——如何构建你自己的 Git 服务器
  11. python自动导出数据脚本_使用python生成一个导出数据库的bat脚本文件的示例代码...
  12. IssueTrackerCSVS 代码笔记-数据层的反射工厂模式
  13. 艾泰路由器端口卡死问题
  14. Javascript内置对象之Date对象与HTML BOM
  15. TLSF算法1:二级索引的计算
  16. linux 光纤网卡 软路由,联想M720Q、光网卡、Pon stick、Openwrt我的完美软路由折腾记...
  17. Python实现点击选择验证码破解
  18. 思科痛失瑞士电信2.5亿法郎合同
  19. qq图的理解以及python的实现
  20. elaticsear学习常见错误

热门文章

  1. python怎么读文件名-python读取文件名并改名字的实例
  2. lua学习笔记之模块、包
  3. LeetCode Kth Smallest Element in a BST(中序遍历)
  4. 题目1112:拦截导弹
  5. 线程池ExcutorThreadPool的运行原理
  6. 函数:使用递归实现阶乘
  7. Python基础-socket编程
  8. 类的赋值运算符的重载函数
  9. hibernate中的 bag
  10. android ndk mac安装成功,Mac下Android Studio NDK 环境搭建并运行