loadrunner實現excel文件導出操作


  項目中需要對“商品信息”進行查詢及導出,但是loadrunner並不能錄制到“保存”這一操作。

  項目介紹:flex+Http協議;

  不能錄制的原因:

  在我們點擊了“導出”按鈕后,服務端已經生成一份我們需要的文件,之后的“另存為”也是一個下載功能,但是保存到本地的操作是本地讀寫操作,由於loadrunner是基於協議的,所以錄制不到該操作。

  處理步驟:

  (1)根據錄制到的web_url()請求,對其中的URL進行參數化;

  (2)根據flex_amf_call獲取服務端返回的數據;

  (3)C的一系列文件操作進行本地寫操作;

  實例:

  本次錄制到的下載路徑(在web_url函數中)為:http://192.168.1.1/erp/excel/excel2007.do?number=******&abc=******;在導出操作對應的flex_amf_call函數的XMLTreeEditor中獲取到的下載請求為:excel/excel2007.do?number=16091410574050259539,如下所示。

  看到這里,我意識到自己需要利用C的字符串處理函數,將Response的數據string提取處理,這里使用 lr_xml_get_values函數完成。

  同時也注意到,最終的URL帶有“abc=******”的字樣,考慮到是不是和查詢到的商品有關,於是在商品查詢相關flex的返回中尋找答案,結果找了半天都無結果,最后詢問開發,才知道這只是一個隨機數(⊙﹏⊙)b,為了防止從緩存中讀取數據使導出的數據不正確,也是醉了,看來溝通還是非常重要的。。。

  明白了URL的處理,接下來就是獲取到需要下載的excel文件,在web_url請求前添加 web_reg_save_param獲取下載的內容,可以使用log輸出觀察是否正確。

  最后使用 fwrite寫入本地。

Export
{
char *comparename = "excel/excel2007.do?number="; char new_exporturl[200] = "http://192.168.1.1/erp/excel/excel2007.do?number="; char exportname[100]; int flen; int time; char file[200] = "D:\\LRTest\\ERP_GoodsManage\\download\\"; //下載文件的保存路徑; long filedes; //保存文件句柄 lr_start_transaction("export"); flex_amf_call( "AMF3_call_11", "Gateway=http://192.168.1.1/erp/messagebroker/amf{CorrelationParameter_1}", "Snapshot=t133.inf", "ResponseParameter=response", //省略該請求詳細信息*********** LAST); lr_xml_get_values("XML={response}", "Query=/AMFPacket[1]/Messages[1]/Message[1]/AMF3[1]/object-externalizable-custom[1]/flex.messaging.messages.AcknowledgeMessageExt[1]/string[1]/text()", //使用loadrunner——》XMlTreeEditor中的Get_Path功能獲取路徑,比較重要,還不會自己寫。 "ValueParam=exporturl", LAST); lr_output_message("exporturl = %s", lr_eval_string("{exporturl}")); if( 0 == strncmp(lr_eval_string ("{exporturl}"),comparename,26)) //驗證number取值是否正確 { lr_end_transaction("export", LR_PASS); } else { lr_end_transaction("export", LR_FAIL); } strcpy( exportname,lr_eval_string("{exporturl}")+26); //指針偏移26次,也可以使用指針相減計算偏移 lr_output_message("exportname = %s", exportname); strcat( new_exporturl,exportname ); lr_output_message("new_exporturl = %s", new_exporturl);
strcat( new_exporturl,"&abc=0.9799411464482546" ); //不再隨機產生 lr_output_message("new_exporturl = %s", new_exporturl); lr_save_string( new_exporturl,"new_exporturl" ); web_set_max_html_param_len("10480");//大小設定為1M web_reg_save_param("filecontent", "LB=", "RB=", "Ord=1", "Search=BODY", LAST); lr_start_transaction("download"); web_url("excel2007.do", "URL={new_exporturl}", "Resource=1", "RecContentType=application/octet-stream", "Referer=http://192.168.1.1/erp/erp-flex-ria-1.0.20160909164625.swf", "Snapshot=t134.inf", LAST); // lr_output_message("filecontent :", lr_eval_string("{filecontent}")); strcat(file,exportname ); strcat(file,".xlsx" );
     //獲取文件下載大小 flen =web_get_int_property(HTTP_INFO_DOWNLOAD_SIZE); lr_output_message("下載文件大小是 %d KB", flen / 1024); lr_user_data_point( "flen",flen ); //添加了自定義數據采集,為了場景中觀察而已,與execl下載無關 time = web_get_int_property(HTTP_INFO_DOWNLOAD_TIME); lr_output_message("下載時間是 %d 毫秒", time); lr_user_data_point( "time",time ); //同上 if (flen) { if(NULL == (filedes = fopen(file,"wb"))) { lr_output_message("Open FileFailed:", lr_eval_string("{filecontent}")); return -1; } fwrite( lr_eval_string("{filecontent}"),flen,1,filedes ); fclose( filedes ); lr_end_transaction("download", LR_PASS); } else { lr_end_transaction("download", LR_FAIL); } // lr_end_transaction("download", LR_AUTO);   return 0;
}

  備注:當未定義下載文件的保存路徑 file 時,在fopen中使用導出文件的名稱exportname作為導出的path參數,即fopen(exportname,"wb"),此時默認的文件導出路徑為腳本的工作路徑;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM