https://zhuanlan.zhihu.com/p/22083601\

感谢轮子哥点赞,这会儿消息扎堆过来了,轮带逛果然不是随便说说的……

第二篇一个简单的Windows Automation API测试用例已经更新。

之前回答了一个问题https://www.zhihu.com/question/49452639/answer/117174974?group_id=749327470490025984,本来是说那个火车票查询软件的,捎带说了一句UI自动化测试,结果评论里大家对Windows怎么用C#做UI自动化测试比较感兴趣。我就写几篇关于UI自动化的文章,顺便也算是对这些年工作的总结吧。这个是第一章,后来会结合代码来深入讲解。文笔老婆说是文盲级别的,大家随便看看。如果哪里讲的不对,还请在评论里指出,谢谢!

首先声明一下,我讲的是UI自动化,而且是进程外操作另外一个程序(进程内怎么做,不在本文覆盖范围,非UI的自动化测试也不在本文覆盖范围)。对于UI自动化测试,我是持谨慎乐观态度,也就是谨慎选择是否要做UI自动化测试,谨慎写自动化测试用例,对于UI自动化测试的效果还是比较乐观的。

要说Windows上边的UI自动化测试,我们就先从底层的Windows API讲起吧,这里不会讲很细,先大概说一下,有兴趣的朋友可以看MSDN的链接。

  • 在最初版本的Windows上(应该是windows8以前吧,如果没有记错的话)是没有专门针对自动化测试的API(虽然不知道微软最初的设计时候,有没有针对自动化测试,我的理解是没有的),只有一套API是针对Accessibility的(MSAA - Microsoft Active Accessibility),也就是针对特殊人群,这些API提供的功能就是帮助程序识别现在鼠标下边的文字、控件类型等,来帮助这些人使用电脑(比如屏幕阅读器等)。而美国政府有一个针对这个的标准,叫Section 508:https://www.section508.gov,微软的所有标准控件都是支持这个标准并实现MSAA的接口。
    我们都知道,人民群众的智慧是无限的,利用这套MSAA API,人们可以做很多有意思的事情,不限于屏幕阅读。比如电子词典的鼠标取词翻译,比如截图软件可以识别控件的区域从而实现精准截图。再比如我们今天的重点,可以通过这个API,实现一个程序控制另外一个程序,并且获得控件的文本和状态来做测试的验证
    从利用这个API做测试的角度来看,测试程序可不就是一个盲人程序,我们写逻辑来帮助这个盲人程序去操作另外一个程序。
  • 然而历史都是在发展的,随着WPF的出现,MSAA在对这类UI的支持就捉襟见肘了。Windows Automation API也应运而生,这套API从名字上看就可以知道是为了Automation而设计的,它支持以前的MSAA控件(win32和winform),并且对WPF也有很好的支持。

从这两套API的角度,我们再来看自动化测试工具的发展(以我用过的工具来说):

  • 最初用的工具是Silktest,比较古老的一个自动化工具。自从有了WPF之后,它就比较捉急了,各种控件不支持,没法做自动化测试,直到WPF发布至少一年之后才有新版本支持。最初我所在的Team要测试的产品就是WPF UI的,只能放弃Silktest了。在当年也没有任何的自动化测试工具可以支持WPF,大家也可以想明白原因,因为以前所有的工具都是基于MSAA的,Windows Automation API大家还都没有开始支持。
  • 对了Silktest不支持,我们暂时也找不到工具来做,所以只能基于Windows Automation API自己做了一套类库来做这个测试。后边有时间我会写一些其它的文章,来讲怎么去实现这个的
  • 后来的工具TestComplete也都是支持WPF了,底层其实都是一样Windows Automation API。TestComplete也就是玩了一下,当时性能很捉急,也就没有继续试了
  • 再后来,就是大公司的通病,什么都想插一脚过来,微软自己也做了CodeUI这套类库,来支持创建UI自动化测试的Testcase。CodeUI这套类库好不好用,我就没有发言权了,因为我们有自己的类库,而且最初尝试了CodeUI,发现不支持正则表达式匹配,也就没继续玩了

后边章节预告 (我现在只有个标题,等工作不是很忙了再一个个补上,大家如果有特别感兴趣的话题,我也可以调整一下顺序……):

    • 一个简单的Windows Automation API测试用例
    • 非UI自动化测试和UI自动化测试
    • 反对盲目的UI自动化测试
    • C#反射在UI自动化测试工具中的应用
    • 什么是一个好的UI自动化测试用例
    • 进程内自动化测试和进程外自动化测试
    • 同步和Sleep的选择
    • 自动化测试应该从软件设计开始
    • 自定义控件支持Windows automation api
    • 专职自动化测试还是兼职自动化测试
    • Python在自动化测试上的应用
    • 谈谈Qt这货
    • 谈谈UI自动化在localization测试中的问题
    • Jenkins跟自动化测试是好基友
    • 基于Cloud的自动化测试系统设想
    • MacOSX平台自动化测试

Windows Automation API和自动化测试的更多相关文章

  1. Windows Automation API 3.0 Overview

    https://www.codemag.com/article/0810042 While general accessibility requirements (such as font color ...

  2. 自动化测试 using System.Windows.Automation;

    frameworke3.0 及以上 using System.Windows.Automation; UIAutomationClient.dll UIAutomationClientsideProv ...

  3. mfc 调用Windows的API函数实现同步异步串口通信(源码)

    在工业控制中,工控机(一般都基于Windows平台)经常需要与智能仪表通过串口进行通信.串口通信方便易行,应用广泛. 一般情况下,工控机和各智能仪表通过RS485总线进行通信.RS485的通信方式是半 ...

  4. (Delphi) Windows 32 API程序设计目录

    这里所有程序均使用Delphi调用Windows 32 API方式实现,并不是使用VCL已经封装好的类实现的! (一)第一个窗口程序 01 创建第一个窗口.

  5. Windows环境搭建Web自动化测试框架Watir

    Windows环境搭建Web自动化测试框架Watir 一.前言     Web自动化测试一直是一个比较迫切的问题,对于现在web开发的敏捷开发,却没有相对应的敏捷测试,故开此主题,一边研究,一边将We ...

  6. Windows录音API学习笔记(转)

    源:Windows录音API学习笔记 Windows录音API学习笔记 结构体和函数信息  结构体 WAVEINCAPS 该结构描述了一个波形音频输入设备的能力. typedef struct { W ...

  7. 10.API 接口自动化测试的基本原理

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 28.0px Helvetica } p.p2 { margin: 0.0px 0.0px 0.0px 0. ...

  8. 【转】Windows 7 API Internet Connection Sharing(ICS) 与 Wireless Hosted Network构建本地AP

    原文:http://hi.baidu.com/ritrachiao/item/bf7715e6bb8cb3a0c10d75be [此刻我要大大地记录一下!] 这个折腾了我好几天的Windows 7 A ...

  9. windows内核Api的学习

    windows内核api就是ntoskrnl.exe导出的函数.我们能够跟调用应用层的api一样,调用内核api. 只是内核api须要注意的是.假设函数导出了.而且函数文档化(也就是能够直接在msdn ...

随机推荐

  1. 【转帖】H5 手机 App 开发入门:概念篇

    H5 手机 App 开发入门:概念篇 http://www.ruanyifeng.com/blog/2019/12/hybrid-app-concepts.html 作者: 阮一峰 日期: 2019年 ...

  2. springmvc接收参数为日期类型

    用单个Date类型接收日期类型时,会出现报错,加上initBinder的方法 意思是将所有传入的参数都通过此方法,如果过是日期通过日期格式化器进行格式化 如果是接收类型为对象内的属性为Date类型时 ...

  3. [转] Vue原理解析——自己写个Vue

    一.Vue对比其他框架原理 Vue相对于React,Angular更加综合一点.AngularJS则使用了“脏值检测”. React则采用避免直接操作DOM的虚拟dom树.而Vue则采用的是 Obje ...

  4. zabbix4.0 本地安装详解及步骤

    安装前说明下,下面安装过程中涉及selinux部分仅供参考,可能会导致启动服务时产生各种报错,作者也是在折腾了无数日夜后报错不断而放弃治疗,直接永久关闭了selinux(啊,没有selinux的日子真 ...

  5. VS2019 Nuget找不到包的问题处理

    VS不记得改了什么设置之后,发现找不到EF 解决办法 1.点击右侧的设置按钮 2.弹出窗中左侧树形结构选择“程序包源”,再点击右上方的添加按钮 输入一下信息:https://www.nuget.org ...

  6. 创建你自己定制的vuejs plugin扩展app的功能

    什么是vuejs plugin插件 vuejs plugin插件是一个向你的app注入新的全局功能的强大但又简约的方式.从概念上来说,vue plugin非常简单,它就是一个包含了install方法的 ...

  7. HeRaNO's NOIP CSP Round Day 2 T3 ginkgo

    睡醒后我第一眼:这不主席树裸题吗? 先统计dfs序,把树上问题转化为区间问题 区间大于等于某个数的个数...主席树模板? #include<bits/stdc++.h> #define r ...

  8. String常用使用方法,1.创建string的常用3+1种方式,2.引用类型使用==比较地址值,3.String当中获取相关的常用方法,4.字符串的截取方法,5.String转换常用方法,6.切割字符串----java

    一个知识点使用一个代码块方便查看 1.创建string的常用3+1种方式 /* 创建string的常用3+1种方式 三种构造方法 public String():创建一个空字符串,不含有任何内容: p ...

  9. 前端1-----CSS层叠样式表了解,css的引入方式,三大选择器(标签,类,id),高级选择器

    前端1-----CSS层叠样式表了解,css的引入方式,三大选择器(标签,类,id),高级选择器 一丶CSS简介    叠样式表(英文全称:Cascading Style Sheets)是一种用来表现 ...

  10. iOS - 屏幕刷新 ADisplayLink

    什么是CADisplayLink CADisplayLink是一个能让我们以和屏幕刷新率相同的频率将内容画到屏幕上的定时器.我们在应用中创建一个新的 CADisplayLink 对象,把它添加到一个r ...