如何从LoadRunner中的web_custom_request响应中获取值

时间:2016-06-28 10:45:29

标签: rest loadrunner

我有一个LR脚本,我用来在REST API上调用来下载文件。该文件已成功下载,但我还需要下载文件大小的值以进行验证。这是我在loadrunner控制台中看到的。

Action.c(50): web_custom_request("GetImage") was successful, 2373709 body bytes, 528 header bytes, 99 chunking overhead bytes.

我怎样才能得到值2373709?我尝试使用下面的代码,但它返回的大小与上面提到的有点不同,并没有解决目的。

HttpDownLoadSize=web_get_int_property(HTTP_INFO_DOWNLOAD_SIZE); 
lr_output_message("File Size %i", HttpDownLoadSize);

任何帮助将不胜感激。在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

HTTP_INFO_DOWNLOAD_SIZE属性存储最后一个HTTP响应总下载大小。这包括所有响应的标题和正文的总大小,以及可能的通信开销。 2373709 body bytes是特定步骤中获得的所有回复的总体大小,因此,如果您的自定义请求步骤中有多个请求/响应,则此数字将大于实际文件大小。

我建议验证您的回复体型。虽然没有标准API可以检索它(至少在LR 12.53中是最新的可用版本)。据我所知,你的反应是分块的,所以我不建议你采取任何有效的方法来做到这一点。这是一个相当低效的方法,基于将整个身体存储到临时缓冲区(两次!):

unsigned long length = 0;
char* tmp = 0;

web_reg_save_param_ex(
    "ParamName=Body", 
    "LB=", 
    "RB=",                  
    SEARCH_FILTERS, 
    "Scope=Body",
    "RelFrameID=1",
    LAST);

web_custom_request(...);

lr_eval_string_ext("{Body}", strlen("{Body}"), &tmp, &length, 0, 0, -1);
lr_output("body length is %d", length);
lr_eval_string_ext_free(&tmp);

此外,您可能需要使用web_set_max_html_param_len()增加最大HTML参数长度。

但是,如果您有一个包含Content-Length标头的非分组非压缩响应,则可以更有效地验证它:

web_reg_find("Text=Content-Length: 2373709",
    "Search=Headers",
    "RelFrameID=1",
    LAST);
web_custom_request(...);