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"),此时默认的文件导出路径为脚本的工作路径;

 

posted @ 2016-09-19 20:31  天使未必在场  阅读(2104)  评论(0编辑  收藏  举报