自动化测试框架知识详解

news2024/11/26 22:25:50

自动化测试因其节约成本、提高效率、减少手动干预等优势已经日渐成为测试人员的“潮流”,从业人员日益清楚地明白实现自动化框架是软件自动化项目成功的关键因素之一。本篇文章将从什么是真正的自动化测试框架、自动化脚本如何工作以及自动化测试框架会如何在测试过程中为你提供竞争优势三个方面进行阐述,让您通过这一篇文章,踏入自动化测试框架的领域。 

如果对软件测试、接口、自动化、性能测试、测试开发、面试经验交流。感兴趣可以加裙485187702,群内会有不定期的发放免费的资料链接,这些资料都是从各个技术网站搜集、整理出来的,如果你有好的学习资料可以私聊发我,我会注明出处之后分享给大家。 

自动化测试的优势

自动化测试的流行和诸多优势并不意味着它是灵丹妙药,定制型项目、周期短、测试易用性等情况并不适合自动化测试。但不可否认的是,如果认真计划和执行自动化测试框架,确实会为软件开发和测试公司带来以下好处: 
 

最短时间-最大收益

构建任何可行的自动化测试框架和自动化脚本都可以最大程度地减少编写和运行测试所花费的时间,从而可以在短时间内获得最大的输出。另外,拥有优秀的自动化测试框架后,人力就可以从诸如同步、错误管理、本地配置,报告生成、解释等这些常见问题中解脱出来。

可重复使用和可读的自动化代码

当你使用现有组件库中提到的代码时,大可以放心,它在以后的时间内仍然是可读和可重复使用的,并且所有相关任务(如报告、同步和故障排除)都将变得更易访问。

资源优化

一些公司没有如设想的一般从自动化实施中受益,因为从自动化测试中获得的效益取决于采用它的灵活性。 如果自动化系统是灵活的,并且与从事各个组件的不同团队兼容,那么在资源优化和知识共享方面可以提供巨大的收益。

自动化测试框架的定义

在其他很多行业中,“自动化”指的是通过智能算法自动处理流程,流程运行是很少或完全不需要人工干预。而在软件行业中,自动化测试指的是通过自动化工具(授权版本或开源版本皆可)对软件应用程序进行各种测试。从技术角度来说,自动化测试框架是一组定制的、可以用来执行脚本化测试和全面报告测试结果的交互式组件。 
要成功地构建自动化测试框架,需要考虑到软件质量保障专家的建议,他们可以帮助观察并帮助控制整个测试过程,提高测试结果的准确性。经过精心设计的自动化测试框架能让测试人员以一种实用、简化的方式执行自动化测试。

自动化测试框架的类型

以工具为中心的框架

不管是商业自动化工具和开源自动化工具,都有有助于在测试环境中生成报告、测试套件和分布式测试执行的系统基础设施。比如Selenium 自动化框架,该框架具有主要组件WebDriver——基于Web浏览器的插件,用于控制和操作 Web 浏览器中的应用程序的 DOM 模型。Selenium 测试自动化框架还拥有实用的编码库和记录回放工具。

另外一个专用于工具的重要框架是 Serenity,它是围绕 Selenium Web 驱动程序构建的加速器。 在这种情况下,为加快测试自动化实施过程的速度,社区将特定组件组合在一个公共实体中。

诸如 TestComplete,Ranorex HP QTP 这些工具专用框架时,就很难做出明确的判断,因为它们都是由带有动作模拟器、报告和脚本 IDE 的已部署基础架构预先构建的。

以应用为中心的框架

这种类型的框架是为实现某个特定应用程序项目自动化而定制的。以应用为中心的框架支持某个指定目标的应用程序实现测试自动化的需求,由从开源库构建的组件驱动。这种框架可以围绕SUT创建友好的测试环境来运行一些基本功能,包括部署开发的应用程序、运行应用程序、测试用例执行、直接测试结果报告和便于编码的包装器控件。以应用为中心的框架还会有一个组件来支持在不同操作系统和浏览器上跨各种云环境的测试运行。

关键字驱动框架

关键字驱动框架主要可以吸引缺乏编码经验的新手开发和测试人员,它既可以是以工具为中心的框架,也可以是以项目为中心的框架。关键字驱动框架可以让编码不熟练的员工参与编写、理解自动化脚本。用于编码的关键字集(如 Login、NavigateToPage、Click、TypeText)作为关键字存储库安装在代码库里,根据提供的关键字引用编写脚本的电子表格将被传递到关键字解释器来执行测试。

laptop-820274_1920.jpg

理想的自动化测试框架的主要组件

如果要实现功能强大且性能卓越的测试自动化框架(无论是开源还是商业的),就必须把包括构成其核心的某些组件考虑在内。 有些框架可能包括所有组件,也有些框架只包括其中几个,所以不必在每个框架中都涉及到下面提到的所有组件。

1. 测试基础组件

a)单元测试

单元测试基础组件可以作为任何自动化测试框架的基本部分。它可以用于以下情况: 
  
● 通过@test 或[test]等特定的形式来定义正在使用的测试方法 
● 执行影响自动化测试最终结果的断言 
●运行简单明了的测试 
  
无论是从命令行、IDE、专用工具还是 CI(持续集成)系统运行测试,为了确保单元测试以简单的方式运行,单元测试库都提供了测试运行器。 
  
单元测试库支持几乎所有编程语言,比如以下这些:Java 的 JUnit 和 TestNG,.NET 的 NUnit 和 MSTest,Python 的 unittest(前身为 PyUnit)。

b)集成和端到端测试

 在执行集成和端到端测试自动化的同时,也非常合适去实践现有测试库提供的功能。由应用程序UI驱动的API级测试需要有消除不必要的编码负担的组件,这样能让与被测应用程序的交互变得更容易。因而,测试人员就不会受到连接到应用程序、发送请求、接收结果响应这些编码工作的困扰。

这种类型的几个重要测试组件有:Selenium(可用于主要语言)、protractor(特定于 JavaScript)、Karate DSL(Java 特定的 API 级集成测试)。

c)行为驱动开发(BDD)

专门用于BDD的组件以行为规范为目标,以可执行代码的形式创建可执行规范。在这部分,测试人员可以将预测行为的不同特性和场景转化为代码。尽管不像其他测试工具哪有直接跟被测应用程序交互,但可以作为BDD过程的支持,创建与自动化测试的范围和意图相一致的活动文档。BDD组件的典型例子有:cucumber(支持主要语言)、Jasmine (JavaScript)、SpecFlow (for .NET)。

2、测试数据管理

在软件测试自动化和测试创建过程中,最大的困难是如何利用测试数据管理系统。随着自动化测试数量的增加,始终存在这样一个问题:确保执行特定测试所需的某些测试数据在执行测试时可用或可创建。目前对这种情况并没有一个万无一失的解决方案,这就要求采用可靠的测试数据管理方法来让自动化工作成功运转。 
 因此所采用的自动化测试框架需要配置充分,以便能提供基本的补救措施来进入或创建、清除要执行的测试数据。解决这一问题的方法是使用适当的模拟工具,使数据更加简化、更加清晰、更易于理解。

3、mock、stubs和虚拟资产

  在对自动化测试进行实践和探索的历程中,可能会出现以下情况:

●希望将模块与在单元测试中有经验的已连接组件隔离

●处理在现代应用程序的集成,或端到端测试中常见的繁琐而关键的依赖关系 
  
在这些情况里,就会觉得创建mock、stubs和虚拟资产来反映连接组件的行为模式是非常必要的,还可能会发现处理 mock 和 stub 是一项大范围、大体量的任务。无论如何,测试人员都会意识到,在开发自动化测试框架期间选择有用的虚拟化工具是件十分重要的事。

实现模式的通用机制

除了以上提及自动化框架组件,还有一些有用的机制可以帮助创建、使用和维护自动化测试,例如:

包装器方法(Wrapper methods):使用 Selenium WebDriver 组件时,创建自定义包装器会让人更轻松地处理错误。 创建了用于 Selenium API 调用的自定义包装后,就可以更好地处理超时、异常处理和故障报告。 这之后,创建了自动化测试的人员可以重新使用,这样就可以避开复杂流程的关注点,专注于进行有价值的测试。

抽象方法(Abstraction methods):抽象机制意味着可读性的提高和冗余细节的掩盖。例如,在创建 Selenium WebDriver 测试时使用页面对象的目的是在网页上公开用户输入操作,包括输入凭据或单击页面上的某处,目标是通过超越或绕过探索页面特定元素的需求来实现高级测试方法。 此方法适用于许多类似的应用程序和自动化测试。

 测试结果报告

在选择将测试结果报告到自动化框架中的库或机制时,需要将查看这份报告的目标受众考虑在内。在这方面,需遵循以下几个注意事项:

●诸如 Junit 和 TestNG 之类的单元测试框架生成的报告主要针对如 CI(持续集成)服务器之类的接收系统,这些系统最终会对其进行解释并以其他软件可使用的 XML 格式进行呈现。 
  
●当寻求使用大多数人都能理解的语言作为进行报告的工具时,你可能需要考虑使用与单元测试框架兼容的商业工具,比如用于 Junit、NUnit 和 TestNG 的 UFT-Pro。 
  
●另一种选择是利用诸如 ExtentReports 之类的第三方库,该库以易于理解的格式创建测试结果报告,包括通过饼形图、图形或图像进行可视化解释。

辅助平台

除了自动化测试框架本身,一些跟持续集成相关的辅助平台也会对自动化测试有很大的帮助。比如CI可以进行交付件部署、测试调度;源代码平台可管理产品和测试脚本的代码;依赖管理器一般是针对某种语言类库的依赖管理工具,比如用nexus管理公司员工开发的通用java类型;禅道ZTF包含持续集成、单元测试和版本库管理等特性。 

CI平台

为了以更快、更连贯的方式进行应用程序测试,持续集成平台可以帮助您定期构建软件并为新版本运行各种测试。 当开发和部署新功能以及更新现有功能时,此方法使开发人员和测试人员对应用程序质量获得定期反馈和迅速响应。 当前一些突出的持续集成平台有TeamCity、CircleCI、Jenkins 等。

源代码管理

与手动测试一样,自动化测试也涉及编写和存储源代码版本。 每个开发公司都有一个精选的源代码和版本控制系统来保存并保护源代码。 自动化测试需要完善的源代码管理系统,该系统在处理生产代码时会非常方便。 典型的源代码管理示例有 Git和Subversion 。

创建依赖管理器

依赖性管理器的主要目的是协助收集、管理现有的已经应用在自动化软件解决方案 的功能中的依赖性和库。某些工具(例如Maven和Gradle)同时充当依赖管理器并帮助构建工具。构建工具旨在帮助您从源代码和支持库开发自动化软件并运行测试。这方面的工具包括Ant,npm 和 NuGet。

禅道ZTF

ZTF支持与禅道无缝集成,可将禅道用例和自动化测试脚本一一绑定,执行的结果能提交到禅道中作为测试结果,执行失败的脚本也可以自动创建bug。ZTF自动化测试框架实现了与Jenkins持续集成功能打通。用户发起任务后,通过ZTF自动执行测试脚本,把单元测试的结果回传给禅道,二者合作打通了持续集成闭环。

框架的搭建和实施过程

以下是规划实现自动化测试解决方案的几种方式: 
  
●从客户的角度探讨自动化的实际适用性、从各个角度检查其外观是否良好、并在未充分使用的技术上进行测试。 与之相比,如果自动化开发的努力大大超过预期的优势,那自动化测试就没有什么必要。 
  
● 密切关注被测系统的技术,以便找到能够完美模拟用户行为的最合适的自动化测试工具,这一点至关重要。 
  
●建议采用基于阶段的实现方法,其中每个阶段都具有交付自动化测试脚本的优先级,同时添加框架功能以实现预期的脚本执行。 
  
●在启动软件自动化测试之前,为了确保正确执行自动化决策,必须首先估算实施后的投资回报率、概念证明、运行手动回归或冒烟测试的时间以及每个版本的运行周期数 。

 结论

在当今快节奏、残酷的软件开发生态系统中,自动化测试框架在保持软件测试周期的速度、效率和清晰度方面起着不可或缺的作用。随着人工智能被引入到软件测试中,考虑采用自动化测试框架的组织必须深入研究最终框架的设计之后才能涉足这一领域。良好的框架设计和使用组件的策略将为最终的自动化测试框架奠定基础。 
  
构建成熟、精细、灵活的自动化测试框架体系结构的最好方法是从小处着手,频繁地进行测试和审核,并逐步向更高的层次构建扩展版本。从早期开始准备大量的自动化测试很方便,可以更快地看到工作框架,避免之后在自动化测试阶段出现冲突或受损的情况。 
  
上面阐述的指南旨在帮助软件测试人员和公司,以让大家从那些成功的执行自动化测试的项目中汲取经验。

最后:下面是配套学习资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!【100%无套路免费领取】

软件测试面试小程序

被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!

8小时传疯!大厂面试真题全被大佬整理在这个小程序上了!【软件测试,建议收藏】

涵盖以下这些面试题板块:

1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux

6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础 

  全套资料获取方式:点击下方小卡片自行领取即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1170517.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

手机转接器实现原理,低成本方案讲解

USB-C PD协议里,SRC和SNK双方之间通过CC通信来协商请求确定充电功率及数据传输速率。当个设备需要充电时,它会发送消息去给适配器请求充电,此时充电器会回应设备的请求,并告知其可提供的档位功率,设备端会根据适配器端…

newstarctf2022week2

Word-For-You(2 Gen) 和week1 的界面一样不过当时我写题的时候出了个小插曲 连接 MySQL 失败: Access denied for user rootlocalhost 这句话印在了背景,后来再进就没了,我猜测是报错注入 想办法传参 可以看到一个name2,试着传参 发现有回显三个字段…

深入理解WPF中的依赖注入和控制反转

在WPF开发中,依赖注入(Dependency Injection)和控制反转(Inversion of Control)是程序解耦的关键,在当今软件工程中占有举足轻重的地位,两者之间有着密不可分的联系。今天就以一个简单的小例子&…

692. 前k个高频单词(map)

目录 一、题目 二、代码 一、题目 692. 前K个高频单词 - 力扣&#xff08;LeetCode&#xff09; 二、代码 class Solution {class KV_sort{public:bool operator()(const pair<string,int> kv1, const pair<string,int> kv2){if(kv1.first kv2.first )//两个对…

MyBatis 操作数据库

一、什么是 MyBatis&#xff1f; MyBatis 是是一个ORM 框架&#xff0c;ORM&#xff08;Object Relational Mapping&#xff09;&#xff0c;即对象关系映射。底层实现是基于 JDBC 的&#xff0c;但是 MyBatis 隐藏了 JDBC 的复杂性&#xff0c;提供了简单易用的 API&#xff…

MedianFlow 跟踪算法详解

在技术日新月异的时代&#xff0c;今天的技术可能在明天就会被新的技术取代&#xff0c;例如现在爆火的大模型。但目前看来&#xff0c;大模型还不能做到无所不能。 所以这篇博客还是来考古一下&#xff0c;写一下传统的跟踪算法。这里不是为了怼大模型而为了写一篇传统算法而…

【1++的Linux】之线程(一)

&#x1f44d;作者主页&#xff1a;进击的1 &#x1f929; 专栏链接&#xff1a;【1的Linux】 文章目录 一&#xff0c;Linux线程概念二&#xff0c;线程的优缺点进程和线程类比现实 三&#xff0c; 线程的操作线程的私有资源 && 线程的创建线程的等待线程终止线程分离…

初学Flutter:swiper实现

效果展示&#xff1a; flutter swiper 1、安装 card_swiper 2、引入card_swiper import package:card_swiper/card_swiper.dart;3、使用 这里我主要是对官网例子进行实践&#xff0c;主要是5种常用的swiper 1、普遍的swiper //custom swiper class CustomSwiper extends S…

下载安装各种版本的Vscode以及解决VScode官网下载慢的问题

下载指定版本 在Vscode官网 Vscode官网更新子页 这里的左侧栏点击其中一个会跳转到某个版本&#xff0c;或者在官网子页 https://code.visualstudio.com/updates的后面跟上需要的版本号即可完成目标版本下载页面的跳转 选择Linux里的ARM包不会自动下载而是跳转到另一个页面 …

vue-admin-template 安装遇到的问题

vue-element-admin 是一个后台前端解决方案&#xff0c;它基于 vue 和 element-ui实现。 参考文档&#xff1a; 官网&#xff1a; https://panjiachen.github.io/vue-element-admin-site/zh/guide/#%E5%8A%9F%E8%83%BD遇到的问题&#xff1a; npm ERR! Error while executing…

移动硬盘怎么加密?移动硬盘加密怎么设置?

在工作中&#xff0c;我们经常需要使用移动硬盘来保存重要数据&#xff0c;但是这样却不能保护重要数据的安全。所以&#xff0c;我们可以使用加密来保护移动硬盘。那么&#xff0c;移动硬盘要怎么加密呢&#xff1f; U盘超级加密3000 U盘超级加密3000是一款专业的移动储存设备…

Java类加载机制(类加载器,双亲委派模型,热部署示例)

Java类加载机制 类加载器类加载器的执行流程类加载器的种类加载器之间的关系ClassLoader 的主要方法Class.forName()与ClassLoader.loadClass()区别 双亲委派模型双亲委派 类加载流程优缺点 热部署简单示例 类加载器 类加载器的执行流程 类加载器的种类 AppClassLoader 应用类…

利用maven的dependency插件分析工程的依赖

dependency:analyze https://maven.apache.org/plugins/maven-dependency-plugin/analyze-mojo.html 分析项目的依赖&#xff0c;确定哪些&#xff1a;用了并且声明了、用了但没有声明、没有使用但声明了。 dependency:analyze可以单独使用&#xff0c;所以它总是会执行test-…

【算法练习Day38】零钱兑换完全平方数

​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;练题 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录 零钱兑换完全平方数总结&am…

软件测试:单元测试、集成测试、系统测试详解

实际的测试工作当中&#xff0c;我们会从不同的角度对软件测试的活动进行分类&#xff0c;题主说的“单元测试&#xff0c;集成测试&#xff0c;系统测试”&#xff0c;是按照开发阶段进行测试活动的划分。这种划分完整的分类&#xff0c;其实是分为四种“单元测试&#xff0c;…

TablePlus for Mac 数据库管理工具功能介绍

TablePlus是一款功能强大的数据库管理工具&#xff0c;专为Mac操作系统设计。它支持多种主流数据库&#xff0c;包括MySQL&#xff0c;PostgreSQL&#xff0c;SQLite&#xff0c;Microsoft SQL Server&#xff0c;Amazon Redshift等等。无论您是开发人员、数据库管理员还是数据…

【2024最新】Android Debug Bridge【下载安装】零基础到大神【附下载链接】

一、ADB简介 1、什么是adb ADB 全称为 Android Debug Bridge&#xff0c;起到调试桥的作用&#xff0c;是一个客户端-服务器端程序。其中客户端是用来操作的电脑&#xff0c;服务端是 Android 设备。 ADB 也是 Android SDK 中的一个工具&#xff0c;可以直接操作管理 Androi…

多个PDF发票合并实现一张A4纸打印2张电子/数电发票功能

python教程79--A4纸增值税电子发票合并打印_python 打印 发票设置_颐街的博客-CSDN博客文章浏览阅读7.9k次。接上篇https://blog.csdn.net/itmsn/article/details/121902974?spm1001.2014.3001.5501一张A4纸上下2张增值税电子发票实现办法。使用环境&#xff1a;python3.8、ma…

【C++基础知识学习笔记】精华版(复习专用)

常用语法 函数重载(Overload) 规则: 函数名相同 参数个数不同、参数类型不同、参数顺序不同 注意: 返回值类型与函数重载无关 调用函数时,实参的隐式类型转换可能会产生二义性 默认参数 C++ 允许函数设置默认参数,在调用时可以根据情况省略实参。规则如下: 默认参数只能…

chinese_llama_aplaca训练和代码分析

训练细节 ymcui/Chinese-LLaMA-Alpaca Wiki GitHub中文LLaMA&Alpaca大语言模型本地CPU/GPU训练部署 (Chinese LLaMA & Alpaca LLMs) - 训练细节 ymcui/Chinese-LLaMA-Alpaca Wikihttps://github.com/ymcui/Chinese-LLaMA-Alpaca/wiki/%E8%AE%AD%E7%BB%83%E7%BB%86%E…