处理 报文_性能测试:动态报文长度处理方法

谢邀!今天㳀谈下测试脚本开发中,报文长度动态变动的问题。可能小伙伴们刚接触性能测试时不太熟悉,到网上找各个资料,却觉得网上的方法可用,但不太方便,下面我整理一些常用方法,若小伙伴们觉得不太清楚,还麻烦回复我,我及时修订。条件说明:测试工具:LoadRunner11.0 & Jmeter5.0。协议:TCP。前提条件:报文开头含定长的字符串,表示报文内容的总长度,如:0004abcd,其中“...
摘要由CSDN通过智能技术生成

谢邀!

今天㳀谈下测试脚本开发中,报文长度动态变动的问题。

可能小伙伴们刚接触性能测试时不太熟悉,到网上找各个资料,却觉得网上的方法可用,但不太方便,下面我整理一些常用方法,若小伙伴们觉得不太清楚,还麻烦回复我,我及时修订。

条件说明:

  1. 测试工具:LoadRunner11.0 & Jmeter5.0。
  2. 协议:TCP。
  3. 前提条件:报文开头含定长的字符串,表示报文内容的总长度,如:0004abcd,其中“0004”表示后面还有4个字符“abcd”表示报文内容。
  4. 约定:为描述方便,上述“0004”称为报文长度,“abcd”称为报文内容

先说说LoadRunner(C语言实现):

1.一个TCP请求时。

思路:利用strlen函数,计算报文内容长度,把计算后的长度拼接报文内容前面。

一点碎碎念:网上常看见利用2个及以上同等长度的buffer或malloc/free函数来实现该思路,但我觉得存在优化的空间。

实现图解:

6e48c6e0b8499c475622d290cdab62be.png

脚本示例:

#include "lrs.h"
Action()
{
    
	int rc;

	int length=0;
	char lenOfhead[10];
	char buf[4096];

        // Step01:与入“报文内容”到Buffer
        // 这里应判定报文内容长度是否大于4096,若实际报文不可能超出该长度可不判定
	sprintf(buf+8,"%s",lr_eval_string(
		"test,this is a message,<vargs>"
		));
        // Step02:计算“报文内容”长度
	length += strlen(buf+8);      --+8,在这里是预留的8位定长的“报文长度”字符
        // Step03:格式化“报文内容”长度
        // 这里需要注意的时sprintf函数会在结束时定入字符串的结束标标,即最后面多一个x00
        // 这也是我单独使用一个小buffer存放格式化“报文长度”的原因
	sprintf(lenOfhead,"%08d",length);
        // 计算“总报文”的长度=“报文长度”+“报文长度”的长度(这里为8位定长字符),用于后面lrs_set_send_buffer函数发送TCP请求时使用
	length += 8;
        // Step04:完成报文拼接
	memcpy(buf,lenOfhead,8*sizeof(char));

	lr_output_message("buf:%s",buf);

	lr_start_transaction("trans01");

	rc=lrs_create_socket("socket1","TCP","RemoteHost=<IP_Port>",LrsLastArg);
	if(rc!=0)
	{
    
		lr_error_message("An error occurred while opening the socket1,Error code:%d",rc);
		return 0;
	}

	lrs_set_send_buffer("socket1",buf,length);
	lrs_send("socket1","buf1",LrsLastArg);
	lrs_set_recv_timeout(68,0);
	lrs_receive_ex("socket1","buf10","StringTerminator=</service>","Mismatch=MISMATCH_CONTENT",LrsLastArg);

	lrs_save_searched_string("socket1",NULL,"RET_CODE","LB=<data name="RET_CODE">","RB=</data>",1,0,-1);
	if(strstr(lr_eval_string("<RET_CODE>"),">000000<")!=
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值