zoukankan      html  css  js  c++  java
  • 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内容:
     %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...

      

  • 相关阅读:
    在Centos 7下编译openwrt+njit-client
    开博随笔
    Chapter 6. Statements
    Chapter 4. Arrays and Pointers
    Chapter 3. Library Types
    Chapter 2.  Variables and Basic Types
    关于stm32不常用的中断,如何添加, 比如timer10 timer11等
    keil 报错 expected an identifier
    案例分析 串口的地不要接到电源上 会烧掉
    案例分析 CAN OPEN 调试记录 进度
  • 原文地址:https://www.cnblogs.com/zwh-Seeking/p/11119148.html
Copyright © 2011-2022 走看看