Windows平台自动化测试工具基于的一些技术简介(笔记)

时间:2021-10-17 20:54:35

GUI: 用户图形接口。

 

1. Windows API

FindWindow, EnumWindows可用于查找到窗口句柄。

GetWindowText, GetWindowRect, GetWindowLong可用于获取窗口属性。

SetWindowText, GetWindowText可用于操作控件上显示的文字。

SetForegroundWindow用于设置顶层窗口。

GetForegroundWindow用于获取当前的顶层窗口。

GetActiveWindow

SetActiveWindow

...

优点:对标准Windows的控件支持还不错,较底层。

缺点:底层意味着复杂,需要多层的封装,开发效率低下,对Windows API的完全依赖。对非标准(自定义)控件,较难实现自动化,就算实现了代码不稳定,维护和分析结果的成本也很高。

 

2. MSAA——Microsoft Active Accessibility

IAccessible,本身是一个Com组件,最主要的是其接口提供的方法可以获取控件更详细的信息,也可以通过一些方法对控件进行简单的操作。

优点:用户只需跟IAccessible打交道,通过这个接口能获得的控件信息相对丰富,基本操作也不需要通过Windows Message的方式来实现。另外一个较大优点是自定义控件的支持。开发自定义控件时可以实现IAccessible的接口,并且通过这个接口,把一些属性的操作暴露出来,测试人员就可以将这个控件当做标准控件,并用MSAA来自动化。

缺点:并非为自动化测试设计,获取到的控件信息比Windows API多,但仍对自动化测试不够,仅支持一个基本操作,其它的仍需Windows Message。

 

3. UIAutomation

从架构上说UIA针对标准控件时通过UI Automation Proxy调用了MSAA Server,基本覆盖了MSAA功能。

UI Spy是UIA的一个小工具。

与MSAA比较:

1)Tree.broken Exception,维护成本提高

2)只能用.Net语言来写,运行在.Net托管堆中->性能差异

3)MSAA支持进程内操作

      UIA未定义支持,使用可能有性能问题

4)自定义控件支持好

 

4. Window Automation API 3.0

是对UIA和MSAA的升级。

Windows 7对自动化测试的支持将会更好。可用Managed Code和Unmanaged Code,基本解决上面UIA的问题。

Managed Code(托管代码) vs Unmanaged Code(非托管代码):

在公共语言运行库环境的外部,由操作系统直接执行的代码称为非托管代码,它必须提供自己的垃圾回收、类型检查、安全支持等服务,它与托管代码不同,后者从公共语言运行库中获得这些服务,而非托管代码是在运行库之外运行的代码。例如Com组件、Active X接口、和Win32 API这些都是非托管代码的示例。

 

自动化测试的实质是为了快速、高效地发现和预防回归缺陷,并非发现新缺陷(Test Monkey除外)。旨在解决成本问题。

 

UIAutomation无法产生鼠标、键盘事件->可用Win API

 

UI Spy使用:

焦点跟踪、悬停,注意run as Admin,可获得以下内容:

1)UI项和UI自动化属性值

2)控件模式实现

3)UI自动化事件信息

4)导航和键盘焦点

 

注意IE 8以上版本IE打开会有两个进程,大的为主进程,用于正在浏览的网页,小的是辅助进程,用于网页错误时恢复并reopen。

 

从UI 测试自动化的角度来看,意味着所测试的应用程序被称为服务器,测试工具被视为客户端。

UIAutomationClient.dll库实际上就是UI自动化客户端使用的测试自动化库。

UIAutomationTypes.dll库包含UIAutomationClient.dll和其它自动化服务器库使用的各种类型的定义。

UIAutomationClientSideProvider.dll包含一组与构建时不支持自动化的控件配件配合使用的代码,这些控件可能包括旧式控件和自定义的.NET控件。

UIAutomationProvider.dll库是一组接口定义,可供创建自定义UI控件和希望控件被UI自动化库访问的开发人员使用。

 

TreeScope是个枚举类型:

Element, Children, Descendants, Parent, Ancestors, Subtree(包含搜索的根和全部子代)

 

System.Windows.Automation.AndCondition代表一个与条件

System.Windows.Automation.NotCondition

System.Windows.Automation.OrCondition

System.Windows.Automation.PropertyCondition测试属性是否具有指定的值