LoadRunner TruClient协议通过内嵌真实的浏览器引擎,能完整执行页面中的 JavaScript、CSS 渲染和 AJAX 异步交互,因此可以高度模拟真实用户行为。
1. TruClient 为什么能模拟浏览器?
浏览器内核
早期使用 Firefox,后期引入的Chromium会像普通浏览器一样加载页面、分析DOM、执行JS、发送HTTP/WebSocket请求。
根据事件的录制和回放
VuGen会把你在页面上的点击、输入、滚动、等待等操作,翻译成clickElement、typeText等步骤,回放时也按真实浏览器时序执行。
完整客户端处理
单页应用React/Vue/Angular的路由切换、动态数据绑定、WebSocket 推送都能被TruClient自动感知,不需要像HTML协议那样手动拼请求。
2. 环境准备
安装LoadRunner完整套件或VuGen加TruClient组件。
协议选择:新建脚本时选择 TruClient Web。
浏览器配置:
进入 Runtime Settings > Browser 选择使用Chromium 或 Firefox。
可在 Internet Explorer Emulation 中模拟特定IE 版本(如仍需兼容旧系统)。
设置启动参数,如禁用图片、模拟移动端User-Agent(高仿真时建议保留图片/ CSS)。
3. 录制并回放一个脚本
场景:登录- 搜索产品 - 加入购物车 - 退出。
录制
新建 TruClient Web 脚本,点击红色录制按钮,TruClient 浏览器启动。
在地址栏输入被测网站 URL,正常执行操作。
在动作间隙,可以点击浮动工具栏的 添加事务,区分 Login、Search、AddToCart 等事务。
录制完成后停止,看到自动生成的步骤树。
回放证实
点击回放按钮,观察浏览器窗口的实际执行。如果出现找不到对象,可能是等待不足-这时就需要处理异步加载。
4. 模拟真实浏览器的配置
等待机制 - 处理异步和动态元素
真实用户会等待页面加载,TruClient 提供多种等待方式:
等待对象存在(最常用)
拖入 Wait for Object 步骤,选择 Visible或Exists,设置超时 30 秒。对象可以是下一页按钮、结果列表第一条等。
等待文本/属性
比如等待搜索完成字样出现或某个div的data-loaded属性变为true。
全局隐式等待
在 Runtime Settings - General -Wait Time 中设置每个步骤自动等待的默认超时。
自定义 JavaScript 等待
在脚本中插入 Evaluate JavaScript 步骤,如:
javascript
// 等待 ajax 请求完成 (示例使用 jQuery 的 active 计数)
function waitForAjaxDone(maxWait) {
var start = Date.now();
while (Date.now() - start < maxWait) {
if (window.$ && $.active == 0) return true;
sleep(200);
}
return false;
}
return waitForAjaxDone(30000);
思考时间(Think Time)
录制时 TruClient 会自动记录你在步骤间的停留时间。在 Runtime Settings > Think Time 中可以选择:
按录制时的真实思考时间回放
忽略思考时间(压力测试用)
按指定范围随机,如 3~8 秒,更贴近真实用户。
也可以手动编辑步骤间的 Think Time,在属性窗口修改 Wait time。
键盘和鼠标行为模拟
输入文本时,不要只用 typeText 一次性赋值,改为使用 Type slowly 模拟真人逐键输入,并勾选 random delay between keystrokes。
对鼠标操作,除了 click 外,可以用 mouseOver、mouseDown/mouseUp,或模拟拖拽。
Cookie / Session / 缓存
首次访问:运行时设置 Simulate new user each iteration 清除缓存和 Cookie,模拟新用户。
保留登录态:勾选 Simulate browser cache,并在脚本中把登录放到 Init 部分,Action 复用 Cookie。
针对 Token,可以用 Web Storage (localStorage/sessionStorage) 操作函数保存和恢复。
5. 参数化和动态数据处理
参数化表单数据
在 typeText 步骤的文本框中右键 - Parameterize,引用表格列(如 Username、SearchTerm)。可以将测试数据放在 Excel 或数据库中。
关联(Correlation)
单页应用经常返回 JSON 数据并动态填入页面,这时需要用关联捕获动态值:
使用 Object Property
如商品 ID 在某个隐藏 <div> 中,步骤中右键选择 Correlate Object Property,把值保存到参数 p_ProductId,后续请求中使用 {p_ProductId}。
JavaScript 关联
javascript
var raw = document.querySelector('#api-response-pre').innerText;
var obj = JSON.parse(raw);
return obj.orderId;
将返回值保存到参数。
证实检查点
必须添加证实,否则脚本可能假成功。常用方法:
Verify Object 检查登录后用户名是不是出现、购物车图标角标数字是不是正确。
Verify Text 检查“添加成功”等提示信息。
用 JavaScript 检查页面 URL 或元素属性值。
6. 仿真技巧
模拟网络状况
在 Runtime Settings - Network - Speed 中,可以模拟 3G/4G/WiFi 带宽和延迟,让回放更贴近真实移动场景。
处理 WebSocket / Server-Sent Events
TruClient 能自动捕获 WebSocket 帧,可在 Tools > TruClient WebSocket 监视器里查看。
可以在脚本中增加等待 WebSocket 特定消息的步骤:
录制时打开 WebSocket Monitor。
在接收到目的消息那一帧,右键 Add Step to Wait for Message,脚本就会等待该消息到达后才继续。
模拟多个Tab或弹窗
对于 window.open 弹窗,录制后会产生 Switch to window 步骤,回放时会自动跳转。
需要证实弹窗内容时,记得在切换窗口后再添加证实步骤。
自定义JavaScript步骤
很多复杂思路(如随机选择商品颜色、日期选择器)可以通过 Evaluate JS 实现:
javascript
// 随机选择一个复选框
var checks = document.querySelectorAll('.item-checkbox');
var idx = Math.floor(Math.random() * checks.length);
checks[idx].click();
return idx; // 可选输出
全局定时器和异步刷新
有些页面每隔几秒自动刷新数据(如股票行情)。可以插入 Wait for Object + Wait time 的组合,或者用 Do...While 循环等待某个值变化。
7. 性能调试和常见问题
这里列出最常见的几个坑及处理思路:
回放时对象找不到
原因多半是等待时间不足,或者定位符依赖了动态生成的 class / id。
对策:增加 Wait for Object 步骤,并改用更稳定的定位方式,如根据 XPath 或 data-testid 属性。
事务时间虚高
如果事务内包含了不必要的等待或大量静态资源下载,响应时间就不准确。
对策:保证事务只包裹重要业务交互,不要把 Think time 包进去;在调试期可禁用图片来提高回放速度,但最后负载测试时建议恢复以保持真实度。
内存 / CPU 占用过高
TruClient 每个虚拟用户都要启动完整的浏览器内核,资源消耗远高于 HTTP 协议。
对策:启用 Lightweight Mode,适当减少单个负载生成器上的 Vuser 数量,或增加负载生成器硬件配置。
无法录制文件下载或打印
这是浏览器功能的固有限制。
对策:对于下载,可改用 Web HTTP 协议并证实响应头;对于打印,可用 JavaScript 模拟打印动作,但无法实际证实预览内容。
8. 何时选用 TruClient?
单页应用、大量 AJAX、WebSocket 通信
前端框架动态渲染,URL 不变但 DOM 变化
需要精确模拟客户端性能(比如 JavaScript 执行耗时)
其他协议(如 Web HTTP/HTML)需大量手动关联和脚本编写
如果是纯 API 测试或静态页面,传统 HTTP 协议生成脚本更快、资源开销更低。
用TruClient模拟真实浏览器行为的重要就是 把虚拟用户当作真人-加入合理的等待时间、模拟渐进输入、处理异步事件、保留浏览器缓存和 Cookie、证实业务对象。当你把这些实战细节都融入脚本后,得出的性能数据才会更接近真实用户的体验。