> 文档中心 > loadrunner2021+websocket性能测试(一)

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:
loadrunner2021+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函数中回调函数的名称即为该文件中定义的函数

总结

简单记录下,下章还是实际开发脚本