参考  https://www.dazhuanlan.com/2019/09/04/8c18f8874287/

本文章将简单介绍TestStack.White这个Windows UI自动化测试的套件,并对一个简单的加法器Windows Form程序进行Windows UI的自动化测试。

前言

前几个月报名了SkillTree的“自动测试与 TDD 实际开发”课程,受到91哥3天的课程洗礼,总算是对Unit Test/TDD/BDD有了比较完整的理解,也终于能够在实际上使用了,虽然很多部分都还在摸索学习中,但也已经从测试先行这个重要观念中得到了很多收获,除了从过去重构时总是绑手绑脚的窘境中解脱之外,开发速度及功能的品质都有所提升。

课堂上91哥对Web的UI Testing介绍花了不少心力,但由于目前工作环境还是有不少系统使用是Windows Form开发,在课程练习中我也询问了是否有类似Selenium的Windows UI Testing的套件,可惜91哥主要研究的是Web的自动测试因此没有得到解答,在自己摸索后发现了TestStack.White的个Windows UI的自动化测试套件,虽然不像Selenium可以轻松录制操作脚本并转成C#测试程序,但对于熟悉Windows Form相关组件的基础上直接用程序操作Windows Form上的组件也不是太困难。除此之外White也有一个名为Screen Objects的类似Web Testing的Page Object Pattern套件可以将UI操作的逻辑再拉出一层抽象层,降低测试逻辑与操作逻辑的耦合性,之后有时间再研究看看后分享上来。

关于TestStack.White

TestStack.White(之后都简称为White)是一款将Windows本身具有的UI自动化测试框架“UIAutomation”包装后的套件,让Windows UI的测试程序撰写上更加方便的一个套件,接下来就来简单介绍一下White的使用方法

要被测试的程序

首先我先建立了一个加法器的项目,并将程序输出路径设为C:temp,程序名称为AddCalculator.exe,在之后的测试项目中,我们会在测试程序中自动打开这只加法器程序,输入数字并按下计算按钮,然后验证产生的结果是否正确。

加法器画面

"相加"按钮的程序

        private void btnAdd_Click(object sender, EventArgs e){var result = Convert.ToInt32(txtNum1.Text) + Convert.ToInt32(txtNum2.Text);lblResult.Text = result.ToString();}

从程序画面与程序中可以看出测试项目中如果要验证结果正确,大概会有几个步骤

  1. 要先把程序执行起来
  2. 找到两个数字的控件组件,并输入要测试的数值
  3. 找到"相加"按钮,并让它触发Click事件
  4. 找到结果的label,检查内容是否正确

完成测试项目

有了基本的程序实践后,接下来我们就可以直接建立一个测试项目,并透过NuGet套件管理加入TestStack.White套件。

install-package TestStack.White

然后新增一个测试类,并加入以下程序

    [TestClass]public class CalculatorFormUITest{private Application application { get; set; }private Window window { get; set; }[TestInitialize]public void TestInitialize(){var applicationPath = "C:\temp\AddCalculator.exe";application = Application.Launch(applicationPath);window = application.GetWindow("加法器", InitializeOption.NoCache);}[TestCleanup]public void TestCleanup(){application.Close();}}

application与window的声明是用来存放开启的应用程序与窗口数据,这两个变量会在TestInitialize时取得,在TestInitialize中,首先会先使用Application.Launch()来开启我们的可执行文件,接着利用application.GetWindow()来取得我们要测试的窗口内容。application.GetWindow()的第一个参数是窗口的标题。

TestCleanup做的事情很简单,就是把窗口关掉而已。

TestInitialize与TestCleanup的内容可以让我们在每次测试开始时先把要测试的窗口打开,测试结束后将窗口关掉;接下来就新增一个测试方法,来模拟UI的操作与验证结果:

        [TestMethod]public void TestMedthod_Num1_Is_3_And_Num1_Is_5_Then_Result_Is_8(){// Arrangevar txtNum1 = window.Get("txtNum1");txtNum1.Text = "3";var txtNum2 = window.Get("txtNum2");txtNum2.Text = "5";var expected = "8";// Actvar button = window.Get("btnAdd");button.Click();// Assertvar lblResult = window.Get("lblResult");var actual = lblResult.Text;Assert.AreEqual(expected, actual);}

再Arrange中,我们使用window.Get<控件类>("组件名称")来取得要被设定数值的组件及内容,之后在Act时透过一样使用window.Get方法取得要被按下去的按钮,只是Type改为Button以及正确的组件名称,最后再Assert则抓取显示结果的Lable,然后检查结果是否和预期相同。

之后再执行这个测试方法,就可以看到像下图的结果

测试程序会自动执行已经开发好的Windows Form,找到对应控件模拟行为,然后验证结果!

相关程序可以到这里下载: https://github.com/wellwind/WhiteUiTestingSamples/tree/master/Sample01

结语

本篇文章简单介绍了使用TestStack.White来对Windows From进行自动化测试的部分,透过直接寻找UI名称的方式找到对应的组件并自动操作组件的行为,然后测试行为发生后的结果是否正确。

利用一个简单的加法器程序来表示我们实际要测试的复杂UI,然后在测试项目中找到对应的控件,并针对实际操作的行为做模拟,最后检查操作结果的正确性。

White具有许多搜寻UI组件的功能,可以让我们在针对Windows Form做自动化测试时更加容易,关于这部分的细节之后再介绍。

除了White以外TestStack也有推出一些有用的测试套件,例如有再使用BDD开发系统的可以研究看看TestStack.BDDfy;针对ASP.NET MVC程序撰写测试程序时,也可以使用TestStack.FluentMVCTesting,让测试程序更加口语化。有兴趣的话可以到TestStack的GitHub上看看啰。

页面读取时增加进度条

[VB.NET]TextBox判断输入后是否有按Enter

使用TestStack.White进行Windows UI的自动化测试 (1) 基础篇相关推荐

  1. RobotFramework功能自动化测试框架基础篇

    目录 概念 特性 RF环境安装 RF的使用 1.新建项目 2.创建测试套件 3.创建测试用例 4.创建资源文件 5.页面操作介绍 RF的常用类库 1.标准库: 2.扩展库: 准备UI自动化测试的环境 ...

  2. 【python+pytest】接口自动化测试—接口基础篇

    目录 前言 接口定义 接口分类 常见接口 测试分层 测试左移和右移 写在最后,给与的建议: 前言 就当前软件测试招聘的市场需求以及趋势而言,接口测试是测试人员必须掌握的技能,而接口自动化测试则是加薪利 ...

  3. pytest自动化测试框架基础篇

    一.单元测试框架 1.什么是单元测试框架 单元测试框架是在自动化测试或者白盒测试中对软件的最小单元(函数,方法)进行测试的框架. 2.单元测试框架分类 python:unittest.pytest 3 ...

  4. 最基础的python自动化测试(基础篇)

    一.python基础 基本概念 字符集:是一个系统支持的所有抽象字符的集合,计算机中储存的信息都是用二进制数表示的. 字符编码(Character Encoding):是一套法则,使用该法则能够对自然 ...

  5. 自动化测试:基础篇自动化测试selenium分享-打开浏览器(1)

    # 1.打开浏览器 from selenium import webdriver chrome = webdriver.Chrome() # 2.打开bing网站 chrome.get("h ...

  6. 接口自动化测试工具- 基础篇:postman 接口响应详解

    状态行:http 版本,响应状态码,状态解释语句 响应头信息(key,value) 响应报文(服务端返回过来的信息) 1. Bobby里面有四种展现格式 1.1 pretty Pretty是一种看起来 ...

  7. 接口自动化测试工具- 基础篇:postman 断言

    1.断言的作用 2. Postman中 添加断言 点击请求里面的Test,可以写JavaScript脚本,但是不需要自己写,右侧postman已经帮忙写好了脚本. 3. Postman中 添加断言的思 ...

  8. TestStack.White安装详解

    参考: http://teststack.azurewebsites.net/White/GettingStarted.html 1. 使用VS2010以上版本 因为TestStack.White是通 ...

  9. UI层自动化测试介绍

    UI指的是用户可以用肉眼可以看到的页面. UI层自动化测试的原理.不论是web端还是移动端,原理都是一样的,就是基于页面元素的识别和定位来进行模拟用户行为. 首先识别到某个元素,比如一个按钮,然后定义 ...

最新文章

  1. 【剑指Offer】面试招聘题目2:重建二叉树
  2. linux安装ppp服务器,服务器_最简单的Linux系统上的pptpd服务器安装,1. rpm -qa|grep ppp 检查ppp版本, - phpStudy...
  3. Yaas上传附件的技术实现
  4. [css] 在固定宽度的div下,怎么让字体自适应大小,不超出宽度,也不要换行
  5. 趣图:只有程序员才能看懂这个疫情号召
  6. iPhone 12来了!苹果官宣第二场新品发布会时间,10月14日见!
  7. 算法笔记_面试题_17.二分法搜索_模板及示例十几道
  8. vs2005新建项目中没有ASP.NET WEB应用程序的解决方法
  9. 3D视觉点云数据处理十大方法
  10. 南阳OJ 47 过河问题
  11. 使用手机+ardinuo+esp01做的网络时钟
  12. Hive 动态分区恢复静态分区表数据
  13. android手机如何设置提高网速,安卓手机网速慢怎么办 安卓手机网速慢解决办法【详解】...
  14. dnn分类鸢尾花 pytorch_从实例掌握 pytorch 进行图像分类
  15. 瑞星误杀 技术缺失还是道德缺失?
  16. 南京邮电大学物理实验模拟试卷
  17. 第三届全国高校计算机能力挑战赛Java程序设计赛总结
  18. 学会百度站长工具主动推送,解决文章不被百度收录或者被他人抄袭排在首页
  19. 鸟哥私房菜之计算机常识
  20. 在统计学中参数的含义是指_统计学中基础概念说明

热门文章

  1. matlab game of life,模拟器cellular auotomata元胞自动机 matlab
  2. shell 中柏开机显示efi_中柏 ezpad 平板安装Fedora 21 (Linux)
  3. android跳转应用市场搜索,Android 应用中跳转到应用市场评分
  4. sm4算法(附源码、测试代码)
  5. 前端知识点之CSS(一)
  6. Angular开发实践(一):环境准备及框架搭建
  7. 道医秘传,开通奇经八脉法!
  8. 电子商务网站比较常用的缓存策略架构
  9. 架构设计开发方式汇总
  10. Starting HAL daemon:[FAILED]