创建一个有效的GUI自动化框架

简介:
 一个良好的 自动化测试框架应该具备灵活的,与应用程序无关的,与技术无关和不过时的特点。本文强调的准则可以帮助开发者深层分析测试方案中的代码。这种能力已经被证明在多个自动化项目上是有效的。
  “自动化框架”这个术语已经为 软件测试领域所熟知。尽管很多人都把它与应用在基于UI自动化的技术联系起来,但是它几乎总是被滥用于那些参与测试领域。这大部分的原因是由于大家对自动化框架的应用领域有误解。它应该不仅仅像Coded UI那样,只是一个单纯的UI技术。
  现在,市场上有很多商业性的和开源的测试自动化框架。使用这些框架的主要问题在于调整他们的 学习曲线和满足自动化项目的要求的困难性。虽然有一些广泛应用的遗留框架,但是他们还是有很多缺点。
  他们缺乏灵活性,再使用昂贵的第三方产品——或者,添加一个单纯的现有用户界面技术,但不提供额外的价值。
  一个良好的自动化测试框架应该具备灵活的,与应用程序无关的,与技术无关和不过时的特点。它应该支持一个易于安装和使用的结构化和模块化的编程模型。说“易于使用”,我们是假设和期望用户是有经验的 软件开发人员。自动化是发展和正确的软件工程技能,对于计划和成功得实施一套自动化是有需要的。
  开发一个基于UI功能自动化系统背后的想法是,运用这一框架来提高代码的可重用性、稳定性和可维护性。该代码应该是容易编写、调试、部署和运行,发生失败应该易于分析。不管你使用Ranorex,Coded UI,Telerik或 Selenium
  作为底层自动化技术,设计和实现自动化的解决方案都应该是相同的。我们选择去建议和实施的范式和模式是任何开发项目的最佳实践,但他们对于UI自动化尤其有用。
  我们已经在外面公司对几个不同的项目创建了自动化框架。在一些类似的模式中,我们可以提取其中的相同之处。这些项目的主要问题与方法和可重用性的不同相关。除此之外,不同的团队通过使用不同的自动化工具来测试应用程序功能,这也导致了整体的难度。
  一般来说,一个自动化框架可以被定义为一套可以为自动化软件测试提供支持的假设、概念和工具。它有以下的功能:
  ﹒定义自动化测试脚本的方法
  ﹒提供建立联系机制SUT(测试系统)
  ﹒执行测试和报告结果
  ﹒减少自动化项目启动时间
  ﹒建立一个共同的标准
   基本原则
  让我们假设我们有一个具有丰富的用户界面和大量的控制的复杂的应用程序,但它只有两个屏幕。应用程序是复杂的事实可能意味着它可以有几十个手动 功能测试例子。所有这些使用相同的两个屏幕。那么,我们怎样才能增加这样的测试解决方案的可维护性
   分层架构模式
  把软件系统体系结构分解为单独的一层的想法是非常普遍的。第一个是逻辑展示层面,,第二个是业务逻辑层面,第三个层次是负责数据存储。使用这种模式可以降低应用程序的维护成本从每一层内的组件可以改变而不影响其他的水平。同样的方法可以应用于测试系统。
  测试代码可以分为三层:
  ·为UI自动化工具访问被测系统的接口层
  ·逻辑功能层
  · 测试用例
  每一层执行某项任务时都有一个降低测试的费用维护和促进创造一个新的测试的共同的目标。
  图1:架构原型,测试系统的多层体系结构

  Page Object
  根据每个单独的测试案例来创建单独的测试逻辑、业务库和UI Map,为我们提供了特殊能力来修改当前测试用例。
  让我们假设我们的应用程序是web邮件服务Gmail,并且两个屏幕之一是登录屏幕。登录流程被所有测试用例中所使用。(例如,为了得到第二个屏幕,您需要执行首先登录到应用程序)。
  图2:谷歌邮件登录
  让我们假定UI中有一些东西改变了,但是不合逻辑的。在我们的特定情况下,每个登录进入Gmail的现在需要输入验证码。
  图3:谷歌邮件登录与验证码
  这意味着每个测试案例现在应该更新为新的登录流程。但是一般来说,这只符合逻辑地更新一段代码。此时Page Object和功能方法模式的作用就显而易见。如果只有一个页面对象宣布登录屏幕和一个登录方法,只需要两个参数(即登录名和密码),然后只有身体的登录功能方法需要更新,以涵盖所有情况下与这种变化有关。
   页面的无缝衔接
  页面的无缝衔接的实现背后的想法是,在页面对象的所有方法返回另一个页面对象类实例(下一个SUT上下文页面)。例如,登录方法在我们的样例返回主应用程序默认的屏幕。它使一系列步骤的功能测试用例编写一个接一个,使这种用方法去链接。因此,业务方法本身就能够通过IDE的智能感知,为测试脚本的开发人员的代码提出建议。
   面向切面编程
  面向切面编程实现方面似乎是很有价值的,特别是如果你需要用特定方法到try-catch块,或写报告日志条目进入/退出方法。这种方式,包含面向切面实现方面有助于提高自动化代码,使它更具可读性和可以理解的。
   构建/运行时验证
  自动化框架也经常建议企业标准。大多数开发人员常将同样的自动化方案应用在不同的项目上,这是一个十分棘手的问题。所以,自动化框架可以提供一系列设施,去验证在商业程序库或者功能测试中的方法是否是最佳方案。
   有不同的方法可进行验证:
  ·使用IDE扩展/插件等可能设置自定义构建的规则(例如:ReSharper, StyleCop for Visual Studio)
  ·编写自己的ID扩展名
  ·编写一个机制,可以验证测试是否包含预期的属性在运行,如果有什么不正确的在运行,它将因描述性的错误而失败。
  以下提供一些可被验证的项目的简单列表:
  ·测试脚本的命名
  ·有适当的注释/描述
  ·业务方法的返回值/参数
  ·解决方案分层 (确认不会有交叉层次访问冲突在自动化代码中出现)。
  ·自动化测试框架的硬件支持
  显然,该框架不能只包括最佳实践。没有人能够在没有任何基础设施来支持他们的情况下继续做下去。以下提供的是一些有助于更好的理解自动化框架实现的指引。
  首先我们需要以某种方式运行测试。在大多数情况下,单元测试框架是用于运行功能测试和衡量结果。有了各种技术/语言的支持,能够为功能测试代码和持续集成(CI)系统完美的结合提供了多种选择的单元测试框架。
   为测试运行加载配置
  测试配置很大程度上取决于SUT域和测试细节。例如,在大多数测试流的所有配置(如参数、远程连接服务器等)可以只是在测试脚本中写死的。
  在数据驱动的测试中, 当相同的测试可以使用不同的配置(例如,输入参数)多次运行的情况下,单元测试框架还提供从外部存储设备读取数据测试脚本。
  因此,如果需要自定义配置加载的实现你的自动化框架的话,您需要仔细反复检查。
   报告测试结果
  报告测试结果/调试测试信息是自动化框架的最重要的功能之一。
  有以下几个原因:
  ﹒报告分析简化了测试应用程序/故障排除,所以你的报告的信息越多,它提供的支持越好。
  ﹒报告是所有的项目经手人观察到的结果。
  如果你想跟踪测试执行在一段时间内的一些动态变化,你应该运用额外的设备将测试结果永久地保存到数据库,这样就可以作比较。
  别忘了把一些花俏的东西放进报告表示层(xml / html),如公司标志、结构化输出等。这些事情能够极大地改善你的管理。如果你提供一个“时间”报告,图表也需要高度重视。
  验证
  再者,大多数单元测试框架已经有一套支持在测试脚本中执行Assert/Verify的机制。这是一个很好创建自己的验证机制的实践,以便:
  ﹒从一个特定的单元测试框架中抽象用例断言
  ﹒为你的需求定制一套验证方法
  ﹒添加特定的逻辑到您的验证方法,让您的验证结果自动写入报告

  切面
  自动化测试解决方案在不同的项目中大多是类似的。所以为现有解决方案增加自动化框架工具应该是个简单的事情。如果你想为现有项目提供更多实用价值,使用框架来减少迁移工作是很重要的。
  这方面确实很有帮助。只需添加一个方面属性定义到一个测试项目,一会儿你就会有一个广泛的报告机制在您的测试解决方案中激活!当然,它的实现需要一些高级方面,但这绝对是值得的。
   关键词
  你可能觉得有趣的是,我们在这篇文章中没有提及任何关键字驱动框架。关键字市场另一组可用的解决方案,包括商业的和开源的。可以肯定的是,已经有成百上千的自定义关键字驱动框架存在。但是,我们发现他们是并不完整的。原因如下:
  ﹒他们没有解决测试脚本的可维护性。他们中的大多数介绍是大量重复的。
  ﹒把关键字驱动框架紧密地绑定到特定的自动化工具(或者是一个UI自动化工具)的一部分,这使得在解决方案开发没有变化。
   结论
  在本文中,我们描述了我们在自动化框架的实现中的一些经验。这篇文章强调的一些原则可以提供在深度上分析测试方案的代码的能力,并被证明在多个自动化项目中是有效的。作为一个例子,其中一个我们已经开发了大约500个业务场景与110个测试用例,每个测试用例平均30步骤(请注意,一步也可以由几个业务方法调用)。所描述的方法使我们能够达到每一个业务场景36倍的平均可重用性。
  这是由你来决定你的自动化项目使用什么框架。也许这将是一个简单的记录/回放页面工具与一群或者是一组关键字驱动脚本的表格。但是,当涉及到自动化的一百多的测试用例时,您需要证明较高的成熟度级别来实现您的测试解决方案的可维护性。
  Oleksandr Reminnyi作为SoftServe Inc的软件工程师,SoftServe Inc是一家全球领先的外包产品和应用开发公司。Oleksandr Reminnyi负责为新的和现有的客户建立自动化项目和流程。他认为,成功和失败是完全取决于自动化建立过程是否设定正确的目标。他目前正在他的博士学位致力于研究自动化。
  David Krauss拥有超过30年的应用经验和产品设计和交付,与广泛的编程和跨多个平台架构经验,技术,和语言。精通遗留资产现代化,全球协作开发过程,客户机/服务器和网络平台,测试自动化(一个专利自动化,自动化生成一个专利申请中)。二十多年专业从事自动化测试工具和范例,自动化框架和测试方法。


最新内容请见作者的GitHub页:http://qaseven.github.io/

相关文章
|
26天前
|
人工智能 搜索推荐 数据管理
探索软件测试中的自动化测试框架选择与优化策略
本文深入探讨了在现代软件开发流程中,如何根据项目特性、团队技能和长期维护需求,精准选择合适的自动化测试框架。
81 8
|
5天前
|
机器学习/深度学习 人工智能 自然语言处理
CogAgent-9B:智谱 AI 开源 GLM-PC 的基座模型,专注于预测和执行 GUI 操作,可应用于自动化交互任务
CogAgent-9B 是智谱AI基于 GLM-4V-9B 训练的专用Agent任务模型,支持高分辨率图像处理和双语交互,能够预测并执行GUI操作,广泛应用于自动化任务。
39 12
CogAgent-9B:智谱 AI 开源 GLM-PC 的基座模型,专注于预测和执行 GUI 操作,可应用于自动化交互任务
|
3天前
|
人工智能 编解码 自然语言处理
AGUVIS:指导模型实现 GUI 自动化训练框架,结合视觉-语言模型进行训练,实现跨平台自主 GUI 交互
AGUVIS 是香港大学与 Salesforce 联合推出的纯视觉 GUI 自动化框架,能够在多种平台上实现自主 GUI 交互,结合显式规划和推理,提升复杂数字环境中的导航和交互能力。
28 8
AGUVIS:指导模型实现 GUI 自动化训练框架,结合视觉-语言模型进行训练,实现跨平台自主 GUI 交互
|
13天前
|
人工智能 Linux API
PromptWizard:微软开源 AI 提示词自动化优化框架,能够迭代优化提示指令和上下文示例,提升 LLMs 特定任务的表现
PromptWizard 是微软开源的 AI 提示词自动化优化框架,通过自我演变和自我适应机制,迭代优化提示指令和上下文示例,提升大型语言模型(LLMs)在特定任务中的表现。本文详细介绍了 PromptWizard 的主要功能、技术原理以及如何运行该框架。
101 8
PromptWizard:微软开源 AI 提示词自动化优化框架,能够迭代优化提示指令和上下文示例,提升 LLMs 特定任务的表现
|
10天前
|
数据采集 人工智能 自然语言处理
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
Midscene.js 是一款基于 AI 技术的 UI 自动化测试框架,通过自然语言交互简化测试流程,支持动作执行、数据查询和页面断言,提供可视化报告,适用于多种应用场景。
103 1
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
|
1天前
|
存储 测试技术 API
pytest接口自动化测试框架搭建
通过上述步骤,我们成功搭建了一个基于 `pytest`的接口自动化测试框架。这个框架具备良好的扩展性和可维护性,能够高效地管理和执行API测试。通过封装HTTP请求逻辑、使用 `conftest.py`定义共享资源和前置条件,并利用 `pytest.ini`进行配置管理,可以大幅提高测试的自动化程度和执行效率。希望本文能为您的测试工作提供实用的指导和帮助。
31 15
|
19天前
|
JSON 数据可视化 测试技术
python+requests接口自动化框架的实现
通过以上步骤,我们构建了一个基本的Python+Requests接口自动化测试框架。这个框架具有良好的扩展性,可以根据实际需求进行功能扩展和优化。它不仅能提高测试效率,还能保证接口的稳定性和可靠性,为软件质量提供有力保障。
51 7
|
1月前
|
Java 测试技术 API
探索软件测试中的自动化测试框架
本文深入探讨了自动化测试在软件开发中的重要性,并详细介绍了几种流行的自动化测试框架。通过比较它们的优缺点和适用场景,旨在为读者提供选择合适自动化测试工具的参考依据。
|
1月前
|
数据管理 jenkins 测试技术
自动化测试框架的设计与实现
在软件开发周期中,测试是确保产品质量的关键步骤。本文通过介绍自动化测试框架的设计原则、组件构成以及实现方法,旨在指导读者构建高效、可靠的自动化测试系统。文章不仅探讨了自动化测试的必要性和优势,还详细描述了框架搭建的具体步骤,包括工具选择、脚本开发、执行策略及结果分析等。此外,文章还强调了持续集成环境下自动化测试的重要性,并提供了实际案例分析,以帮助读者更好地理解和应用自动化测试框架。
|
3月前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
70 4