zoukankan      html  css  js  c++  java
  • 使用TestStack.White进行Windows UI的自动化测试

    https://github.com/TestStack/White/tree/0.13.2

    本文章将简单介绍 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()
            {
                // Arrange
                var txtNum1 = window.Get("txtNum1");
                txtNum1.Text = "3";
    
                var txtNum2 = window.Get("txtNum2");
                txtNum2.Text = "5";
    
                var expected = "8";
    
                // Act
                var button = window.Get("btnAdd");
                button.Click();
    
                // Assert
                var 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,让测试程序更加口语化

  • 相关阅读:
    2
    1
    nginx隐藏版本号
    全面对比主流 .NET 报表控件 (转)
    前端的发展和未来趋势
    NPM初学者指南 (转)
    一文解读MySQL事务
    如何高效的学习技术
    重新统一的 .NET平台-.NET 5
    为啥要有微服务?啥是微服务?
  • 原文地址:https://www.cnblogs.com/lhxsoft/p/15152134.html
Copyright © 2011-2022 走看看