没有合适的资源?快使用搜索试试~ 我知道了~
微软UI自动化测试的技术演变
需积分: 9 28 下载量 21 浏览量
2013-06-06
09:35:17
上传
评论 1
收藏 390KB DOCX 举报
温馨提示
试读
11页
讲述微软UI自动化测试的技术演变。 Windows平台的桌面开发技术, 从最原始的Win32 SDK,发展到.NET WinForm,一直到今天的WPF和Silverlight, 发生了翻天覆地的变化,相对应的UI自动化测试技术,也随之演变。
资源推荐
资源详情
资源评论
微软 UI 自动化测试的技术演变(上)
发布时间: 2010-1-28 16:07 作者: 熊力 来源: www.cnblogs.com/stbchina
字体: 小 中 大 | 上一篇 下一篇 | 打印 | 我要投稿 | 每周一问,答贴有奖
Windows
平台的桌面开发技术, 从最原始的 Win32 SDK,发展到.NET WinForm,一直到今天的 WPF 和 Silverlight, 发生了翻天覆地的变
化,相对应的 UI 自动化测试技术,也随之演变。
微软 UI 自动化技术揭秘将分两个部分介绍 Windows 平台桌面程序的自动化技术。上篇将介绍从 Win32 SDK 至今的 UI 自动化技术演变,下篇
将着重介绍最新的 UI Automation(UIA)的内部实现和使用技巧。
自动测试是指用一个程序自动地控制另外一个程序,模拟用户的操作进行测试。通常自动化测试涉及到下面三个步骤:
测试源侦测
测试源侦测是定位测试目标元素的过程。比如要测试 Windows 附件中的计算器,首先要把计算器窗口和其他程序比如写字板区分开。进一步
测试计算器窗口菜单的时候,需要首先定位菜单条的位置,获取第二层子菜单等等。简单地说,自动化测试首先要能够获取从桌面开始的整个 UI
树结构,定位到特定测试目标。
用户行为模拟
用户行为模拟指模拟用户的输入,比如鼠标、键盘和触摸笔的操作,中间可能会涉及 IME 输入法、组合键、特定用户习惯,比如输入速度的
模拟等。
测试目标检查
指获取测试元素的属性,比如读取窗口标题, Listbox 的子元素, Checkbox 的状态等等,以便进行测试检查。
Win32 SDK 和 Windows Message
在.NET 问世以前,Windows 平台上的 UI 程序无外乎两种技术:Win32 Windows SDK 或者 DirectX。由于 DirectX 多用于专业领域如游戏和
CAD,本文并不讨论。
无论是 MFC,VCL 还是 VB6,Win32 SDK 都是其根本,最终打交道的其实都是 HWND 和 Windows Message。实现上述自动化的三个步骤
无外乎三件法宝,Win32 API,Windows Message 和 Windows Hook。
测试程序首先通过 FindWindowEx 和 EnumWindow 遍历窗口和子窗口,找到测试元素比如某个按钮,然后可以通过 Windows Message 或者
API 检查测试目标。比如通过 WM_GETTEXT 或者 GetWindowText 读取窗口标题,通过 GetWindowRect 读取按钮坐标位置等等。对于用户行为
模拟,可以直接通过 SendKey API 来完成,当然也可以发送 WM_CHAR 或者 WM_KEYDOWN 通知等等。
除此以外,Windows Hook 更加丰富了技术的选取。通过 Windows Hook,测试人员还可以直接监控、 截取、模拟目标程序的 Windows 消息,
实现更灵活的模拟,检查甚至录制的功能。
Windows Spy++(图一)虽然不是测试工具,也算是使用这套技术的典型例子。通过 Windows Spy++可以定位任意窗口, 读取窗口属性,
监视窗口消息等等。
图一: Microsoft Spy++
采用 Win32 SDK 和 Windows Message 的优点是直接,灵活。由于直接使用 Win32 API,没有额外的学习曲线,遇上问题可以直接参考 Win32
SDK 解决。使用 Message Hook 使得测试程序可以灵活实现,直接对 Window Message 的操作不仅可以把很多情况化繁为简,还方便 test hook
的实现。(所谓 test hook,是指产品中为了方便测试而专门设计的隐藏功能,该功能对普通用户不可见,只是为了方便测试。)
缺点包括以下三个方面:
使用复杂,实现成本高。Win32 AP 的使用上有很多需要特别注意的细节, 比如有的 Win32 API 不能跨进程工作,有的 Windows Message 只
能发给当前线程所创建的窗口,稍有不慎,就导致测试程序不稳定。
过于底层,不便使用。为了方便测试用例调用,需要对 API 进行封装,增加了实现成本。同时 Win32 API 的也使得很多 VB 程序员不便调用。
再者, 不同的开发工具,比如 MFC, VCL,以及后来的.NET Framework,在内部实现上对 Win32 API 有很多细节的处理, 要实现出针对各种情
况都通用的测试框架,并非易事。比如, .NET 中的 WinForm Control 对 Win32 HWND 的维护是动态的,同一个 WinForm Control 的 HWND 在
程序的生命周期内是可能发生改变的,这一点对于依赖 HWND 作为唯一标识的 Win32 API 就是一个致命伤。
无法操作自绘窗口。比如打开 Excel 的工作表,会发现表格中的每一个 Cell 并没有对应到 HWND 上。Excel 的 cell 都是通过代码绘制,而不
是依赖于现成的 Win32 Control。这就使得 Win32 API 对于自绘窗口没有用武之地。
MSAA
MSAA 的全称是 Microsoft Active Accessibility。这是类似 DCOM 技术。技术模型是这样的,UI 程序可以暴露出一个 Interface,方便另一个程
序对其进行控制。MSAA 技术的初衷是为了方便残疾人使用 Windows 程序。比如盲人看不到窗口,但是盲人可以通过一个 USB 读屏器连接到电
脑上,读屏器通过 UI 程序暴露出来的这个 Interface,就可以获取程序信息,通过盲文或者其它形式传递给盲人。
MSAA 提供了如此方便的功能, UI 自动化测试自然可以借用这项技术。MSAA 暴露出来的 Interface 叫做 IAccessible。测试程序和目标 UI 程
序互操作流程如下:
1. 测试程序调用 Windows API: AccessibleObjectFromWindow,传入目标 UI 程序 HWND。
2. AccessibleObjectFromWindow 函数向 UI 程序发送 WM_GETOBJECT 消息。
3. UI 程序创建实现了 IAccessible 的内部类,然后通过 LresultFromObject API 把 IAccessible 接口返回给测试程序。
4. 测试程序拿到 IAccessible 接口,开始调用 IAccessible 接口函数操作测试目标。
IAccessible 接口里面的几个关键函数是:
* IAccessible::get_accChild/ IAccessible::get_accParent 通过这两个函数,调用者可以浏览目标程序的窗口关系树,定位到 UI 元素。
* IAccessible::accLocation/I Accessible::accHitTest 读取和分辨目标元素的屏幕位置。
* IAccessible::accName/ I Accessible:: accSelect 读取元素的名字,对 UI 元素进行指定的操作,比如选取 Listbox 里面的某一项等等。
* IAccessible::accValue 开发人员可以自定义 value 属性的实现。比如针对折线图控件,开发人员可以在 accValue 中返回折线的坐标数列。
MSAA 的理念类似于 test hook。通过主动让 UI 程序暴露一个接口来让调用者控制。在具体使用中,测试人员往往是结合 MSAA 和 Win32 API
操作,取长补短。一方面对于 UI 元素丰富的属性,比如 style,钩选状态,是否最大化和模拟用户输入等,继续采用 Win32 API。另一方面用
MSAA 的优势来弥补 Win32 API 的一些不足,比如:
由于 MSAA 有自己的 get_accChild 方法,使其控件树关系并不一定要和 Win32 HWNDd 关系对应一致。对于自绘窗口,虽然说只有一个
HWND,但是开发人员可以通过实现 IAccessible 接口来实现逻辑上的层次关系。比如 Excel 中就可以通过 IAccessible 把多个 cell 的子
IAccessible 接口暴露给调用者。
IAccessible 的实现是由开发者提供,开发者可以灵活地根据实际情况决定方法的实现。比如前面提到了折线图控件可以返回坐标数列。对
于.NET WinForm,微软在 Framework 中就提供了 IAccessible 的默认实现,这样在具体实现中,就可以处理.NET 动态维护 HWND 的细节等等
针对 MSAA 的工具也有很多,比如 AccExplorer(图二)可以像 Spy++一样对指定程序进行控件的树形浏览,检查 MSAA 属性等。
剩余10页未读,继续阅读
资源评论
yator
- 粉丝: 0
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- NC65 UAP65 流程开发 – 业务流 – 推单 详细笔记
- 两种计算CDF累加分布函数的Matlab程序,可以选择使用 .rar
- Windows操作系统介绍.zip
- 汉森的广义t分布的matlab程序(金融)cdf.zip
- Three.js介绍.zip0002
- 人工智能BBSO算法,MATLAB实现,很基本的人工智能算法,里面有很多源程序
- 高端大气科技互联网项目融资商业计划书产品公司品牌介绍PPT模板.pptx
- Sora AI文字生成视频实操教程、由给定的图片生成视频的教程说明书,祝你一臂之力 轻松上手Sora
- 网络安全说明:网络安全方面的资料,+适合网络安全的初学者
- 【移动应用开发】HarmonyOS应用服务开发,移动购物应用
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功