以前,給你們分享了LoadRunner編寫socket協議腳本的基本方法與規則,今天給你們分享下,如何從本地文件,讀取內容,並做爲報文,發送到服務端;該方法也是我在工做中遇到的一個難點,想經過這種方法,進行參數化幾個交易的報文,經過迭代讀取不一樣的文件,便可以發送不一樣的交易報文。html
1. int和end與默認一致,再也不作說明;併發
2. Action腳本編寫socket
#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參數中;此時,咱們能夠直接經過該參數名調用便可,如上。htm
ENDing...blog