loadrunner下websocket协议性能测试(四)


文章目录

  • loadrunner下websocket协议性能测试(四)
  • 前言
  • 一、HTTP协议返回内容和socket协议关联
  • 二、自定义参数使用
  • 三、websocket返回报文参数提取及使用
  • 四、websocket事务检查
  • 五、添加场景执行测试
  • 总结



前言

经过前面三篇文章,websocket协议的性能测试脚本在loadrunner下基本已经完成,本篇主要记录下websocket脚本的参数化

一、HTTP协议返回内容和socket协议关联

上脚本直接:

web_reg_save_param("userId", "LB=", "RB=", "Search=Body", LAST);
	
	web_custom_request("web_custom_request",
		"URL=http://127.0.0.1:8080/rest/test",
		"Method=GET",
		"TargetFrame=",
		"Resource=0",
		"Referer=",
		"Body=",
		LAST);

熟悉http性能测试的应该明白上面脚本的作用,socket脚本可以直接再data.ws中使用<参数名>或{参数名}来使用提取的参数,不过要注意参数引用一定要放在上述脚本后面。

二、自定义参数使用

socket脚本中data.ws,选择需要参数的内容,直接参数替换,与http协议一样,不再详述

三、websocket返回报文参数提取及使用

先上脚本吧还是:

/**
	 * 定义指针变量,用于接受lrs_get_received_buffer返回数据
	 */
	char *ReturnBuffer;

	/**
	 * 发送报文至服务端 
	 */
	lrs_send("socket0","buf2",LrsLastArg);
	
	/**
	 * 设置读取结束标识
	 */
	lrs_set_receive_option(EndMarker,BinaryStringTerminator,"}");
	
	/**
	 * 接受报文,\x81\x1e{"command":21,"result":900000}
	 */
	lrs_receive("socket0","buf3",LrsLastArg);
	
	/**
	 * 使用lrs_get_received_buffer函数获取我们想要的body
	 */
	ReturnBuffer = lrs_get_received_buffer("socket0",2,30,NULL);
	
	/**
	 * 获取body后使用lrs_save_param_ex保存为参数,可以在buff中调用
	 */
	lrs_save_param_ex("socket0","user",ReturnBuffer,0,30,"ascii","testresult");
	
	lr_output_message("The last buffer's data is:%s/n", ReturnBuffer);
	
	lr_output_message("The last param's data is:%s/n", lr_eval_string("{testresult}"));
	
	
	return 0;

函数讲解:
lrs_get_received_buffer:接受指定长度的buff数据

char *lrs_get_received_buffer( char *s_desc, int offset, int length, char *encoding );

s_desc:socket描述符
offset:偏移量,即获取字符开始的位置
length:需要截取的长度
encoding :编码格式,NULL时即为客户端的编码格式

改函数可以获取指定的响应内容,后续做事务检查使用,也可以配合lrs_save_param_ex使用,进行参数化

lrs_save_param_ex:根据选项生成参数

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三种,分别代表用户数据(自己定义的字符串,如脚本中lrs_get_received_buffer返回的字符串这种的),静态数据(data.ws中定义的buf数据),最后接收的数据

buff:标识要保存哪个缓冲区的数据。type为user则填写自己定义的字符串变量名称,为static则填写data.ws中定义的buf名称,为received则忽略参数为NULL

offset:表示在指定buff中的偏移量,即参数保存的开始位置

length:表示参数保存的长度

encoding:表示解码方式,对于user类型,需要指定为ASCII或EBCDIC的一种,NULL即为ASCII,对于static和received类型则忽略,使用客户端的原始编码格式进行解码

param :为要保存的参数名称

注:参数提取完成后,可以使用{参数名}或<参数名>直接在data.ws中调用

四、websocket事务检查

上面使用lrs_get_received_buffer进行获取指定数据后可使用strcmp进行检查判断,确定事务是否成功
上脚本:

char *ReturnBuffer;
	
	/**
	 * 定义预期返回的code码
	 */
	char *code = "900000";
	

	lr_start_transaction("test");

	
	lrs_send("socket0","buf2",LrsLastArg);
	
	lrs_set_receive_option(EndMarker,BinaryStringTerminator,"}");
	
	lrs_receive("socket0","buf3",LrsLastArg);
	
	/**
	 * 提取实际的code码
	 */
	ReturnBuffer = lrs_get_received_buffer("socket0",25,6,NULL);
	
	
	lrs_save_param_ex("socket0","received",NULL,25,6,NULL,"testresult");
	
	
	
	lr_output_message("The last param's data is:%s/n", lr_eval_string("{testresult}"));
	
	lr_output_message("The last buffer's data is:%s/n", ReturnBuffer);
	
	lr_output_message("The code buffer's data is:%s/n", code);
	
	/**
	 * 对比实际值与预期值,判断事务是否成功
	 */
	if(strcmp(ReturnBuffer,code)==0){
		
		lr_end_transaction("test", LR_PASS);

	}else{
		
		lr_end_transaction("test", LR_FAIL);

	}
	
	
	return 0;

strcmp,通过对比两个字符串的值,确定事务是否通过

五、添加场景执行测试

不是工具使用的教程,所以不再详述啊
1.创建场景
2.添加windows负载机
3.执行场景

总结

到这里loadrunner11中websocket脚本开发和参数话基本全部完成了,中间踩了很多坑,后面把坑整理出来单独写吧,还有就是lrs协议写的脚本只能在windows的负载机上运行,无法在linux的负载机上运行,想在linux上跑tcp协议的话,需要自己去封装包,后面有时间整理完linux的资料再写吧。