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

发布时间:2026/8/18 15:57:11

用 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),仅供参考

相关新闻

xpack架构剖析:XDecoder/XEncoder如何统一JSON/XML/BSON编解码

xpack架构剖析:XDecoder/XEncoder如何统一JSON/XML/BSON编解码

2026/8/18 15:57:11

xpack架构剖析:XDecoder/XEncoder如何统一JSON/XML/BSON编解码 【免费下载链接】xpack convert json/xml/bson to c struct 项目地址: https://gitcode.com/gh_mirrors/xp/xpack xpack 是一个纯头文件(header-only)的 C 序列化库&…

NCSA Mosaic 2.7 的开源遗产:它对现代Web的10大深远贡献

NCSA Mosaic 2.7 的开源遗产:它对现代Web的10大深远贡献

2026/8/18 15:57:11

NCSA Mosaic 2.7 的开源遗产:它对现代Web的10大深远贡献 【免费下载链接】ncsa-mosaic NCSA Mosaic 2.7 项目地址: https://gitcode.com/gh_mirrors/nc/ncsa-mosaic NCSA Mosaic 2.7 是世界上最早的图形化网页浏览器之一,也是整个现代 Web 生态的…

Nabla渲染引擎快速入门:5分钟跑通你的第一个Vulkan示例程序

Nabla渲染引擎快速入门:5分钟跑通你的第一个Vulkan示例程序

2026/8/18 15:57:11

Nabla渲染引擎快速入门:5分钟跑通你的第一个Vulkan示例程序 【免费下载链接】Nabla Vulkan, OptiX and CUDA Interoperation Modular Rendering Library and Framework for PC/Linux/Android 项目地址: https://gitcode.com/gh_mirrors/na/Nabla Nabla渲染引…

Get cookies.txt LOCALLY 命令行集成与自动化脚本实战:从零到一写出你的全自动 Cookie 导出工作流

Get cookies.txt LOCALLY 命令行集成与自动化脚本实战:从零到一写出你的全自动 Cookie 导出工作流

2026/8/18 17:07:13

Get cookies.txt LOCALLY 命令行集成与自动化脚本实战:从零到一写出你的全自动 Cookie 导出工作流 【免费下载链接】Get-cookies.txt-LOCALLY Get cookies.txt, NEVER send information outside. 项目地址: https://gitcode.com/gh_mirrors/ge/Get-cookies.txt-LO…

扩展 dotcommon:如何为 Fish、Termite 等配置文件添加自定义统计器?

扩展 dotcommon:如何为 Fish、Termite 等配置文件添加自定义统计器?

2026/8/18 17:07:13

扩展 dotcommon:如何为 Fish、Termite 等配置文件添加自定义统计器? 【免费下载链接】dotcommon What do people have in their dotfiles? 项目地址: https://gitcode.com/gh_mirrors/do/dotcommon dotcommon 是一个开源的 dotfiles 配置统计工具…

Flipper Authenticator支持Steam令牌吗?如何在Flipper Zero上使用Steam验证码

Flipper Authenticator支持Steam令牌吗?如何在Flipper Zero上使用Steam验证码

2026/8/18 17:07:13

Flipper Authenticator支持Steam令牌吗?如何在Flipper Zero上使用Steam验证码 【免费下载链接】flipper-zero_authenticator Software-based TOTP/HOTP authenticator for Flipper Zero device. 项目地址: https://gitcode.com/gh_mirrors/fl/flipper-zero_authen…

SonarSearch入门指南:一文读懂Project Sonar子域名查询API

SonarSearch入门指南:一文读懂Project Sonar子域名查询API

2026/8/18 17:07:13

SonarSearch入门指南:一文读懂Project Sonar子域名查询API 【免费下载链接】SonarSearch A rapid API for the Project Sonar dataset 项目地址: https://gitcode.com/gh_mirrors/so/SonarSearch SonarSearch 是一个围绕 Rapid7 Project Sonar 数据集的子域名…

memtest_vulkan显存稳定性测试上手教程:5分钟揪出显卡“暗病“

memtest_vulkan显存稳定性测试上手教程:5分钟揪出显卡“暗病“

2026/8/18 17:07:13

memtest_vulkan显存稳定性测试上手教程:5分钟揪出显卡"暗病" 【免费下载链接】memtest_vulkan Vulkan compute tool for testing video memory stability 项目地址: https://gitcode.com/gh_mirrors/me/memtest_vulkan 你有没有遇到过这种场面&…

Zeal 8-bit OS快速入门:从零搭建Z80汇编开发环境的完整教程

Zeal 8-bit OS快速入门:从零搭建Z80汇编开发环境的完整教程

2026/8/18 16:57:13

Zeal 8-bit OS快速入门:从零搭建Z80汇编开发环境的完整教程 【免费下载链接】Zeal-8-bit-OS An Operating System for Z80 computers, written in assembly 项目地址: https://gitcode.com/gh_mirrors/ze/Zeal-8-bit-OS 想要在一台Z80计算机上运行自己的操作…

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

2026/8/17 1:28:42

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码

【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码

2026/8/18 1:03:22

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

2026/8/17 8:40:51

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

多智能体大模型辩论中的立场收敛:从伪共识到理性说服的评估方法

多智能体大模型辩论中的立场收敛:从伪共识到理性说服的评估方法

2026/8/18 0:06:29

1. 从一场“假辩论”说起:为什么大模型辩论会走向“伪共识”?最近在折腾多智能体大语言模型(Multi-Agent LLM)的辩论实验,发现一个挺有意思的现象。我让几个基于GPT-4的智能体就一个争议性话题(比如“远程办…

Frida动态代码插桩框架:从原理到实战的移动安全与逆向工程指南

Frida动态代码插桩框架:从原理到实战的移动安全与逆向工程指南

2026/8/18 0:06:29

1. 从“黑盒”到“白盒”:为什么我们需要Frida在移动安全、逆向工程甚至是一些自动化测试的场景里,我们经常会遇到一个让人头疼的问题:面对一个编译好的、没有源代码的应用程序,我们如何知道它在运行时内部发生了什么?…

ECharts饼图中心文字配置指南:从label与title区别到动态交互实现

ECharts饼图中心文字配置指南:从label与title区别到动态交互实现

2026/8/18 0:06:29

1. 从“空心”到“有魂”:为什么要在饼图中间加文字?如果你用过ECharts画饼图,大概率会注意到一个现象:默认生成的饼图中间是空心的。这个设计本身没问题,它清晰地展示了各个扇区的占比关系。但在很多实际的业务场景里…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/17 12:00:53

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/15 10:10:27

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/18 12:20:24

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…