ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

用 MemorySharp 打造自动化测试工具:模拟键盘鼠标实现 UI 回归测试

2026/8/18 15:57:15 拓冰建站 浏览量
用 MemorySharp 打造自动化测试工具:模拟键盘鼠标实现 UI 回归测试 用 MemorySharp 打造自动化测试工具模拟键盘鼠标实现 UI 回归测试【免费下载链接】MemorySharpA C# based memory editing library targeting Windows applications, offering various functions to extract and inject data and codes into remote processes to allow interoperability.项目地址: https://gitcode.com/gh_mirrors/me/MemorySharpMemorySharp是一款基于 C# 的内存编辑库面向 Windows 应用程序提供读写远程进程内存、注入代码以及模拟键盘鼠标输入等能力。本文将教你如何用MemorySharp 打造自动化测试工具通过模拟键盘鼠标实现 UI 回归测试把重复枯燥的手工点击与输入变成一条命令即可执行的自动化脚本大幅提升测试效率与稳定性。无论你是测试新手还是想进阶的开发者都能从中获得一份完整的实践指南。一、MemorySharp 是什么C# 内存编辑库的核心能力MemorySharp 是一个开源、易用、功能强大的 C# 内存编辑库专为 Windows 平台设计。它的设计目标是提供安全、简洁的 API让开发者可以像操作普通对象一样操作远程进程。核心能力包括进程交互获取进程信息、检查是否被调试、操作 PEB内存交互读写各类数据、分配/释放内存、修改内存保护属性窗口交互枚举窗口、获取主窗口、修改窗口位置与大小键盘模拟向窗口发送按键、输入文字鼠标模拟移动光标、单击/双击、滚动滚轮汇编注入注入并执行汇编代码、远程调用函数模块与线程注入/卸载模块、创建与挂起线程所有功能都通过一个统一的入口类 MemorySharp.cs 暴露其中Windows属性就是本次 UI 回归测试的主角——WindowFactory.cs。二、为什么 UI 回归测试需要模拟键盘鼠标UI 回归测试的目的是确保改动代码后原有功能没有被破坏。它通常包含大量重复操作反复填写表单、点击按钮、滚动列表、验证弹窗。如果全靠人工执行会有三大痛点耗时一套用例动辄上百步手工执行耗费大量时间不稳定人眼容易疲劳操作步骤易遗漏、易出错成本高每次发版都要占用测试人员大量精力而通过 MemorySharp 模拟键盘鼠标你可以在不干扰用户操作的前提下把整条测试链路自动化程序替你输入文字、点击按钮、滚动页面再配合内存读取校验结果真正实现一键回归。这就是自动化测试工具最实在的价值。三、模拟键盘输入给任意窗口打字的 3 个方法MemorySharp 的键盘模拟非常贴心无需激活窗口也能输入。它通过PostMessage直接向目标窗口投递键盘消息用户完全可以一边干别的事一边让脚本在后台操作被测程序。核心实现在 MessageKeyboard.cs基类 BaseKeyboard.cs 则提供了三种常用方法方法作用适用场景Write(text)向窗口写入一整段文字表单填写、搜索框输入Press(key)按下某个键方向键移动、快捷键触发PressRelease(key)按下后立即松开敲击回车确认、F1 帮助等单击键Press(key, interval)按住并周期性重复长按方向键滚动、连发操作来看看最直观的写法摘自官方示例与测试用例 KeyboardTests.csvar scintilla sharp.Windows.GetWindowsByClassName(Scintilla).First(); // 向编辑区写入文字 scintilla.Keyboard.Write(Hello, World!); // 按住方向键向下每 20ms 触发一次持续 3 秒 scintilla.Keyboard.Press(Keys.Down, TimeSpan.FromMilliseconds(20)); Thread.Sleep(3000); scintilla.Keyboard.Release(Keys.Down);四、模拟鼠标操作移动、点击、滚轮的完整教程鼠标模拟由 SendInputMouse.cs 实现它基于 Windows 的SendInputAPI行为更接近真实鼠标能触发更完整的事件链。基类 BaseMouse.cs 提供的核心方法如下方法作用典型用法MoveTo(x, y)移动光标到窗口内坐标定位到目标按钮ClickLeft()/ClickRight()单击左键 / 右键点击按钮、打开菜单DoubleClickLeft()双击左键打开文件、选中词块ScrollVertically(delta)垂直滚动滚轮滚动长列表、翻页ScrollHorizontally(delta)水平滚动滚轮横向滚动条操作一个完整的点击窗口左上角示例来自 README 官方示例var window sharp.Windows.MainWindow; window.Activate(); // 将窗口置为前台 window.Mouse.MoveTo(0, 0); // 移动到窗口左上角 window.Mouse.ClickLeft(); // 单击左键注意MoveTo的坐标是相对于目标窗口的库内部会自动换算为屏幕绝对坐标见 BaseMouse.cs 的MoveTo实现无需你手动计算窗口位置非常省心。五、从 0 到 1 搭建 UI 回归测试脚本的 5 个步骤用 MemorySharp 搭建一套自动化 UI 回归测试脚本只需 5 步定位进程通过进程名或 PID 打开目标程序实例化MemorySharp对象获取窗口用 WindowFactory.cs 的MainWindow、GetWindowsByTitleContains(标题)或GetWindowsByClassName(类名)拿到目标RemoteWindow执行操作组合键盘与鼠标 API按测试用例的步骤依次模拟输入校验结果用ReadT()读取内存中的状态值或用窗口属性标题、大小判断操作是否生效输出报告记录每个步骤的成功/失败生成测试报告例如一套登录表单回归用例可以这样组织var sharp new MemorySharp(Process.GetProcessById(pid)); var win sharp.Windows.GetWindowsByTitleContains(登录).First(); win.Keyboard.Write(test_user); // 输入账号 win.Keyboard.PressRelease(Keys.Tab); // 切换到密码框 win.Keyboard.Write(passw0rd); // 输入密码 win.Mouse.ClickLeft(); // 点击登录按钮 var result sharp.Readint(addr); // 读取登录状态整套脚本可以封装成类放入 CI 流程中定时执行实现真正的无人值守回归测试。六、把回归测试嵌入 Git Flow 与 CI/CD 流水线自动化脚本写好后下一步是让它成为团队流程的一部分。把回归测试接入Git Flow分支管理模型可以让每次合并、每个发版都有自动化保障具体策略如下feature 分支合入develop前先跑一遍针对新功能的 UI 冒烟测试develop 分支每次合并后触发完整 UI 回归测试保证日常集成质量release 分支冻结功能后只做 bug 修复同时跑全量回归确保发布质量hotfix 分支修复紧急问题后回归测试重点覆盖受影响模块上图正是本项目采用的 Git Flow 分支策略详见 README.md 中的 Git flow 章节。将自动化测试工具接入这套流程后测试工作就从发布前的临时冲刺变成了日常开发的一部分回归风险被持续、自动地消化掉。七、新手避坑指南常见问题与最佳实践在使用 MemorySharp 做自动化测试时这 4 个经验能帮你少走弯路⚠️注意 32 位支持当前版本的 MemorySharp 主要支持 32 位开发测试前请确认目标程序与测试程序位数匹配以管理员身份运行模拟输入和内存读写涉及系统级 API建议以管理员权限运行测试程序避免权限不足及时释放资源MemorySharp实现了IDisposable记得用using包裹用完即释放先小后大先写一条最简单的输入文字 校验用例跑通全链路再逐步扩充用例集排查问题更快八、总结用 MemorySharp 打造自动化测试工具并不复杂窗口定位 模拟键盘 模拟鼠标 内存校验四个能力组合起来就能构建出覆盖表单、点击、滚动的完整 UI 回归测试方案。配合 Git Flow 与 CI/CD 流水线测试将从人力密集型工作升级为自动化质量防线。如果你想亲自上手实践可以克隆本仓库到本地参考 test/IntegrationTests 目录下的现成用例从修改 KeyboardTests.cs 开始你的第一个自动化脚本。动手试一次你会发现 UI 回归测试原来可以这么简单【免费下载链接】MemorySharpA C# based memory editing library targeting Windows applications, offering various functions to extract and inject data and codes into remote processes to allow interoperability.项目地址: https://gitcode.com/gh_mirrors/me/MemorySharp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考