搭建 WPF 上的 UI 自动化测试框架

简介:

简要说明


    OEA 1.0-2.0 框架中,界面都是以 WPF 技术作为基础平台开发的。我们需要对开发出来的系统进行自动化测试,而 .NET 平台的自动化测试平台在公司内部还没有其它部门完成,所以我们在 2010 年的时候使用 Ruby + VS UIUnitTest 开发了一个 UI 自动化(UI Automation,以下简称为UIA)框架,估且称其为 UIA 1.0。UIA 1.0 完全由周金根搭建,相关的内容,大家可以参考他写的这几篇文章:

使用VS2010的CodedUI来做自己的自动化测试框架

IronRuby - 编写自动化测试脚本

信息系统开发平台OpenExpressApp:【OpenTest】 之 如何实现自动化测试框架

该测试平台已经实现了由测试人员编写易读的 UI 自动化测试代码以完成日常的自动化测试需求,已经比较易用。部门用了大概1年左右,随着时间的推移,也显露了它的一些的不足:

  1. 调试困难,维护成本大,难以添加新的 UIA 支持。
  2. 过程式的代码,不结构化。
  3. 测试人员开发不易,不支持编译期检查错误,重复代码过多。
  4. 一些语句性能较低。 
    例如,许多类似于:"页签.页签.按钮"的代码,导致多次查找、进入页签,性能较低。
  5. 不支持客户化。
  6. 测试环境部署困难。 
    只有一台测试服务器搭建了该环境,开发人员不能使用 UIA 来辅助自己进行自测。

鉴于以上缺点,11年10月份我们决定使用 .NET 环境来搭建整个 UIA 框架,而不再使用 Ruby,同时尽量兼容测试人员编写的历史代码以及 API 风格。

 

使用演示


    接下来,简单以我们目前的一个模块来说明一下 OEA 中的 UIA 是如何使用的。

测试人员会在 UIA 相应的工程中加入某个模块的 UIA 测试类,例如下图中的 PBS模板.cs 就是这个模块对应的测试:

image

其对应的代码如下:

 

class PBS模板 : GIX4测试用例
{
    protected override void 运行()
    {
        打开当前测试模块("模板管理.PBS模板");

        添加();
        进入窗口("添加记录", 添加记录窗口 =>
        {
            属性编辑器("编码").输入("AutoTest01");
            属性编辑器("名称").输入("自动化测试-PBS模板");
            属性编辑器("备注").输入("测试模板");
            点击按钮("确定");
            保存();
        });

        //# 3 编辑PBS树>>>>>等待对树当前行的支持<<<<<
        进入页签("PBS", PBS页签 =>
        {
            树型操作按钮通用测试();
            保存();

            进入页签("属性", 属性页签 =>
            {
                树型操作按钮通用测试();
                保存();

                进入页签("可选值", 可选值页签 =>
                {
                    添加();
                    列表().当前行().属性编辑器("可选值").输入("AutoTest");
                    保存();
                    复制添加();
                    保存();
                    按住Ctrl();
                    列表().选择行(0);
                    释放Ctrl();
                    删除();
                    保存();
                });
            });

            //#6 载入标准模板窗口中各页签
            点击按钮("载入标准模板");
            进入窗口("载入标准模板", 载入标准模板窗口 =>
            {
                页签("分部分项").单击();
                页签("措施项目").单击();
                页签("其它项目").单击();
                页签("规费税金").单击();

                点击按钮("确定");
            });
        });

        //#6 修改PBS模板信息
        点击按钮("修改");
        进入窗口("修改", 修改窗口 =>
        {
            属性编辑器("编码").输入("AutoTest01-1");
            属性编辑器("名称").输入("自动化测试-PBS模板-1");
            属性编辑器("备注").输入("测试模板-1");

            点击按钮("确定");
        });
        保存();
        删除并确定();
    }
}

 

UIA 测试环境就是一个简单的 WPF Applicatoin:

image

之前代码对应的软件运行时界面:

image

 

UIA 框架结构及相关重点


     在整个 OEA 框架中,UIA 框架是一个重要的组成部分。目前只是实现了 WPF 客户端的 UIA,Web 的 UIA 将会在需要时添加:

image image

OEA-UIA 的设计主要是基于 VS CodedUITest 中的核心类库,进行二次封装,提供更方便 OEA、更方便测试人员的的许多接口。引入如下类库:

image

其中的代码也不复杂,主要是在 WpfControl(继承自 UITestControl)的相关类型上添加一系列扩展方法,以下以一个按钮的点击为例:

 

public static WpfButton 按钮(this WpfControl context, string title = null)
{
    return context.Find<WpfButton>(title);
}

public static WpfControl 单击(this WpfControl control)
{
    control.EnsureClickable();
    control.WaitForControlEnabled();
    Mouse.Click(control);

    return control;
}

public static TControl Find<TControl>(this WpfControl context, string title = null)
    where TControl : WpfControl, new()
{
    //if (TestContext.Current.NeedCancel) Playback.Cancel();
    if (TestContext.Current.NeedCancel) throw new StopUIAException("停止自动化测试!");

    var control = new TControl();
    if (context != null)
    {
        control.Container = context;
    }

    if (!string.IsNullOrEmpty(title))
    {
        control.SearchProperties[WpfControl.PropertyNames.Name] = title;
    }

    return control;
}

 

这样,就可以在任何一个 WpfControl 容器上使用(例如页签 A) A.按钮(“添加”).单击() 了。

 

    这里,需要特别说明的是,其实 UIAutomationClient 以及 UIAutomationTypes 并不是 VS CodedUITest 独有的程序集,而是 Windows 平台上的自动化框架程序集,相关的内容,可以看 MSDN 中的《MSDN - Accessibility》。基于这个框架,理论上可以做 windows 平台上所有的应用程序的自动化测试。

在我们 UIA 中,Windows Automation API 用于一些更加底层的控件查找场景。这是因为使用 VS CodedUITest 的类库,有时候并不能找到想要的控件,同时也不能为 OEA WPF 程序做一些深度的定制。OEA 中目前现在开发的 Web 框架,也同样会使用它来构建 UIA。

 

总结


    其实这次重构并没有修改 UIA 1.0 版本的整个结构,主要是修改了语言环境为 .NET 环境,使得可以更加方便地添加各种功能,以及更好地和 OEA 框架整合。

 

BTW:    其实 OEA-UIA 已经在去年 11 月份就完成并应用,但是由于一直在开发 OEA 在 B/S 模式下的框架,所以迟迟没有发上来。不过最近 OEA-B/S 已经开发了个大概,借着写月度反思的机会,就把这篇文档写了写。欢迎交流。 :)


本文转自BloodyAngel博客园博客,原文链接:http://www.cnblogs.com/zgynhqf/archive/2012/02/14/2351263.html,如需转载请自行联系原作者

相关文章
|
21天前
|
人工智能 搜索推荐 数据管理
探索软件测试中的自动化测试框架选择与优化策略
本文深入探讨了在现代软件开发流程中,如何根据项目特性、团队技能和长期维护需求,精准选择合适的自动化测试框架。
74 8
|
27天前
|
人工智能 JavaScript 前端开发
自动化测试框架的演进与实践###
本文深入探讨了自动化测试框架从诞生至今的发展历程,重点分析了当前主流框架的优势与局限性,并结合实际案例,阐述了如何根据项目需求选择合适的自动化测试策略。文章还展望了未来自动化测试领域的技术趋势,为读者提供了宝贵的实践经验和前瞻性思考。 ###
|
4天前
|
数据采集 人工智能 自然语言处理
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
Midscene.js 是一款基于 AI 技术的 UI 自动化测试框架,通过自然语言交互简化测试流程,支持动作执行、数据查询和页面断言,提供可视化报告,适用于多种应用场景。
69 1
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
|
16天前
|
Linux Shell 网络安全
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
本指南介绍如何利用 HTA 文件和 Metasploit 框架进行渗透测试。通过创建反向 shell、生成 HTA 文件、设置 HTTP 服务器和发送文件,最终实现对目标系统的控制。适用于教育目的,需合法授权。
53 9
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
|
22天前
|
安全 Ubuntu Linux
Metasploit Pro 4.22.6-2024111901 (Linux, Windows) - 专业渗透测试框架
Metasploit Pro 4.22.6-2024111901 (Linux, Windows) - 专业渗透测试框架
42 9
Metasploit Pro 4.22.6-2024111901 (Linux, Windows) - 专业渗透测试框架
|
30天前
|
Java 测试技术 API
探索软件测试中的自动化框架选择####
在当今快节奏的软件开发周期中,自动化测试已成为确保产品质量与加速产品迭代的关键策略。本文深入剖析了自动化测试的核心价值,对比分析了市场上主流的自动化测试框架,旨在为项目团队提供选型时的考量因素及实践指南,助力高效构建适应未来变化的自动化测试体系。 ####
|
26天前
|
Java 测试技术 API
探索软件测试中的自动化测试框架
本文深入探讨了自动化测试在软件开发中的重要性,并详细介绍了几种流行的自动化测试框架。通过比较它们的优缺点和适用场景,旨在为读者提供选择合适自动化测试工具的参考依据。
|
29天前
|
jenkins 测试技术 持续交付
自动化测试框架的搭建与实践
在软件开发领域,自动化测试是提升开发效率、确保软件质量的关键手段。本文将引导读者理解自动化测试的重要性,并介绍如何搭建一个基本的自动化测试框架。通过具体示例和步骤,我们将探索如何有效实施自动化测试策略,以实现软件开发流程的优化。
62 7
|
26天前
|
数据管理 jenkins 测试技术
自动化测试框架的设计与实现
在软件开发周期中,测试是确保产品质量的关键步骤。本文通过介绍自动化测试框架的设计原则、组件构成以及实现方法,旨在指导读者构建高效、可靠的自动化测试系统。文章不仅探讨了自动化测试的必要性和优势,还详细描述了框架搭建的具体步骤,包括工具选择、脚本开发、执行策略及结果分析等。此外,文章还强调了持续集成环境下自动化测试的重要性,并提供了实际案例分析,以帮助读者更好地理解和应用自动化测试框架。
|
27天前
|
监控 测试技术 定位技术
探索软件测试中的自动化测试框架选择与实施###
本文不概述传统意义上的摘要内容,而是直接以一段对话形式引入,旨在激发读者兴趣。想象一下,你是一名勇敢的探险家,面前摆满了各式各样的自动化测试工具地图,每张地图都指向未知的宝藏——高效、精准的软件测试领域。我们将一起踏上这段旅程,探讨如何根据项目特性选择合适的自动化测试框架,并分享实施过程中的关键步骤与避坑指南。 ###
36 4

热门文章

最新文章