为何要建立自动化测试架构

简介:

自动化测试架构之说

  测试人员经常想象——在无人值守的情况下,每天晚上测试工具自动运行成千上万的测试用例,第二天早晨去上班,一打开电脑就能看到所有的测试任务已全部执行完毕,测试报告也整整齐齐地出现在我们面前。如果能亲身经历这种场景,一定会感到无比兴奋和轻松!这种情景不是梦想,也并不遥远,完全是可以实现的,只要借助一套灵活、可扩展的自动化测试框架即可帮助我们实现梦想。

  为何要建立自动化测试架构

  在过去几十年中,自动化测试已经有了良好的发展。最初的测试工具只提供了简单的捕捉/回放功能:记录键盘和鼠标的操作,并捕捉屏幕,然后通过播放所记录的操作进行验证。这样的脚本很难维护,从而要求开发功能和灵活性更强的测试工具,并能将这些工具很好地整合起来,使整个自动化测试过程的各个部分或各个阶段能很好地衔接起来。这就需要构造一个完整的自动化体系,形成自动化测试的流水线,使整个测试过程一气呵成。这其中,不仅要包括自动化测试的执行,还要包括自动化测试脚本的开发、软件包自动部署以及测试报告自动生成等,才能将自动化开发、执行和日常工作融合在一起。这一切都需依赖于自动化测试架构。

  针对上述讨论,我们深知自动化测试所面临的挑战。面对挑战,必须采取以下这些相应的对策,通过构建适应性很强的自动化测试框架来解决一系列问题。

  1)需求频繁的变化要求自动化测试具有一个灵活的适应机制。我们知道,建造商品住房时,如果只浇灌混凝土框架,没有砌墙,那么住户就有更大的灵活性来设计自己的家,可以满足住户更多的个人需求。在某些商场、写字楼的建筑上,这种考虑表现得更为充分,保留了很大的灵活空间供商家租用和装修。

  2)单元测试、集成测试和系统测试等的自动化实施能共享某些平台和机制,让这些测试有机地结合起来。例如,房屋的各个功能模块,包括卧室、会客厅、厨房、卫生间、窗户、屋顶等都要有框架支撑,才能形成实用的、功能完整的住宅。

  3)大规模软件团队的协作和硬件资源的使用效率都要求一个良好的基础设施来支撑自动化测试。例如,房屋的各个单元之间需要通过布置电线、水管、暖气管、有线电视等网络,才能有机地结合起来,更好地支撑各个功能之间的协调和使用,更好地为住宅的主人服务。

  从上面这些举例可以得知,自动化测试也不例外,在进行具体的单元自动化测试、功能自动化测试和系统自动化测试之前,先要建立一个清晰的框架,才能包容自动化测试的各个功能单元,使将来各项自动化测试任务有机地结合起来,顺利地开展工作。

  解决什么问题

  作为自动化测试框架,最根本的是要构造一个良好的工作空间,能够容纳各种类型测试工具的执行,以使这些工具能够相互兼容,共享测试数据。如果能够像Windows 操作系统那样支持即插即用,任何测试工具都可以动态、方便地加入系统或从系统中移除,则再好不过。

  其次,自动化测试框架需要能够监控测试执行的过程,包括监控测试对象资源(如CPU、内存等)的使用,及时收集来自不同测试工具的测试结果,并将这些结果进行归类和分析,生成相应的测试报告,通过邮件和网站等发布出去。

  再者,为了让测试能够在某个特定时刻(例如晚上)自动执行,自动化测试框架应具有事先安排(schedule)任务能力,并能够支持维护测试环境和管理测试资源,包括管理硬件资源列表、支持测试状态查询和自动分发测试任务到相应的测试机器上,并在规定的时间内完成测试任务。

  最后,自动化测试框架还应能支持自动化测试的前期任务,支持测试脚本的录制、编辑和调试,支持测试脚本的快速开发和良好的维护性,而且能够支持测试用例、测试套件(test suite)和其他测试活动的管理。

  要构建良好的自动化测试框架,还需要提供一些基础设施来支持自动化测试,例如邮件服务、跨平台的通信服务、分布式开发和运行环境等,如图2-7 所示,一个良好的自动化测试框架应具有下列能力。

  1)提供非常有效的测试工作流程模型,如对任务安排、执行、通知结果和生成报告等完整的过程支持。

  2)支持多种脚本语言的录制、编辑、调试和回放等集成开发环境。

  3)完成各类测试任务的执行。

  4)有良好的扩充能力,如和第三方插件、工具的集成。

  5)具有数据驱动、关键字驱动等脚本模式的支持。

  6)具有分布式处理、远程调用等不同的运行方式。

  7)能获取测试覆盖率。

图2-7 自动化测试框架要解决的问题

  如果进一步抽象,自动化测试框架就是用来解决自动化测试中的公共问题的,包括公用的对象、公用的方法、公用的环境或数据等自动化测试框架的要素。

  1)公用的对象。不同的测试用例会有一些相同的对象(如窗口、按钮、菜单等)被重复使用,而这些公用的对象可以被抽取出来,在编写脚本时随时调用。如果需求发生变化,只需要修改这些公用对象的属性即可,而不需要修改太多的测试脚本。而要做到这一点,就要求我们构建对象库,并建立实体对象和逻辑对象之间的映射。

  2)公用的方法。公用的方法比较多,相当于脚本的基础函数,可以构成基础函数库,供上层脚本调用。

3)公用的环境或数据。许多测试用例会在相同的测试环境上运行或使用相同的测试数据,可将不同的测试环境或数据封装起来,和测试用例进行灵活的组合,以增强脚本执行的灵活性,并覆盖更广的测试范围,降低测试风险。

  自动化测试框架应支持脚本录制、脚本开发、测试用例和测试套件的创建和执行、远程控制、分布式通信等功能,才能基本满足测试自动化的需要。自动化测试框架还需要支持单元测试并与开发环境集成,如将集成开发环境Eclipse、软件配置管理工具CVS/SubVersion 和软件包构建工具Ant/Maven等集成到这个框架中,以支持每日构建和自动验证测试。

  如果自动化测试框架能管理测试项目、安排任务,将产品用户需求和测试需求很好地结合起来,那么测试目标更明确,测试的效率会得到进一步提高。测试结果的分析也是很重要的,一般要求在自动化测试框架中得到解决。最重要的是易用,将各个工具集成起来,并能使这些工具更好地发挥作用。例如,openqa.org 社区提供了一个工具Bromine,它集成了Selenium Core/RC,非常容易跟踪和管理测试项目、需求、测试计划、测试用例和缺陷,可以监控缺陷的提交,将缺陷分派给相应的开发人员来浏览和分析测试结果。

  一个理想的自动化测试框架能解决上述问题,提供一个分布式的通信平台、友好的人机交互界面和开放式架构,将自动化测试中所需要的各个关键部分有机地集成起来,形成一个为自动化测试服务的、完整的、层次清楚的开发平台和运行环境,如图2-8 所示,其中各主要部分的功能如下。

图2-8 自动化测试框架示意图

  1)综合管理平台:可以将自动化测试中所有的工作内容管理起来,相当于一个统一的入口(Portal),可以浏览每部分的内容。

  2)基于业务驱动的脚本集成开发环境:可便于构造关键字驱动的脚本,为此要建立软件系统的对象库,并将这些对象映射为脚本中的逻辑对象,以减少软件需求变化对脚本的影响。这个集成开发环境还包括脚本录制、编辑等功能,并能和CVS、Ant 等工具集成。其中库函数可以看做是关键字列表和关键字实现,而对象映射可以看做是由对象库和映射关系构成的。

  3)安排(Schedule)测试任务:使任务可以定时启动,自带执行测试任务。

  4)监控测试资源:在测试过程中,能够及时发现问题,发出警告,并保留(记录)相关数据。

  5)控制中心(控制器):驱动测试工具,可以调用测试任务,并将测试任务、测试脚本等分发给远程机器。

  6)远程机器执行测试任务:通过代理实现,而代理由控制中心来控制。








====================================分割线================================



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

目录
相关文章
|
30天前
|
缓存 Devops jenkins
专家视角:构建可维护的测试架构与持续集成
【10月更文挑战第14天】在现代软件开发过程中,构建一个可维护且易于扩展的测试架构对于确保产品质量至关重要。本文将探讨如何设计这样的测试架构,并将单元测试无缝地融入持续集成(CI)流程之中。我们将讨论最佳实践、自动化测试部署、性能优化技巧以及如何管理和扩展日益增长的测试套件规模。
43 3
|
3月前
|
运维 监控 Cloud Native
自动化运维的魔法书云原生之旅:从容器化到微服务架构的演变
【8月更文挑战第29天】本文将带你领略自动化运维的魅力,从脚本编写到工具应用,我们将一起探索如何通过技术提升效率和稳定性。你将学会如何让服务器自主完成更新、监控和故障修复,仿佛拥有了一本能够自动翻页的魔法书。
|
3月前
|
Kubernetes Cloud Native 测试技术
探索软件测试的奥秘:从理论到实践深入理解云原生架构:从基础到实践
【8月更文挑战第28天】在软件开发的世界中,测试不仅是质量的守护者,也是创新的催化剂。本文将带你穿越软件测试的迷宫,从基础概念到高级策略,揭示如何通过测试提升软件质量和用户体验。我们将一起解码测试的核心原则,探索自动化测试的魅力,并学习如何设计有效的测试案例。无论你是测试新手还是资深开发者,这篇文章都将为你提供宝贵的见解和实用的技巧,让你在软件测试的道路上更加从容不迫。 【8月更文挑战第28天】本文旨在为读者揭示云原生技术的核心概念、优势以及如何在实际项目中应用。通过深入浅出的方式,我们将探索云原生的多个方面,包括容器化、微服务架构、持续集成和持续部署(CI/CD)、以及如何利用Kubern
|
4月前
|
机器学习/深度学习 人工智能 运维
自动化运维在现代IT架构中的关键角色
【7月更文挑战第8天】随着技术的快速发展,自动化运维成为企业追求高效、稳定IT服务的重要策略。本文将探讨自动化运维如何优化工作流程、提升系统稳定性和安全性,以及它在现代IT架构中不可或缺的地位。
48 1
|
1月前
|
存储 消息中间件 运维
架构升级的救星!流量回放自动化测试的必备指南
大家好,我是小米,一名29岁的技术宅。今天分享一个物联网领域的实用技能——流量回放自动化测试。系统重构后,测试工作量巨大,本文介绍如何通过日志收集和数据回放进行自动化测试,包括离线、实时和并行回放模式,帮助快速定位Bug,提升测试效率和系统稳定性。欢迎关注我的微信公众号“软件求生”,获取更多技术干货!
42 3
|
3月前
|
运维 应用服务中间件 网络安全
自动化运维的新篇章:Ansible在现代IT架构中的应用与实践
【8月更文挑战第30天】随着信息技术的飞速发展,企业对运维效率和可靠性的要求日益增高。传统的手动运维方式已难以应对复杂多变的IT环境,自动化运维因此成为行业新宠。本文将深入探讨Ansible这一流行的自动化工具,如何通过其简洁的配置管理和强大的多节点部署能力,助力现代IT架构实现高效、可靠的运维管理。我们将从Ansible的核心概念入手,逐步解析其在配置管理、任务执行、应用部署等方面的实战应用,并结合代码示例,展示如何利用Ansible简化日常运维工作,提升运维质量和效率。无论你是运维新手还是资深专家,这篇文章都将为你提供宝贵的洞见和实操技巧。
|
3月前
|
运维 Cloud Native 持续交付
"揭秘云原生技术:从容器化到微服务,自动化运维如何重塑未来应用架构?悬念重重,等你来探!"
【8月更文挑战第21天】随着云计算的迅猛发展,云原生技术作为设计云应用的最佳实践,正驱动企业数字化转型。本文解析云原生技术概念与特性,通过容器化(如Docker)、微服务架构(如Spring Boot)、自动化运维(如Jenkins)及持续交付等关键领域,并辅以代码实例,探讨云原生在电商等行业的应用,展现其如何助力企业实现高效、灵活与可靠的系统构建,促进业务增长。
78 0
|
3月前
|
缓存 Java Maven
SpringCloud基于Eureka的服务治理架构搭建与测试:从服务提供者到消费者的完整流程
Spring Cloud微服务框架中的Eureka是一个用于服务发现和注册的基础组件,它基于RESTful风格,为微服务架构提供了关键的服务注册与发现功能。以下是对Eureka的详细解析和搭建举例。
|
4月前
|
运维 分布式计算 大数据
自动化运维的利剑:Ansible在现代IT架构中的应用
【7月更文挑战第16天】本文深入探讨了Ansible作为自动化运维工具的核心价值及其在现代IT架构中的多维度应用。我们将通过具体案例分析,揭示Ansible如何优化IT运维流程、提升工作效率,并讨论其在云环境、容器化及大数据处理等领域的创新应用。文章旨在为读者提供一套实用的Ansible应用策略,助力企业构建更加高效、稳定的IT运维体系。
|
4月前
|
测试技术 调度 微服务
微服务架构下的两类测试
【7月更文挑战第16天】微服务架构下的两类测试:流量录制回放测试和仿真环境测试