loadrunner2021+websocket性能测试(一)
loadrunner2021+websocket性能测试(一)
文章目录
- loadrunner2021+websocket性能测试(一)
- 前言
- 一、LR2021关于websocket协议的简介
- 二、LR2021websocket脚本结构
- 总结
前言
loadrunner12版本之后对websocket协议有了直接的支持,最近项目有在用,做一下笔记,自己用的是loadrunner2021,12之后应该是通用的,当然lr12之后socket协议也可以在Linux的负载机上面运行了,可惜是收费的。
一、LR2021关于websocket协议的简介
LR12之后的版本,界面美化了,也增加了HTML5 WebSocket 支持,相较于之前用socket协议去写websocket的性能测试脚本,在LR12中直接使用websocket函数去写,简单了许多,不用头疼去组装报文,算头的信息及内存回收之类的问题,先简单讲一下新增的websocket函数吧
函数不多,就三个:web_websocket_connect, web_websocket_close, web_websocket_send
web_websocket_connect:连接函数
int web_websocket_connect("ID=conection_id", "URI=ws://server:port", ["Origin=value ", SecWebSocketKey=value ", "SecWebSocketProtocol=value ", SecWebSocketExtensions=value, OnOpenCB=func_name, OnMessageCB=func_name, OnErrorCB=func_name, OnCloseCB=func_name, ] LAST);
ID:socket通道描述符,一般为0,1,2
URI:websocket的连接地址,可以是IP+port,也可以是域名
Origin:为空即可
SecWebSocketKey:Sec-WebSocket-Key头的值。可选:WebSocket键值。不记录,但可以手动添加。
SecWebSocketProtocol:Sec-WebSocket-Protocol头的值。可选:只有在录制会话中检测到才会生成。
SecWebSocketExtensions:Sec-WebSocket-Extensions头的值。可选:只有在录制会话中检测到才会生成。
OnOpenCB:OnOpen事件的回调函数名
OnMessageCB:OnMessage事件的回调函数名
OnErrorCB:OnError事件的回调函数名
OnCloseCB:OnClose事件的回调函数名
示例:
/** * 回调函数名在WebSocketCB.c中定义,下面会讲 */web_websocket_connect("ID=0", "URI=ws://pumpkin:9876/", "Origin=http://pumpkin:9876", "OnOpenCB=OnOpenCB0", "OnMessageCB=OnMessageCB0", "OnErrorCB=OnErrorCB0", "OnCloseCB=OnCloseCB0", LAST);
web_websocket_send:消息发送函数
int web_websocket_send("ID=connection ID", ["Buffer=message_Text",] ["Buffer/BIN=message_Text",] ["Buffer/File=file",] "IsBinary=0/1", LAST);
ID:websocket通道唯一序号
Buffer:要发送到服务器的字符串。
Buffer/BIN:要发送到服务器的字符串的二进制表示形式。注意:Buffer或Buffer/BIN必须至少有一个参数存在。
Buffer/File:要发送的文件的路径名或UNC路径。如果文件存储在脚本目录中,则传递文件名。例如,“c:\myfolder\myfile.txt”, “\mymachine\mysharedfolder\myfile.txt”
IsBinary:指示API发送的消息是二进制(1、是、真或开)还是文本(0、否、假或关)。
注意:消息字符串按照此参数所指示的方式进行转换。例如,对于web_websocket_send(" ID=0 ", " Buffer/BIN= x61\x62\x63\x64\x65 ", " IsBinary=0 ", LAST),缓冲区以文本形式发送。
LAST:参数列表末尾的必需标记。
示例:
web_websocket_send("ID=0", "Buffer=sample text message", "IsBinary=0", LAST);
web_websocket_close:通道关闭函数
int web_websocket_close("ID=connection ID", ["Code=",] [ "Reason=",] LAST);
ID:websocket通道唯一序号
Code:WebSocket连接关闭代码。可以是1000到1011之间的整数。
Reason:表示闭包原因的字符串。
LAST:参数列表末尾的必需标记。
示例:
web_websocket_close("ID=0", "Code=1000", "Reason=OK", LAST);
二、LR2021websocket脚本结构
LR2021中开发websocket协议时不再使用socket协议,而是直接使用http协议进行开发,但是脚本文件结构和常规的http协议还是有区别的
websocket:
我们一个一个文件来看:
globals.h
#ifndef _GLOBALS_H#define _GLOBALS_H//--------------------------------------------------------------------// Include Files#include "lrun.h"#include "web_api.h"#include "lrw_custom_body.h"#include "WebSocketCB.c"#include "WebSocketBuffer.h"//--------------------------------------------------------------------// Global Variables#endif // _GLOBALS_H
globalst头文件主要用来引入脚本运行使用的相关函数头文件
WebSocketBuffer.h
#ifndef VUSER_WEBSOCKET_BUFFER_HEADER#define VUSER_WEBSOCKET_BUFFER_HEADERchar WebSocketReceive0[100];long WebSocketReceiveLen0 = sizeof(WebSocketReceive0) - 1;// (record-time: 82 bytes)
WebSocketBuffer主要用来存放接受buff
WebSocketCB.c
void OnOpenCB0 (const char* connectionID, const char * AccumulatedHeadersStr, int AccumulatedHeadersLen){//lr_output_message("WebSocket ID = %s connected", connectionID);//lr_save_param_regexp (AccumulatedHeadersStr,// AccumulatedHeadersLen,// "RegExp=Sec-WebSocket-Accept: (.+)\\r\\n",// "ResultParam=Accept",// LAST );//lr_output_message("Sec-WebSocket-Accept = [%s]",// lr_eval_string("{Accept}"));}void OnMessageCB0 (const char* connectionID, int isbinary, const char * data, int length){lr_output_message("recv message is :%s",data);/*if (isbinary) {lr_output_message("WebSocket ID = %s. [%d] bytes binary message received.", connectionID, length);}else {lr_output_message("WebSocket ID = %s. [%d] bytes text message received.", connectionID, length);}*/}void OnErrorCB0 (const char* connectionID, const char * message, int length){//lr_output_message("WebSocket ID = %s error occured. Error message = %s", connectionID, message);}void OnCloseCB0 (const char* connectionID, int isClosedByClient, int code, const char* reason, int length){//lr_output_message("WebSocket ID = %s closed. CloseCode= %d, CloseReason=%s", connectionID, code, reason);}
WebSocketCB.c是最重要的,LR2021对websocket的回调函数在改文件中定义,connect函数中回调函数的名称即为该文件中定义的函数
总结
简单记录下,下章还是实际开发脚本