LR编写Socket脚本方法2(从文件读取报文)

 

  之前,给大家分享了LoadRunner编写socket协议脚本的基本方法与规则,今天给大家分享下,如何从本地文件,读取内容,并作为报文,发送到服务端;该方法也是我在工作中遇到的一个难点,想通过这种方法,进行参数化几个交易的报文,通过迭代读取不同的文件,即可以发送不同的交易报文。

1. int和end与默认一致,不再做说明;

2. Action脚本编写

#include "lrs.h"


Action()
{

        int rc,rv;//保存连接成功返回值
	char *recvBuf;//保存接收数据的内容
	int recvLen;//保存接收数据的大小


    int count, total = 0; 
    char buffer[1000]; 
    long file_stream; 
    char * filename = "E:/LR_date/ZHQZ/LR_scripts/baowen.txt"; 
    if ((file_stream = fopen(filename, "rb")) == NULL ) { 
        lr_error_message ("Cannot open %s", filename); 
        return -1; 
    } 
    // Read until end of file 
    while (!feof(file_stream)) { 
        // Read 1000 bytes while maintaining a running count 
        count = fread(buffer,sizeof(char), 1000, file_stream); 
        lr_output_message ("%d bytes read", count); 
//		lr_output_message ("读取文件的buffer内容:\n %s", buffer);
        if (ferror(file_stream)) { /* Check for file I/O errors */ 
            lr_output_message ("Error reading file %s", filename); 
            break; 
        } 
        total += count; // Add up actual bytes read 
    } 
    // Display final total 
    lr_output_message ("Total number of bytes read = %d", total ); 
    // Close the file stream 
    if (fclose(file_stream)) 
		lr_error_message ("Error closing file %s", filename); 


//	memcpy(buffer+271,lr_eval_string("<custID>"),8);

	lrs_save_param_ex("socket0", "user", buffer, 0, strlen(buffer),NULL, "paraBuf"); 

	rc=lrs_create_socket("socket0","TCP","RemoteHost=188.123.123.233:1234",  LrsLastArg);


	lr_start_transaction("测试");//事务开始

	//发送socket请求消息(数据包内容放在data.ws中)
	lrs_send("socket0", "buf1", LrsLastArg); //取缓冲区buf0的报文并发送


	rv = lrs_receive("socket0", "buf2", LrsLastArg);//接收响应报文


	//获取最后收到的buffer和大小
	lrs_get_last_received_buffer("socket0",&recvBuf,&recvLen);


	/*设置检查点,验证返回数据是否成功,这个根据各交易具体情况进行判断,*/

	if(recvLen>3)
	{
		lr_end_transaction("测试",PASS);
	}
	else
	{
		lr_end_transaction("测试",FAIL);
		lr_error_message("测试失败!出错信息:[%s]",recvBuf);
	}

	lrs_free_buffer(recvBuf);//释放recvBuf内存空间,否则会引起内存泄露


	lrs_close_socket("socket0"); 

	
    return 0;
}

  脚本上半部分是指定从某路径下,读取文件内容。有人要说那我如果想对文件中,某一字段进行参数化怎么办;于是我们就可以利用memcpy这个函数进行参数化,举例如:memcpy(buffer+271,lr_eval_string("<custID>"),8); //这是对读取报文的第272位到279位通过调用参数化池custID的值,共8位字节进行参数化。

3. data.ws编写

;WSRData 2 1

send  buf1 683
"<paraBuf>"

recv buf2 350
""
-1

   其中,报文在Action中已经获取到,由lrs_save_param_ex函数关联存储到paraBuf参数中;此时,我们可以直接通过该参数名调用即可,如上。

 

ENDing...

 

  

 

转载于:https://www.cnblogs.com/zwh-Seeking/p/11119148.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值