一、socket脚本编写的基本函数

lrs_startup 初始化 WinSock DLL

lrs_create_socket 初始化套接字

lrs_send 在数据报上(UDP)或者向流套接字(TCP)发送数据

lrs_receive 接收来自数据报或流套接字的数据

lrs_close_socket 关闭打开的套接字

lrs_cleanup 终止 WinSock DLL 的使用,回收相关资源。VuGen 在 Windows 上使用 Windows 套接字协议支持应用程序的录制和回放;而在UNIX 平台上仅支持回放

lrs_free_buffer 释放分配给缓冲区的内存

lrs_get_last_received_buffer 获取套接字上接收到的最后的缓冲区及其大小

lrs_get_last_received_buffer_size 获取套接字上接收到的最后一个缓冲区的大小

lrs_set_recv_timeout(param1,param2)第一个参数是s,第二个参数是ms服务器响应超时

lrs_set_recv_timeouts(param1,param2)第一个参数是s,第二个参数是ms匹配收到报文长度

lrs_set_socket_options 设置套接字选项

lrs_set_receive_option 设置套接字接收选项

lrs_save_param将静态或者接收到的缓冲区(或缓冲区部分)保存到参数中

lrs_save_param_ex将用户、静态或接收的缓冲区(或缓冲区部分)保存到参数中

lrs_save_searched_string在静态或接收到的缓冲区中搜索出现的的字符串,将出现字符串的缓冲区部分保存到参数中

二、三个关联函数的介绍

lrs_save_param将静态或者接收到的缓冲区(或缓冲区部分)保存到参数中

lrs_save_param_ex将用户、静态或接收的缓冲区(或缓冲区部分)保存到参数中

lrs_save_searched_string在静态或接收到的缓冲区中搜索出现的的字符串,将出现字符串的缓冲区部分保存到参数中

(1) lrs_save_param

lrs_save_param("socket2","buf3","state",172,2);

lrs_save_param("socket2",NULL,"state",172,2);

建议用MULL,表示last receive buffer.

定位172位置的方法:选定buf3后按F7,转换成16进制后,找到你需要的字符,就可以定位了。

lr_error_message("error code is %s",lr_eval_string("<state>"));

Action.c(57): Notify: Saving Parameter "state = AA".

Action.c(58): Notify: Parameter Substitution: parameter "state" =  "AA"

Action.c(58): Error: error code is AA

(2)lrs_save_param_ex

例子:lrs_save_param_ex(socketID, "received", Buffer,0,NumberOfBytes, "ascii", "new_parameter");

int lrs_save_param_ex ( char *s_desc, char *type, char *buff, int offset, int length, char *encoding, char *param );

s_desc表示指定的Socket名称;

type表示要存储的数据类型,有“user”、“static”、“received”三种,分别代表用户数据(脚本中自己定义的字符串)、静态数据(data.ws中录制的数据)、最后接收的缓冲区数据;

buff表示要保存哪个缓冲区的数据。这个参数与type有对应关系,如果type是“user”、“static”两种,则需要指定具体的buffer名称;如果是“received”则可以忽略这个参数;

offset表示在buffer中的偏移量;

length表示要从buffer中保存的字节数;

encoding表示的是解码方式。对于“user”类型的buffer,需要指定其为ascii或者ebcdic中的一种,NULL值表示默认的格式为ascii。对于“static”与“received”两种类型的buffer,则可以忽略这个参数,使用客户端的原始编码格式来进行解码;

param表示要保存的参数名称。

(3)lrs_save_searched_string

lrs_save_searched_string ( char* s_desc, char* buf_desc, char* param_name, char* left_boundary, char* right_boundary, int ordinal, int offset, int param_len );

具体参数设置可看F1,帮助文档

lrs_save_searched_string("socket2", NULL, "p", "LB=AAAAAAA\\x01", NULL,1, 0, 2); FAIL

lrs_save_searched_string("socket2", NULL, "p", "LB/BIN=AAAAAAA\\x01", NULL,1, 0, 2);

lrs_save_searched_string("socket2", NULL, "p", "LB/BIN=\\x99\\a", NULL,1, 0, 2);

“\”要转义,并要使用“LB/BIN”不能缺少BIN,左边界出现的次数;offset偏移字节;如果没有右边界则是截长度,否则为-1

小结:

1、    相同点:

三个函数都可以截取报文中的字符串。

2、    三者的区别

(1)lrs_save_param_ex是lrs_save_param的扩展函数,功能相对更全一些,两者均是根据偏移量和查找的数据的长度来定位所需要的数据,所以只适合于返回报文基本固定的情况;

(2)lrs_save_searched_string则是如web脚本里web_reg_save_param,能够根据左右边界灵活处理对于可变返回报文中的字符串;【需注意的是:web_reg_save_param要放在需要关联的请求前,而lrs_save_searched_string是放在请求后】

(3)lrs_save_searched_string函数对于一些特殊情况也是很方便,比如需统计一个字符串总共出现的次数。

三、关于脚本超时相关介绍

socket的脚本里面,我们在LG里面执行到lrs_receive的时候,回放脚本的时候(忽略think time 的情况下)发现脚本回放很慢。但事务的响应时间并不长。在generator的日志里面看到,(Duration: 10.3054 Wasted Time: 10.0000)。其中wasted time为10秒。

这个wasted time 是开销在哪呢?先介绍2个函数:

lrs_set_recv_timeout(param1,param2)第一个参数是s,第二个参数是ms,执行lrs_receive命令后,等待服务器返回消息的超时时间,即服务器的响应时间。

lrs_set_recv_timeout2 创建连接成功,接收到服务器返回的消息后,获取匹配消息的超时时间。lrs_receive接收到数据后,会和预期的数据长度进行比较,如果长度不匹配,它将重新从套接字上读取数据,直到超时为止。

再来看前面的wasted time 就好理解了,在data.ws中recv  buf3 4010 ,buf3的长度原本预期为401,录制(或者设置)时接收buffer的大小(4010)和回放时接收的buffer大小预期(401)的不一样,lrs_set_recv_timeout2这个函数就会一直读取缓存区的值,在这里浪费10秒(默认为10秒)。

另外:当我们把这样的脚本放到controller中去执行,执行的结果就是响应时间是正常的,但是TPS很低,原因就是对于这个waiting time,LR并不把这个时间计入到响应时间中,但对于TPS来说,发起的笔数就相对来说少了,这个wasted time 相当于智能的迭代时间。

对于接收报文固定长度的,建议recv buf 长度写成和预期的一致,避免不必要的开销。

但我们也有可能遇到socket返回的响应buffer是变长的, 使用lrs_set_receive_option函数设置返回的属性,来实现这种动态的数据缓冲。

lrs_set_receive_option(EndMarker, EndMarker_None ) // 读取直到缓冲结束.

lrs_set_receive_option(EndMarker, StringTerminator , "\r\n") //读取直到"\r\n"符号出现 .

lrs_set_receive_option(EndMarker, BinaryStringTerminator , "\X00") 读取直到二进制符号"\\X00"出现

此方法适用于知道返回数据包的最后符号的情况,接收过程中读取此符号即停止接收。

2.或者我们手工指定loadrunner脚本,捕获多长的buffer。就需要使用如下代码来代替lrs_receive: lrs_receive_ex("socket1", "buf3", "NumberOfBytesToRecv=150", LrsLastArg); 到此为止,socket通讯单次的发送、接收应该基本没有什么问题了。至于多次交互涉及到的关联等技巧

Another option is mismatch:lrs_set_receive_option(Mismatch,MISMATCH_SIZE)

转载于:https://www.cnblogs.com/fanfly0517/p/4526785.html

loadrunner,socket脚本总结相关推荐

  1. LoadRunner的Socket脚本关联小技巧

    我们在socket脚本调试的时候经常会遇到很多问题,比如:socket包中繁杂的二进制编码,socket数据如何进行截取,如何对socket数据包进行参数化等等,以下几点内容是近期我在调试新加坡MTL ...

  2. loadrunner / socket level data and wininet level data

    s loadrunner录制脚本时,此网站证书无效/无法录制到脚本问题解决 http://www.51testing.com/html/64/497364-3569552.html lr录制后空白_l ...

  3. Loadrunner socket测试内容总结

    socket简介 这里请大家自行百度.这里测的是基于tcp的长连接socket,简单点说,不同于平时测试的web应用,socket像打电话一样,需要接通-保持通信-断开,且这三个应该是一个完整的过程, ...

  4. loadrunner写脚本常用C函数

    loadrunner写脚本常用C函数 strcat的串连两个字串. strchr返回指向第一次出现的字符串中的字符. STRCMP比较两个字符串来确定的字母顺序. STRCPY一个字符串复制到另一个地 ...

  5. loadrunner录制脚本,页面无法显示

    今天用loadRunner录制脚本,发现IE8打不开网页,好久进不去,要么如下页面 在网上找了好久的方案,都没成功.最后失望之下,逆行而为,将Port Mapping选择第2项WinlNet leve ...

  6. LoadRunner之脚本运行

    上一篇文章我们已经讲了如何编写一个简单的 LoadRunner 脚本,也讲了如何调试和查看日志:当然这只是准备阶段哦,脚本在编写的时候能跑,但是在真实的性能测试阶段就不一定能跑了,总之问题是有的,要慢 ...

  7. loadruner11 socket脚本-10053错误

    背景: socket 10053异常:软件主动放弃一个连接,原因是超时或协议错误.如果LR客户端报10053异常,说明LR在执行套接字操作时,发生通信超时.网络中断或其它异常,主动将Socket连接断 ...

  8. loadrunner mysql脚本_LoadRunner11_MySQL数据库脚本

    记录一次压测过程中,通过LoadRunner向MySQL数据库插入大量数据的过程. [1]需要使用到MySQL的libmysql.dll动态链接库,因此需要安装MySQL:注:本地安装的MySQL最好 ...

  9. 压力测试/性能测试工具LoadRunner录制脚本详细步骤(一)

    一.配置代理服务 1.打开脚本录制/编写窗口:打开LoadRunner,点击Create/Edit Scripts. 图1.打开LoadRunner 2.新建脚本: a.点击[File]-[New], ...

最新文章

  1. 如何设计并实现一个秒杀系统?(含完整代码)
  2. last modified php,lastModified属性_用法示例-javascript词典-js编程词典-php中文网
  3. 各种震撼的慢镜头,奇怪的知识又增加了!​
  4. 计算机网络实验报告嗅探器,计算机网络实验(Wireshark)
  5. 校园计算机知识竞赛活动简介,徽县一中计算机爱好者社团成功举办计算机知识竞赛活动...
  6. hdu2243考研路茫茫——单词情结
  7. 【华为云实战开发】8.如何快速搭建C#网站并实现持续集成?
  8. android电池充电动画,Android 开机充电图标和充电动画效果
  9. 相近字符串的匹配--编辑距离问题
  10. Red5流媒体服务器搭建
  11. 小程序直传阿里云OSS 踩坑
  12. 10068---谈谈Runtime类中的freeMemory,totalMemory,maxMemory几个方法
  13. 如何u盘装系统win10 64位?
  14. 计算机网络-DHCP的工作原理,IP地址如何获取
  15. P5556 圣剑护符 题解
  16. Android微信页面缓存清理,安卓微信浏览器缓存如何清理
  17. 常用算法解析------二分法
  18. [正则表达式] 匹配空行、空白行
  19. 2020 我的计算机保研历程
  20. template(模板)的介绍以及使用方法

热门文章

  1. 查看Entity Framework生成的SQL语句
  2. 实现基于Spring框架应用的权限控制系统(转)
  3. 使用pxe来实现无人值守linux
  4. windows防火墙支持FTP服务的设置方法
  5. openfire插件开发的四种方式
  6. java hibernate详细_Java事务管理学习之Hibernate详细介绍
  7. Notepad++编写的Verilog文件导入Vivado,中文注释乱码问题
  8. Ubuntu下安装DEB包时出现错误的解救方法
  9. wsl for pycharm vscode
  10. 代码荣辱观-以运用风格为荣,以随意编码为耻