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

How can I fetch a value from response of web_custom_request in 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??我尝试使用下面的代码,但它的大小 returns 与上面提到的有点不同,并没有解决问题。

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

如有任何帮助,我们将不胜感激。在此先感谢您的帮助。

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

我建议验证您的回复 body 尺码。虽然没有标准 API 来检索它(至少,在 LR 12.53 中,最新的可用版本)。据我所知,您的回复是分块的,因此我无法建议您使用任何有效的方法来执行此操作。这是基于将整个 body 存储到临时缓冲区(两次!)的相当低效的方法:

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 参数长度。

但是,如果您的 non-chuncked non-compressed 响应包含 Content-Length header,您可以更有效地验证它:

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