QT4C是什么

QTA作为腾讯内部元老级的自动化测试项目,之前已经先后对QTAF、QT4A、QT4i、QT4W进行了开源。在QTA正式对外开源提供了Android端、iOS端以及Web端的自动化测试能力后,外界对于Windows端自动化测试框架的呼声越来越高。

QT4C(Quick Test for Client)作为基于QTA提供的面向Win32应用的UI测试自动化测试框架,此次开源弥补了QTA自动化测试项目在Windows端能力的不足。QT4C使用Python开发,实现了Windows端的UI自动化测试,支持多种控件类型的自动化测试,同时支持扩展自定义控件类型,目前被用于PCQQ、企业微信等产品的自动化测试中。

功能亮点

01、多种控件类型支持

QT4C现支持对Windows Native控件、UIA控件、Web控件进行自动化测试。

02、支持无障碍化自动化测试

QT4C对于Win32原生控件支持MSAA(Microsoft Active Accessibility)无障碍化测试。在QT4C中,通过使用win32com模块和comtypes模块实现IAccessible接口的包裹类,对用户提供封装好的AccessibleObject对象进行使用,用户可以通过控件的AccessibleObject属性获取并进行无障碍化的自动化测试。

03、支持控件类型扩展

QT4C具有良好的扩展性,支持用户根据实际需求对控件类型进行扩展,支持多种使用场景,用户可以针对自研控件实现测试桩注入逻辑,通过扩展新的控件类型对自研控件进行UI自动化测试。

04、支持PC端的Web自动化测试

QT4C对于Windows端的浏览器同样进行了封装,用户可以在QT4C的基础上使用QT4W进行Web自动化测试,同样支持Win32应用的内嵌Web自动化测试。目前QT4C已经对IE浏览器、Chrome浏览器进行了封装,用户可以直接在Windows上使用上述浏览器进行Web自动化测试。

设计原理

在QT4C中,Windows中所有的控件类型都可以抽象为Control供用户调用,每一种控件类型都继承自Control类。对于Windows端常见的窗口,QT4C将其抽象成了Windows类,Window也可以视作特殊的Control,它既是Control的载体,也能够调用Proxy Object中封装的方法来进行操作。

QT4C对每一种控件类型都内置了Proxy Object,用于获取应用程序的属性或者进行操作,Proxy Object底层基于注入测试桩或调用被测程序提供的API来封装获取属性或操作的接口。

使用说明

QT4C基于QPath技术和QTA UI框架,控件封装简单,结构清晰,可以同时使用多种控件类型进行定位,用户可以非常方便地利用QPath定位控件并进行自动化测试。关于QPath的语法和使用,可以参考QPath使用文档。这里以Windows自带的计算器为例,展示我们如何利用QT4C来对计算器的运算能力进行自动化测试,更多使用说明可参考QT4C使用文档。

01、使用Inspect获取控件属性

Inspect是一种Win32应用控件抓取工具,你可以使用微软提供的Inspect.exe来获取控件,关于微软的Inspect.exe的使用,可参考官方文档。

这里使用Inspect获取计算器主界面的控件,下面是Inspect的截图。

借助Inspect工具,就可以获取大部分Win32应用中控件的属性来使用QPath来对其进行封装。

02、封装控件

根据Inspect获取到的计算器主界面属性,可以写出主界面MainPanel的QPath:

"/ClassName='CalcFrame' && Text='计算器' && Visible='True'"

其次对界面中每个按键进行抓取封装,这里建议尽可能通过ClassName、ControlId等这些比较容易进行区分的属性来封装控件,例如按键1的QPath为:

"/ClassName='Button' && MaxDepth='3' && ControlId='0x83'"

这里封装几个接下来要进行自动化测试的按键以及操作逻辑作为参考:

class MainPanel(win.Window):    def __init__(self, qpath=None):        qp = QPath("/ClassName='CalcFrame' && Text='计算器' && Visible='True'")        super(MainPanel, self).__init__(locator=qp)self.updateLocator({            '按键1': {'type': win.Control, 'root': self, 'locator': QPath("/ClassName='Button' && MaxDepth='3' && ControlId='0x83'")},            '按键2': {'type': win.Control, 'root': self, 'locator': QPath("/ClassName='Button' && MaxDepth='3' && ControlId='0x84'")},            '加号': {'type': win.Control, 'root': self, 'locator': QPath("/ClassName='Button' && MaxDepth='3' && ControlId='0x5D'")},            '等号': {'type': win.Control, 'root': self, 'locator': QPath("/ClassName='Button' && MaxDepth='3' && ControlId='0x79'")},            '结果': {'type': win.Control, 'root': self, 'locator': QPath("/ClassName='Static' && MaxDepth='3' && ControlId='0x96'")}        })
def add (self):    self.wait_for_exist(5, 0.2)     self.Controls['按键1'].click()    self.Controls['加号'].click()    self.Controls['按键2'].click()    self.Controls['等号'].click()

03、进行自动化测试

在对控件进行封装之后,就可以在测试用例中使用封装好的MainPanel类来进行自动化测试,这里以简单的加法运算为例:

mainPanel = MainPanel()mainPanel.add()self.assertEqual(mainPanel.Controls['结果'].Text, '3')

04、自动化测试示例

真诚开源

我们后续会继续完善和优化功能,提升框架稳定性;同时支持远程操作Windows机器进行UI自动化测试。如果你对这个项目感兴趣,还请给这个项目一个 Star,欢迎提出你的 issue 和 PR!欢迎您和我们一起优化!欢迎加入QTA沟通交流群。

最后: 可以关注公众号:伤心的辣条 ! 进去有许多资料共享!资料都是面试时面试官必问的知识点,也包括了很多测试行业常见知识,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!


好文推荐

转行面试,跳槽面试,软件测试人员都必须知道的这几种面试技巧!

面试经:一线城市搬砖!又面软件测试岗,5000就知足了…

面试官:工作三年,还来面初级测试?恐怕你的软件测试工程师的头衔要加双引号…

什么样的人适合从事软件测试工作?

那个准点下班的人,比我先升职了…

测试岗反复跳槽,跳着跳着就跳没了…

QT4C-Windows自动化测试框架正式开源相关推荐

  1. FedML联邦机器学习框架正式开源,助力算法开发和性能比较

    Federated Learning 联邦学习是机器学习领域中快速发展的研究领域.尽管已经进行了大量的研究工作,但是现有的软件框架不能充分支持多样化的算法开发(例如,多样化的拓扑和灵活的消息交换),并 ...

  2. 追格小程序(知识付费与圈子社区小程序)框架正式开源

    项目介绍 追格小程序是一个积木式小程序搭建框架,基于Uniapp+WordPress开发,代码免费开源不加密且支持二开,安装追格相应扩展模块,简单配置即可快速搭建不限于圈子社区.知识付费.活动报名.资 ...

  3. rf框架的缺点_2017热门开源自动化测试框架优缺点对比

    原标题:2017热门开源自动化测试框架优缺点对比 时间一晃已来到 2017 年的最后一个季度,TestProject 对比了在今年比较热门的 7 款开源 自动化测试框架的优缺点,以帮助你选择适合自己的 ...

  4. 9个开源自动化测试框架,质量保证测试工程师用起来

    自动化测试框架由一组最佳实践,通用工具和库组成,可帮助测试人员评估多个Web和移动应用的功能,安全性,可用性和可访问性.而在,软件开发世界中有很多的自动化测试框架,该如何选择? 虽然技术团队可以构建复 ...

  5. 这8款开源自动化测试框架,你还没用上?

    在如今开源的时代,我们就不要再闭门造车了,热烈的拥抱开源吧!本文针对性能测试.Web UI 测试.API 测试.数据库测试.接口测试.单元测试等方面,为大家整理了github或码云上优秀的自动化测试开 ...

  6. 优测云服务平台分享开源自动化测试框架,快快get起来

    自动化测试框架构建很复杂?时间会很长,可能会出现错误?那就来了解一些开源的框架吧,让自动化测试框架构建不再难!优测云服务平台分享开源自动化测试框架,快快get起来! 虽然技术团队可以构建复杂的自动化测 ...

  7. 6大热门开源自动化测试框架【建议收藏】

    如果您正在考虑构建自己的测试自动化框架,请在自荐之前,参考一下以下的六大热门自动化测试框架. 在大多数情况下,您将会很好地考虑一个或多个可用的开放源代码选项.这是因为一般来说,框架是可以在团队中使用的 ...

  8. Web 自动化解决方案 [开源项目] 基于 Selenium 的 Web 自动化测试框架完美版

    欢迎查阅Selenium(Web自动化测试框架体系) Selenium ) Selenium是一个用于Web应用程序的自动化测试工具,直接运行在浏览器中,就像真正的用户在操作一样• 支持的浏览器包括I ...

  9. python ui自动化测试框架_一个开源的面向.Net 桌面应用的 Python 封装自动化测试框架...

    桌面 UI 的自动化现在已经变成的冷门技术,相比于移动与 Web 自动化来说,桌面应用的控件定位的有其历史复杂性,又有很多古老非标准控制或自定义控件,这些都为桌面程序的自动化增加了难度. 桌面的开源自 ...

最新文章

  1. 【Scratch】青少年蓝桥杯_每日一题_2.13_碰苹果
  2. 为什么直接ping知乎的ip不能访问知乎的网站,而百度就可以?
  3. java学习(165):inetaddress和inetsocketaddress
  4. 【BZOJ3529】数表,莫比乌斯反演+BIT
  5. 调用servlet java_请问调用servlet并从JavaScript调用Java代码以及参数
  6. 定义或修改本地屏幕元素的注释
  7. 24.docker port
  8. 报错:非介入式客户端验证规则中的验证类型名称必须唯一。下列验证类型出现重复...
  9. 尚硅谷Docker---docker安装及简介
  10. RubyOnRails 文件下载
  11. 英语作文 计算机新技术对生活的影响,科技的影响高中英语作文3篇
  12. 关于服务器等级的正确的是什么,腾讯天龙八部手游服务器等级限制是什么
  13. /usr/bin/ld: /tmp/ccIHWHTn.o: in function `Cdisk::Cdisk()‘:编译报错解决方案
  14. 移动端 --- 解决苹果手机滑动卡顿的问题
  15. Rouge的安装与使用
  16. 计算机二级考试office
  17. Docker 修改容器端口
  18. echarts 实现关系图表
  19. 立志 - 天行健,君子以自强不息
  20. 关于videojs视频加载重试

热门文章

  1. linux基本命令的使用原理,linux基本常用命令及其使用方法
  2. linux如何运行windows游戏,如何在Linux上运行Windows应用程序和游戏 互联网技术圈 互联网技术圈...
  3. mysql 8.0 ga_mysql 8.0 GA发布了
  4. php 8.0 jit,PHP 8.0 正式版发布,性能提升 10%
  5. mysql user表空_Mysql User表为空
  6. VC++使用ADO开发ACCESS数据库
  7. C语言typedef:给类型起一个别名
  8. warning LNK4070的解决办法
  9. 机器视觉光源亮度应如何选择
  10. C语言中怎么自动生成时间,在C语言中转换时间的基本方法介绍