当前位置: 首页 > 测试知识 > LoadRunner软件性能测试工具的Vugen如何修改异步通信的Vuser脚本?
LoadRunner软件性能测试工具的Vugen如何修改异步通信的Vuser脚本?
2025-11-13 作者cwb 浏览次数30

在LoadRunner中使用VuGen处理异步通信,下面介绍修改Vuser脚本以适应异步通信的具体操作方法。


理解异步通信和扫描

在深入修改之前,我们需要理解VuGen如何处理异步通信:

异步通信模式:主要包括推送(Push)、轮询(Polling) 和长轮询(Long Polling)。这些模式不同于传统的同步请求-响应,服务器可以主动向客户端推送数据,或客户端需要频繁检查服务器更新。

异步扫描(Async Scan):VuGen录制脚本后,会启动一个异步扫描过程,自动检测脚本中的异步通信实例。请确保在录制选项中启用了此功能。

异步对话(Async Conversation):VuGen会将检测到的异步通信划分为一个或多个"对话"(Conversation),每个对话代表一个独立的异步交互单元。你可以在VuGen的Design Studio的异步选项卡中查看这些对话。

修改脚本的主要步骤

在VuGen完成异步扫描后,通常会自动对脚本进行修改。主要任务是验证和进一步完善这些自动修改的部分。这个过程主要包括以下步骤:

插入注册函数:VuGen会在异步对话开始前插入 web_reg_async_attributes 函数。这个注册型函数(意味着它必须在异步请求发起之前执行)用于标识异步对话的开始,并定义其行为模式(Pattern)、目标URL以及相关的回调函数。请确保它位于异步请求之前。


c

web_reg_async_attributes("Push_0", 

    "Pattern=Push", 

    "URL=http://push.example.com/example", 

    "RequestCB=Push_0_RequestCB", 

    "ResponseHeadersCB=Push_0_ResponseHeadersCB", 

    "ResponseBodyBufferCB=Push_0_ResponseBodyBufferCB", 

    "ResponseCB=Push_0_ResponseCB", 

    LAST);


添加注释说明:VuGen通常会在 web_reg_async_attributes 函数前添加详细的注释,说明这个异步对话的ID、包含的URL以及建议的回调函数。请仔细阅读这些注释。


处理原始脚本步骤:

对于推送(Push) 对话,VuGen通常不会删除原始录制的脚本步骤,但会插入额外的异步API函数。

对于轮询(Polling) 和长轮询(Long Polling) 对话,VuGen可能会注释掉或删除一些原始的脚本步骤或参数,如果这些步骤的功能将由它插入的异步函数来处理。必要时可能需要取消注释这些步骤。

标记对话结束:VuGen会在异步对话结束时插入 web_stop_async 函数来标记对话的终止。


c

web_stop_async("Push_0", LAST);


实现回调函数:这是最需要你投入精力的部分。VuGen的异步扫描会检测到需要回调函数,并可能在 AsyncCallbacks.c 文件中为你生成这些回调函数的空实现(或者直接在脚本中注释说明)。你需要根据测试需求,在这些回调函数中添加具体的处理逻辑。主要的回调函数类型包括:

RequestCB:处理异步请求。

ResponseHeadersCB:处理响应头信息。

ResponseBodyBufferCB:处理响应体数据。

ResponseCB:处理完整的响应。


不同异步模式的修改差异

VuGen会根据检测到的异步通信类型(推送、轮询或长轮询)对脚本进行不同的修改。这些主要差异:

推送 (Push):通常保留原始录制步骤,同时插入异步API函数和相关回调函数。

轮询 (Polling):可能注释或删除部分原始轮询步骤,因为这些步骤的功能将由插入的异步函数来处理。请检查这些被注释的步骤是否必要。

长轮询 (Long Polling):处理方式和轮询类似,可能注释或删除部分原始长轮询步骤,由异步函数接管相关逻辑。


调试和验证修改

脚本修改完成后,务必进行充分的调试和验证:

使用日志输出:在回调函数中使用 lr_output_message() 或 lr_error_message() 输出调试信息,这有助于跟踪脚本执行流程和数据传递。

设置断点:利用VuGen的断点功能,在主要位置(如回调函数开始处)暂停脚本执行,以便逐步观察变量状态和执行路径。

检查关联:修改后的脚本可能需要额外的关联操作。如果异步响应中包含动态数据(如令牌Token),且后续请求需要使用这些数据,你通常需要手动添加关联函数(如 web_reg_save_param_regexp)来捕获这些动态值。请记住,关联函数是注册型函数,必须放在它们要捕获内容的请求之前。

回放验证:修改并调试后,多次回放脚本,确保其能稳定、正确地模拟异步行为,不出现错误,并且业务逻辑完整。


示例

假设你录制了一个包含服务器推送消息的脚本,VuGen异步扫描后可能生成了类似以下结构的脚本(已简化):


c

// VuGen 自动添加的注释,说明异步对话和信息

web_reg_async_attributes("Push_0", "Pattern=Push", "URL=...", "RequestCB=...", "ResponseCB=...", LAST);

// 原始的或其他触发推送的请求(例如发起一个长连接)

web_url("start_push", ...);

// ... 其他脚本步骤 ...

// 异步对话结束

web_stop_async("Push_0", LAST);


同时,在 AsyncCallbacks.c 文件中,你会找到相关的回调函数框架,你需要在其中实现处理推送消息的逻辑。


处理异步通信脚本时,请牢记:

确保 web_reg_async_attributes 等注册型函数位于作用的请求之前。

仔细实现回调函数,这是模拟异步行为、处理响应数据的主要。

留意VuGen对原始脚本步骤的修改(如注释掉的步骤),根据测试逻辑判断是否需要保留或调整。

做好关联,处理好异步通信中的动态数据。


文章标签: 软件性能测试 测试工具 软件应用性能测试 应用性能测试 性能测试
咨询软件测试