pywinauto 自动化框架调研

简介:

什么是Pywinauto?
Pywinauto是基于Python开发的,用于自动化测试的脚本模块,主要操作于Windows标准图形界面。它可以允许你很容易的发送鼠标、键盘动作给Windows的对话框和控件。
其中,最主要功能为对windows标准控件的一系列动作可编程处理。包括对窗口的指定、鼠标或键盘操作、获得控件属性等等。程序的开始为对所需应用的启动或连接。获得程序连接后,pywinauto通过窗口的名称、类名、是否可见等属性寻找匹配的窗口,进而通过类似方法寻找用户所需的控件,并获得相应的句柄。之后,用户可通过易理解的编程方式对指定控件进行相关操作的编程,包括鼠标点击、键盘输入、判断控件间关系、获取控件属性等。


结构介绍
外结构



Pywinauto是建立在CPython之上的python应用模块,实现原理由C做底层实现,因此与JPython不能兼容。 
Python for windows 模块,使得windows api函数有了相应的python接口,其中的ctypes和win32api模块为api函数的对应应用封装了较为完善的接口集合。

 

内结构


 

程序的入口及对指定窗口或控件的操作,定义在application.py中。其中Application类进行对应用的开启和连接,WindowSpecification类自动映射到指定的窗口或控件上。 
HwndWrapper?.py,win32_controls.py,menuwrapper.py,common_controls.py中为Pywinauto对标准控件操作的定义。控件都由HwndWrapper类继承而来,其中对控件共有的基本属性进行了定义。在控件自己的定义中,对HwndWrapper类的一些属性进行了重载,同时也定义了具有自己特色的属性和操作。对控件属性值的获取和操作定义在handleprops.py,controlsproperties.py文件中。 
Win32defines.py,win32functions.py,win32structures.py文件中,为pywinauto对底层函数操作的定义和索引。其底层调用的是python的ctypes库函数所提供的接口。Ctypes库中封装了系统所使用的C语言数据类型和windows api函数操作等模块,并提供了相应的python语言接口,使用户通过python可对系统进行操作。

 

操作方法
通常采用的使用格式为: 
app = application.Application()
app.start_( )
app.window.control.Click() 
app[window][control].Click()


接下来,通过app[u‘无标题 – 记事本’][‘Edit’].Click()来介绍Pywinauto的控件操作流程:
通过app = application.Application() 创建应用,app.start_()启动或app.connect_()连接应用。之后向下层函数传递criteria,内容为[{‘process’ = 4320L, ‘ best_match’ = ‘无标题 - 记事本’}]。通过WindowSpecification._resolve_control( ) -> findwindows.py 寻找匹配的窗口。可通过process (或者class name, control_id等)找到handle,得到它是一个DialogWrapper类的结果。对于多个记事本已开启的情况,pywinauto会通过best_match进行匹配,使用Unique_dict数据结构,对各个窗口实行串匹配算法,选取匹配率最大的窗口句柄返回。
之后通过类似方法找到Edit控件,认定其为EditWrapper类,并找到类定义中的Click操作。 操作的具体实现还要依靠 handleprops.py的支持,底层调用 windows api函数实现。

功能分析
优点: 
a. 方便实现对windows标准控件的各种鼠标、键盘操作。 
b. 通过title、部分title、class name、是否可见等属性得到窗口或控件的句柄和指定。 
c. 方便得到控件的各种属性,包括内容、title、大小、坐标、是否可用等。 
d. 易于扩展。源于Python脚本语言的易扩展性,可以扩展pywinauto的功能,也可以将pywinauto作为一个模块引入更大的功能库。
 
局限性: 
a. 对非windows标准控件的操作无法实现。(为此,在测试中,我们为非标准控件的操作制作了C底层库及相应python函数接口,扩展了pywinauto) 
b. 无法实现对系统时间的调整和性能评测。(e.g. 不能做time.sleep()的内部调整) 
c. pywinauto仅局限于界面的自动化操作,其他系统操作(如网络操作)无法实现。 
d. 对于已知流程的操作编程较方便,但对于不可知流程或需要判断的流程操作,功能有限。


对Pywinauto的扩展

自动化测试中,对Pywinauto的扩展主要在以下两个方面:
虚拟控件操作的增加
底层调用HiUILib库函数实现。在win32_controls中加入VConWrpper类和相关操作实现,并在窗口指定的过程中增加相应寻找分支,使得对虚拟控件的定位和操作与标准控件基本相同。
其他实用操作的增加
在调研的过程中,我们发现了一些其他实用的操作。因此在操作中,我们将需要的函数加入到application,hwndWrapper等文件中,并增加了多处对win32api等库的函数调用。例如注册表项的增删改操作。


case组织

我们采用Python的unittest模块的基本结构,来组织自动化case。每一个大的功能模块,为一个类,继承与unittest.TestCase。通过在测试类中添加函数的形式,对测试类中的每一个测试点(即case)进行代码编写。测试类中,一定要覆盖的是setUp()和tearDown()函数,作为每一个单元测试函数的入口和出口。Unittest提供TestSuite类来集合和组织测试类中的多个测试函数。同时,提供了TextTestRunner类来运行TestSuite里的类,并返回通过、错误、失败的测试数量以及运行时间。

 

(作者:liurong)

 












本文转自百度技术51CTO博客,原文链接:http://blog.51cto.com/baidutech/743853,如需转载请自行联系原作者

相关文章
|
1月前
|
Java 测试技术 持续交付
深入理解软件测试中的自动化框架选择
【2月更文挑战第14天】在软件测试领域,自动化测试已成为提升效率、确保质量的关键手段。选择合适的自动化测试框架对实现高效稳定的测试至关重要。本文将探讨自动化框架选择的关键因素,包括项目需求、团队技能、维护成本以及集成能力,并分析当前流行的几种自动化框架的优缺点,以指导读者根据不同的测试场景作出明智的选择。
19 0
|
1月前
|
敏捷开发 分布式计算 测试技术
深入理解软件测试中的自动化框架选择与优化策略
【2月更文挑战第29天】 在软件开发的生命周期中,测试环节扮演着至关重要的角色。随着敏捷开发和持续集成的普及,自动化测试成为确保软件质量和加快产品上市速度的关键手段。本文将探讨在构建自动化测试框架时面临的挑战,分析不同类型自动化框架的特点及其适用场景,并提出一系列优化策略,旨在帮助测试工程师提高测试效率,确保测试结果的准确性。
17 0
|
2天前
|
监控 测试技术 数据安全/隐私保护
如何将代理IP集成到自动化测试框架中?
如何将代理IP集成到自动化测试框架中?
|
4天前
|
敏捷开发 监控 前端开发
深入理解自动化测试框架Selenium的架构与实践
【4月更文挑战第16天】 在现代软件开发过程中,自动化测试已成为确保产品质量和加快迭代速度的关键手段。Selenium作为一种广泛使用的自动化测试工具,其开源、跨平台的特性使得它成为业界的首选之一。本文旨在剖析Selenium的核心架构,并结合实际案例探讨其在复杂Web应用测试中的高效实践方法。通过详细解读Selenium组件间的交互机制以及如何优化测试脚本,我们希望为读者提供深入理解Selenium并有效运用于日常测试工作的参考。
11 1
|
5天前
|
自然语言处理 测试技术 API
深入理解自动化测试框架Selenium的设计理念与实践
【4月更文挑战第15天】 在现代软件开发过程中,自动化测试已成为确保产品质量和加速迭代的关键手段。Selenium作为一种广泛使用的自动化测试框架,提供了对多种浏览器和平台的支持,极大地促进了Web应用的功能测试。本文旨在剖析Selenium的核心设计理念,探讨其在实际项目中的应用,并指出常见的误区及最佳实践,以期帮助测试工程师更高效地利用Selenium进行测试工作。
|
6天前
|
监控 测试技术 API
深入理解自动化测试框架Selenium的设计与实现
【4月更文挑战第14天】在软件开发过程中,自动化测试是确保代码质量、减少人工重复劳动的关键步骤。Selenium作为一款广泛使用的自动化测试工具,提供了对多种浏览器和操作系统的支持。本文将探讨Selenium的核心组件及其架构设计,分析其如何通过WebDriver与浏览器交互,以及它如何支持多种编程语言进行脚本编写。同时,我们还将讨论Selenium Grid的作用以及它如何实现并行测试,以缩短测试周期并提高测试效率。
172 59
|
22天前
|
敏捷开发 设计模式 监控
深入理解自动化测试框架的设计原则
在软件开发的复杂多变环境中,自动化测试已成为确保产品质量和加速市场交付的关键步骤。本文将探讨自动化测试框架的设计原则,包括模块化、可扩展性、易用性和可靠性,旨在为软件测试工程师提供构建高效、健壮且易于维护的自动化测试系统的指导。通过分析设计模式的应用,我们将了解如何减少代码冗余,提高测试覆盖率,并适应快速变化的技术要求。
|
23天前
|
前端开发 IDE JavaScript
深入理解自动化测试框架Selenium的设计与实现
本文旨在探讨开源自动化测试框架Selenium的核心设计及其实现机制。通过分析其架构、组件和工作原理,揭示Selenium如何有效地支持跨浏览器、跨平台的自动化Web测试。文中不仅介绍了Selenium的主要功能模块,还详细讨论了其面临的挑战及应对策略,为读者提供了深入了解和使用Selenium的理论基础和实践指导。
|
25天前
|
敏捷开发 测试技术 持续交付
深入探索软件测试自动化:框架与实践
在快速演进的软件行业中,测试自动化已成为确保产品质量和加快上市速度的关键因素。本文将深入分析测试自动化框架的构建要点,探讨其在实际应用中的效益,以及实施过程中可能面临的挑战。通过对比手动测试与自动化测试的优势与局限,本文旨在为读者提供一套系统化的测试自动化实践指南,以支持更高效、可靠的软件开发周期。
11 0
|
27天前
|
设计模式 敏捷开发 监控
深入理解与应用软件自动化测试框架
在快速迭代的软件开发过程中,自动化测试已成为确保产品质量和加快交付速度的关键因素。本文将详细探讨自动化测试框架的核心原理、设计模式及其在实际项目中的应用。我们将分析几种流行的自动化测试工具,如Selenium、Appium和JUnit,并讨论它们如何集成以形成强大的测试解决方案。文章还将展示通过自定义框架来满足特定测试需求的实例,以及如何通过持续集成和持续部署(CI/CD)流程优化测试实践。

热门文章

最新文章