当前位置: 首页 > 测试知识 > LoadRunner录制桌面应用:Windows Sockets与COM/DCOM协议实战
LoadRunner录制桌面应用:Windows Sockets与COM/DCOM协议实战
2026-09-17 作者:cwb 浏览次数:96

针对LoadRunner录制桌面应用,Windows Sockets协议适用于根据底层TCP/UDP通信的应用,而COM/DCOM协议则用于根据微软组件对象模型的分布式应用。


协议选择根据应用架构准确定位

Windows Sockets:当桌面应用没有数据库,或直接通过Socket和服务器进行底层数据交互时,应选择此协议。它能在套接字方面捕获所有流量,适用于自定义通信协议的情形。

COM/DCOM:当应用根据C++/ATL、VB6等技术创建,且通过COM组件进行内部或分布式交互(如使用OLEDB连接数据库)时,应选择此协议。


在开始录制对话框中,必须将Application type(应用程序类型) 设置为Win32 Application,而不是Web录制用的Internet Application,否则将无法正确捕获桌面应用的流量。


Windows Sockets协议实战

1. 录制配置

程序途径:在Program to record  中,填写目的桌面应用.exe文件的完整绝对途径。

代理设置:许多桌面应用不按照系统代理。为保证录制成功,需在录制选项中配置LoadRunner代理,一般端口为8520,并保证应用流量经过该代理。


2. 脚本结构和数据文件

LoadRunner会将Socket通信的数据包内容自动写入data.ws文件。脚本一般包括四个步骤:

建立连接:lrs_create_socket("socket0", "TCP", "RemoteHost=服务器IP:端口", LrsLastArg);

发送数据:lrs_send("socket0", "buf0", LrsLastArg);

接收数据:lrs_receive("socket0", "buf1", LrsLastArg);

关闭连接:lrs_close_socket("socket0");


对应的data.ws文件示如下:


text

send buf0 10

"00100312303456"

recv buf1 128

-1


其中,buf0和buf1后的数字代表该缓冲区的字节长度。


3. 脚本技巧

参数化:在data.ws中直接使用尖括号< >(而不是HTTP协议的大括号{})来定义参数,如"<username><password>",并在VuGen中创建对应的参数列表。

处理变长数据:当服务器返回的数据长度不固定时,lrs_receive会因预期长度不一致而读取失败。解决方案是改用lrs_receive_ex,分两次读取:先读取固定长度的包头,分析出包体大小,再读取包体。


c

// 先读取4字节包头

lrs_receive_ex("socket0", "buf1", "NumberOfBytesToRecv=4", LrsLastArg);

// 分析包头中的长度信息,再读取包体...


自定义数据发送:对于需要动态构造的二进制数据包,可使用lrs_set_send_buffer函数直接发送内存中的数据,这在处理加密或特定编码时非常有用。

COM/DCOM协议实战

1. 配置过滤器(Filter)

COM/DCOM录制的重要是过滤器的设置。在Recording Options > COM/DCOM > Filter中,你可以精确控制录制范围,避免捕获大量无关的底层调用,使脚本更简洁。

按类型库过滤:可以展开类型库(Type Library)树,取消勾选不需要录制的类(Class)或接口(Interface)。

按环境过滤:可以分组过滤ADO、RDS和远程对象(Remote Objects) 等特定环境,如,仅勾选ADO库,则只录制和ADO数据库操作相关的调用。


2. 录制限制和替代

注意:部分LoadRunner版本(如试用版)可能不包含COM/DCOM协议,或在2023等新版本中该协议已不可用。


如果COM/DCOM协议不可用,可考虑以下替代方案:

Visual Studio集成:利用LoadRunner和Visual Studio的集成功能进行测试。

GUI Virtual User:通过模拟用户界面操作来生成负载。

Citrix/RDP协议:如果应用通过远程桌面方式访问,可选用这些协议。

数据库协议:如果应用主要通过OLEDB/ODBC和数据库交互,可直接选用对应的数据库协议(如MS SQL Server、Oracle)。


问题排查

录制事件为0(无脚本生成):

检查协议选择是不是正确,可尝试使用Protocol Advisor功能辅助检测。

确定应用程序类型已设为Win32 Application。

对于Windows Sockets,检查代理设置,保证应用流量被正确重定向到LoadRunner代理端口。


脚本回放失败(尤其在Socket协议中):

检查data.ws中recv缓冲区的预期长度是不是和服务器实际返回长度一致。这是最常见的失败原因,可使用lrs_receive_ex动态处理。

注意lrs_receive_ex的语法,如"NumberOfBytesToRecv=4"前不要有多余空格,否则可能引发内存访问违规错误。


数据乱码或无法分析:

确定录制选项中已启用字符集支持(Support charset),并根据需要强制指定UTF-8等编码。


Windows Sockets协议是数据包的精确构造和参数化,而COM/DCOM协议则更依赖于前期的过滤器配置。根据应用技术栈选择正确的协议。


文章标签: 软件测试 测试工具
咨询软件测试