You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过JMeter远程控制Windows机器完成桌面应用加载时长测试?

使用JMeter完成远程桌面应用加载时长测试的实现方案

JMeter本身不支持桌面GUI操作,需结合SikuliX(图像识别工具)和JSR223脚本实现需求,具体步骤如下:

一、环境准备

  • 安装JMeter
  • 下载SikuliX的jar包,放入JMeter的lib/ext目录,重启JMeter
  • 固定目标远程桌面的分辨率,避免图像识别失败;提前截取所需控件(如用户名输入框、密码框、目标文件图标等)的截图,保存到指定路径

二、测试计划配置

1. 线程组

添加线程组,设置测试循环次数(根据需求调整)

2. 启动远程桌面连接

添加JSR223 Sampler,选择Jython语言,编写脚本启动mstsc:

import os
# 替换为目标IP地址
os.system("mstsc /v:192.168.1.100")
# 等待连接窗口弹出,可根据实际调整等待时间
Thread.sleep(3000)

3. 输入域账号密码

添加Sikuli Sampler,编写图像识别脚本完成登录:

# 识别用户名输入框截图,输入账号(注意转义反斜杠)
type("username_input.png", "domain\\testuser")
# 识别密码输入框截图,输入密码
type("password_input.png", "yourpassword")
# 识别连接按钮截图,点击登录
click("connect_btn.png")
# 等待远程桌面加载完成,超时10秒
wait("desktop_bg.png", 10)

4. 记录开始时间

添加JSR223 Sampler,选择Groovy语言,记录开始时间并写入结果文件:

import java.text.SimpleDateFormat
def sdf = new SimpleDateFormat("HH:mm:ss")
def startTime = sdf.format(new Date())
// 暂存开始时间到变量
vars.put("START_TIME", startTime)

def resultFile = new File("load_time_result.txt")
// 首次运行时写入表头
if (!resultFile.exists()) {
    resultFile.write(" Start_Time    End_Time   Load_Time\n\n")
}
// 写入开始时间
resultFile.append("  ${startTime}     ")

5. 双击目标文件

添加Sikuli Sampler,识别目标文件图标并双击:

// 识别目标文件截图,双击打开
doubleClick("target_file.png")

6. 等待应用加载完成

添加Sikuli Sampler,等待应用主窗口出现(替换为应用窗口的截图):

// 等待应用主窗口加载,超时120秒(可调整)
wait("app_main_window.png", 120)

7. 记录结束时间并计算加载时长

添加JSR223 Sampler,选择Groovy语言,完成时间计算和写入:

import java.text.SimpleDateFormat
def sdf = new SimpleDateFormat("HH:mm:ss")
def endTime = sdf.format(new Date())
vars.put("END_TIME", endTime)

// 计算加载时长(秒)
def startDate = sdf.parse(vars.get("START_TIME"))
def endDate = sdf.parse(endTime)
def loadTime = (endDate.getTime() - startDate.getTime()) / 1000

// 写入结束时间和时长到文件
def resultFile = new File("load_time_result.txt")
resultFile.append("${endTime}    ${loadTime} secs \n")

8. 断开远程会话

添加JSR223 Sampler,选择Jython语言,执行断开命令:

import os
# 执行tsdiscon命令断开远程会话
os.system("tsdiscon")

三、关键注意事项

  • 测试过程中,JMeter所在机器的桌面不能被最小化、锁定或遮挡,否则SikuliX无法识别图像
  • 控件截图需清晰,确保在目标远程桌面环境下能被准确识别
  • 等待时间参数(如Thread.sleep、wait的超时时间)需根据实际环境调整
  • 多线程测试时,需处理文件写入的并发冲突,可给每个线程分配独立的结果文件,或在Groovy脚本中添加同步锁

内容的提问来源于stack exchange,提问作者Ajith R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 22:57:32