使用loadrunner进行报表导出下载的性能测试

几乎所有报表都提供导出下载功能,在实际的业务里面用户点击“导出”按钮后随即会进行下载,在服务器硬件性能和测试机性能相差较悬殊的前提下,个人不建议在性能测试脚本中执行该步骤,原因:

1.点击导出按钮到允许下载前的时间里面,系统实际上已经执行了为报表执行下载的处理工作,仅剩的一部是保存到本地计算机,而这一步实际消耗的资源仅仅是硬件和网络的IO;

2.测试机在执行性能测试场景的过程中应该避免出现无谓的资源开销避免本地的瓶颈影响测试结果,特别是网络带宽和硬盘读写,而在多线程执行脚本下载的过程中会发生大量的写操作(fopen函数)。


简单来说,只要实现对服务器返回所有内容保存到本地,就实现了“下载”的模拟,因此思路为:

1.首先,针对所有返回内容保存到本地,这里采用关联函数可以实现web_reg_save_param

web_reg_save_param("fcontent", "LB=", "RB=", "SEARCH=BODY", LAST);

注意:由于参数SEARCH默认是针对消息头域和消息体,而我们保存目标仅在返回的body中,所以必须设置为body;

2.然后,由于关联函数保存参数的参数值默认大小为1024字节,下载文件往往不止这个size,所以在使用关联函数之前需要使用函数:web_set_max_html_param_len重新设置参数size

web_set_max_html_param_len("90000");

3.最后,把参数写入到本地文件,使用fwrite( const void *buffer, size_t size, size_t count, FILE *file_pointer );

  const void *buffer:要把关联函数找到的参数作为常量写入,因此使用lr_eval_string函数把参数转换为常量

  size_t size:指定缓冲区的大小,也就是服务器响应的大小,使用web_get_int_property函数取得,所以需要在导出请求后面加入:

flen = web_get_int_property(HTTP_INFO_DOWNLOAD_SIZE);

  size_t count:指定数目,为1

  FILE *file_pointer:指定写入的文件路径:

    创建文件路径,使用到long fopen( const char *filename, const char *access_mode );

    const char *filename参数为写入文件的路径和文件名,例如 d:\报表.xls

    const char *access_mode存储模式参数为:wb,w为写,b也就是二进制模式,要求在windows中不要转义处理避免无法打开导出的报表,否则将会:

  因此写:

filedes = fopen("d:\\报表.xls", "wb")

  完成该步骤以后:

fwrite(lr_eval_string("{fcontent}"), flen, 1, filedes);

  4.关闭文件fclose(filedes); 


完成以上步骤以后,Action部分的脚本为:

web_set_max_html_param_len();web_reg_save_param(, , , , LAST);= web_get_int_property(HTTP_INFO_DOWNLOAD_SIZE);

filedes = fopen(, );

fwrite(lr_eval_string(), flen, , filedes);

fclose(filedes);

但是,这个脚本仅仅能在vugen中执行,在controller中执行时本地始终为一个文件,因此再新增一个参数表作为随机号避免文件名重复,设定为每次迭代更新,例如:

并进行路径字符串连接:

int flen;

long filedes;

char filename[1024], *a = lr_eval_string("{流水号}");//流水号参数表防止文件重名

strcpy(filename,"D:\\信息化项目投资计划建议表"); 

strcat(filename,a);

场景执行时候,效果如下:

这个脚本如果在controller中直接进行性能测试的话,跟实际还是会有点差距的,由于实际业务场景里面各个用户都是选择不一样的报表进行导出,因此再对导出请求中的两个报表名进行关联,ord属性配置为参数,让vuser每次选择不一样的报表进行导出,例如:

    web_reg_save_param_ex(        

    "ParamName=CorrelationParameter_2",        

    "LB=\">",        

    "RB=",        

    "Ordinal={报表行数}",

    SEARCH_FILTERS,        

    "Scope=Body",        

    "RequestUrl=*/CsgPlanDrawReportQuery.jsp*",

    LAST);

最后,就实现了报表模块中,针对各个不同报表执行导出操作并下载到本地的性能测试目的。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容