什么是自动化测试框架?我们该如何搭建自动化测试框架?

news2024/11/22 21:20:55

无论是在自动化测试实践,还是日常交流中,经常听到一个词:框架。之前学习自动化测试的过程中,一直对“框架”这个词知其然不知其所以然。

最近看了很多自动化相关的资料,加上自己的一些实践,算是对“框架”有了一些理解,这篇博客,就聊聊自动化框架的一些事吧。。。

视频我非常推荐这个,能很快帮你梳理好知识点

2023全网最详细进阶Python接口自动化测试必备实战教程

一、什么是自动化测试框架

简单来说,自动化测试框架就是由一些标准,协议,规则组成,提供脚本运行的环境。自动化测试框架能够提供很多便利给用户高效完成一些事情,例如,结构清晰开发脚本,多种方式、平台执行脚本,良好的报告去跟踪脚本执行结果。

1.框架具有以下一些优点:

1)代码复用

2)最大覆盖率

3)很低成本维护

4)很少人工干预

5)简单报告输出

2.常见的测试框架分类

早期设计的框架大致可分为以下几类:

1)基于模块的测试框架

2)基于库(Library)结构测试框架

3)数据驱动测试框架,和QTP很像

4)关键字驱动测试框架,也是QTP过来的

5)混合测试框,3 4和综合

6)行为驱动开发测试框架

 这里我们不一一介绍这些框架,字面意思可以想象一些这些框架的背景和组件,本文只是对框架有一个基本了解。

3.框架基本组件

我们来思考下框架组成部分:

1)需要配置文件管理

2)业务逻辑代码和测试脚本分离

3)报告和日志文件输出

4)自定义的库的封装

5)管理、执行脚本方式

6)第三方插件引入

7)持续集成

解释:

      我们需要一个配置文件去控制一些,环境信息,开关,配置文件可以是txt/xml/yaml/properties/ini,一般.properties使用较多在JAVA里,本文是Python系列,我可能会选择ini文件。

       业务逻辑代码和测试脚本分离,不像我们刚开始学习Selenium那样,代码和脚本在一个类文件里演示。我们根本没有用到代码重构,复用。代码和用例文件分离后,更加清晰,去多人开发脚本,方便调试。

       报告和日志文件输出,你执行了多少case,case结果如何,这都需要报告来展示,一般采用第三方插件来实现这个功能,好多报告格式是html,简单,明了的风格。日志输出也很重要,如果发生报错,脚本执行失败,通过日志快速定位发生问题位置。

      用户自定义库,这个很好理解,我们很多功能需要重复调用,这样我们就写成一个公用方法,放到工具包下,每次方便调用,例如浏览器引擎类和basepage.py的封装。

      管理和执行脚本的方式,例如Python中单元测试框架unittest使用率非常高。

      第三方插件,有时候,我们一些功能,需要借助第三方插件,能够更好实现,例如AutoIT,来实现文件上传和下载。还有利用第三方报告插件生成基于html格式的测试报告。

      持续集成,git,svn,ant,maven,jenkins,我们会把这整合到jenkins,达到持续集成,一键执行测试脚本。

根据以上的特点介绍,我大致用以下图来描述一下,一个简单的自动化测试框架,可能包含哪些组成部分。

框架的简单介绍就到这里,有些人把框架想得太复杂了,框架无非就是一些软件的集合,达到特定的目的。这里我们上图画出来的框架,就是一个简单的自动化测试框架,别笑,这确实是一个简单但又包含必要的组件的自动化测试框架设计实例,如果你学会了这个设计思路和思想,那么,你已经达到了自动化测试第二个阶段的水平:能够简单设计自动化测试框架和维护框架的能力。

二、自动化测试

自动化测试定义

首先来说一下什么是软件测试?

软件测试简单来说就是在规定的条件下对程序进行操作以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。

那么什么是自动化测试呢?

自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程,即模拟手工测试步骤通过执行程序语言编制的测试脚本自动地测试软件,包括了所有测试阶段,它是跨平台兼容的,并且是进程无关的。

实际上严格的说自动化测试是分广义和狭义的。广义的就是测试自动化,它强调的是整个测试过程都由计算机系统完成,范围更广。狭义的就是我们通常所说的自动化测试,主要是说通过某个自动化工具自动执行某项测试任务,处理范围比较小。

使用自动化测试的前提条件及适用场合

前提条件

实施自动化测试之前需要对软件开发过程进行分析,以观察其是否适合使用自动化测试。通常需要同时满足以下条件:

1) 需求变动不频繁

测试脚本的稳定性决定了自动化测试的维护成本。如果软件需求变动过于频繁,测试人员需要根据变动的需求来更新测试用例以及相关的测试脚本,而脚本的维护本身就是一个代码开发的过程,需要修改、调试,必要的时候还要修改自动化测试的框架,如果所花费的成本不低于利用其节省的测试成本,那么自动化测试便是失败的。

项目中的某些模块相对稳定,而某些模块需求变动性很大。我们便可对相对稳定的模块进行自动化测试,而变动较大的仍是用手工测试。

2) 项目周期足够长

自动化测试需求的确定、自动化测试框架的设计、测试脚本的编写与调试均需要相当长的时间来完成,这样的过程本身就是一个测试软件的开发过程,需要较长的时间来完成。如果项目的周期比较短,没有足够的时间去支持这样一个过程,那么自动化测试便成为笑谈。

3) 自动化测试脚本可重复使用

如果费尽心思开发了一套近乎完美的自动化测试脚本,但是脚本的重复使用率很低,致使其间所耗费的成本大于所创造的经济价值,自动化测试便成为了测试人员的练手之作,而并非是真正可产生效益的测试手段了。

另外,在手工测试无法完成,需要投入大量时间与人力时也需要考虑引入自动化测试。

比如我们愚公坊项目这次SpringBoot升级后一些相对稳定的模块就可以采用自动化测试注册登录模块 购物车模块 订单模块等等。

适用场合

通常适合于软件测试自动化的场合:

(1)回归测试,重复单一的数据录入或是击键等测试操作造成了不必要的时间浪费和人力浪费;

(2)此外测试人员对程序的理解和对设计文档的验证通常也要借助于测试自动化工具;

(3)采用自动化测试工具有利于测试报告文档的生成和版本的连贯性;

(4)自动化工具能够确定测试用例的覆盖路径,确定测试用例集对程序逻辑流程和控制流程的覆盖。

随着测试流程的不断规范以及软件测试技术的进一步细化,软件测试自动化已经日益成为一支不可忽视的力量。能否借助于这支外在力量以及如何借助于这支力量来规范企业测试流程、提高特定测试活动的效率,正是本期所要讨论的话题。

自动化测试基本流程

1、制定测试计划

  在展开自动化测试之前,最好做个测试计划,明确测试对象、测试目的、测试的项目内容、测试的方法、测试的进度要求,并确保测试所需的人力、硬件、数据等资源都准备充分。制定好测试计划后,下发给用例设计者。

2、分析测试需求

用例设计者根据测试计划和需求说明书,分析测试需求,设计测试需求树,以便用例设计时能够覆盖所有的需求点。一般来讲,基于Web功能测试需要覆盖一下几个方面:

1)页面链接测试,确保各个链接正常;2)页面控件测试,确保各个控件可靠;3)页面功能测试,确保各项操作正常;4)数据处理测试,确保数据显示准确、处理精确可靠;5)模块业务逻辑测试,确保各个业务流程畅通。

3、设计测试用例

  通过分析测试需求,设计出能够覆盖所有需求点的测试用例,形成专门的测试用例文档。由于不是所有的测试用例都能用自动化来执行,所以需要将能够执行自动化测试的用例汇总成自动化测试用例。必要时,要将登陆系统的用户、密码、产品、客户等参数信息独立出来形成测试数据,便于脚本开发。

4、搭建测试环境

  自动化测试人员在用例设计工作开展的同时即可着手搭建测试环境。因为自动化测试的脚本编写需要录制页面控件,添加对象。测试环境的搭建,包括被测系统的部署、测试硬件的调用、测试工具的安装盒设置、网络环境的布置等。

5、编写测试脚本

  根据自动化测试用例和问题的难易程度,采取适当的脚本开发方法编写测试较薄。一般先通过录制的方式获取测试所需要的页面控件,然后再用结构化语句控制脚本的执行,插入检查点和异常判定反馈语句,将公共普遍的功能独立成共享脚本,必要时对数据惊醒参数化。当然还可以用其他高级功能编辑脚本。脚本编写好了之后,需要反复执行,不断调试,知道运行正常为止。脚本的编写和命名要符合管理规范,以便统一管理和维护。

6、分析测试结果、记录测试问题

  应该及时分析自动化测试结果,建议测试人员每天抽出一定时间,对自动化测试结果进行分析,以便尽早地发现缺陷。如果采用开源自动化测试工具,建议对其进行二次开发,以便与测试部门选定的缺陷管理工具紧密结合。理想情况下,自动化测试案例运行失败后,自动化测试平台就会自动上报一个缺陷。测试人员只需每天抽出一地你该时间,确认这些自动上报的缺陷,是否是真实的系统缺陷。如果是系统缺陷就提交开发人员修复,如果不是系统缺陷,就检查自动化测试脚本或者测试环境。

7、跟踪测试BUG

测试记录的BUG要记录到缺陷管理工具中去,以便定期跟踪处理。开发人员修复后,需要对此问题执行回归测试,就是重复执行一次该问题对应的较薄,执行通过则关闭,否则继续修改。如果问题的修改方案与客户达成一致,但与原来的需求有所偏离,那么在回归测试前,还需要对脚本进行必要的修改和调试。

三、常见的自动化测试框架

1.Robot

如果是希望在测试自动化工作中使用python测试自动化框架,Robot框架是最佳选择。

Robot框架使用关键字驱动的方法来简化测试的创建。Robot框架还可以测试MongoDB、FTP、Android、Appium等。它有许多测试库,包括Selenium WebDriver库和其他有用的工具。它有很多API来帮助它尽可能地扩展。Robot框架使用的关键字方法对于那些已经熟悉其他基于供应商的关键字驱动的测试工具的测试人员非常有用,这使得他们更容易过渡到开源。

2.Pytest

Pytest是另一个python类型的自动化测试框架,可适用于多种软件测试。凭借着其开源和易学的特点该工具经常被QA团队、开发团队、个人团队、以及各种开源项目所使用。鉴于Pytest具有“断言重写”之类的实用功能许多大型互联网应用。

使用先决条件:除了基本的Python知识用户并不需要更多的技术储备。另外用户只需要有一台带有命令行界面的测试设备,并安装好了Python包管理器、以及可用于开发的IDE工具。

3.Junit

Junit 是一个Java 语言的单元测试框架。它由Kent Beck 和Erich Gamma 建立,逐渐成为源于Kent Beck 的sUnit 的xUnit 家族中最为成功的一个。Junit 有它自己的JUnit 扩展生态圈。多数Java 的开发环境都已经集成了Junit 作为单元测试的工具。

Junit 是由Erich Gamma 和Kent Beck 编写的一个回归测试框架(regression testing framework)。Junit 测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。Junit 是一套框架,继承TestCase 类,就可以用Junit 进行自动测试了。

4.WebDriverIO

WebdriverIO是一个基于Node.js的自动化测试框架。它有一个集成的测试运行器,可以为web应用程序和本地移动应用程序运行自动化测试。同时,它可以在WebDriver协议和Chrome Devtools协议上运行,使它对基于Selenium WebDriver的跨浏览器测试或基于Chromium的自动化都有效。由于WebDriverIO是开源的,你可以得到一堆插件来满足你的自动化需求。“Wdio安装向导”使安装简单和容易。

5.Citrus

Citrus是一个开源框架,您可以使用它自动化任何消息传递协议或数据格式的集成测试。对于任何类型的消息传递,如REST、HTTP、SOAP或JMS,Citrus框架将适合测试消息传递集成。如果您需要与用户界面交互,然后验证后端流程,那么可以将Citrus与Selenium集成。例如,如果您必须单击“发送电子邮件”按钮并在后端验证电子邮件是否已收到,柑橘可以接收此电子邮件或UI触发的JMS通信,并验证后端结果,所有这些都在一个测试中完成。

6.Selenium

这款自动化测试框架可以说是web程序中最受欢迎的开源自动化测试框架之一,拥有强大的语言功能,涵盖所有的编程语言,可跨平台和跨浏览器,可支持记录和重放功能,以通过广泛的库和API进行高度扩展,以满足测试团队的需求,是测试人员的首选测试框架。

7.Cypress

Cypress是一个以开发人员为中心的测试自动化框架,它使测试驱动开发(TDD)成为开发人员的现实。它的设计原则是能够打包和捆绑所有东西,使整个端到端测试体验愉快和简单。

Cypress的架构与Selenium不同。Selenium WebDriver远程运行在浏览器外部,而Cypress运行在浏览器内部。这种方法有助于理解浏览器内部和外部发生的一切,从而提供更一致的结果;它不需要您处理对象序列化或在线协议,同时为您提供对每个对象的本机访问。

8.Serenity

Serenity是一个开源库,用于行为驱动的测试。该框架可帮助编写验收标准,这些标准结构良好且维护更多。Serenity提供了大量的内置功能,例如处理并行运行的测试、WebDriver管理、截屏、管理步骤之间的状态、促进Jira集成,所有这些都不需要编写一行代码。

9.Gauge

Gauge是一个开源工具无关的测试自动化框架,适用于Mac、Linux和Windows。从事TDD和BDD工作的人会喜欢Gauge专注于创建动态/可执行文档。

Gauge的重要功能有:可使用单个命令启动并运行框架;通过多种扩展插件支持模块化架构;没有任何特定的结构,能用简单的Markdown创建文本文档。当然,Gauge的功能也可以通过对插件的支持进行扩展。

10.Carina

Carina是基于Java的自动化测试框架,它不依靠特定的技术堆栈,因此测试人员智只能在iOS和Android之间重用测试自动化代码。它的重要功能有:能把所有测试层,包括移动端、Web应用程序、REST服务甚至数据库组合到同一应用程序;支持关系和分关系数据库;可以用FreeMarker模板引擎生成REST请求。

关于自动化测试框架的一些理解和思考总结,就是上面这些内容,提到的一些框架组件可能存在不合理的地方,仅供参考,如有更好的建议,请指出,不胜感激。。。

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

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

相关文章

Codeium:一个免费的、支持70多种编程语言的、可以与你对话的智能编程助手,让你从繁琐的代码中解放出来

摘要 Codeium:免费的人工智能代码加速工具,让编程变得更简单、更快、更有趣 如何使用Codeium来提高编程效率和质量?一篇文章教你掌握Codeium的三大功能:代码完成、聊天和搜索 Codeium vs GitHub Copilot:哪个更适合你…

Linux的软件生态与两个方面,客户端/Linux软件下载安装的认识,yum源/仓库(repo)与yum指令的本质,yum指令操作等

铺垫1:服务器属于硬件 服务器是一种计算机硬件设备,主要用于存储、管理和处理数据以及为其他计算机提供服务。服务器通常具有高性能的处理器、大容量的硬盘、大内存和高速网络连接等特点,可以提供各种服务,如网站托管、电子邮件服…

【教程】对视频平台授权时,加密机设备如何固定IP?

我们在此前的文章中也介绍过,我们的视频平台都是通过加密机、加密狗、激活码三种方式进行服务授权的,其中,加密机使用得较多。具体注意事项可以查看这篇文章:加密机授权注意事项汇总及解决方法。 加密机在使用时,需要在…

bat操作git(一键提交)

添加环境变量:D:\Git\Git\cmd 环境变量添加完毕后就可以直接在命令框使用git命令了 脚本实现 实现一键完成远程仓库的更新 echo off git add . git commit -m "daily push data-structure-and-algorithms" git push echo push respostory successful…

python包之matplotlib基础概念和代码详解

1 基础概念 Figure: 可以理解为 canvas(画布),在画布上可以展示一个或多个Axes Axes:中文翻译为轴,但与数学中的概念不同,Axes可以理解为子画布,它属于Figure。也可以理解为它就是一个图形或绘制图形的区…

为什么有了IP地址,还需要MAC地址呢?

不知道大家有没有困惑:为什么有了IP地址,还需要MAC地址呢?他们之间到底有什么联系?又有什么区别?是不是有一个是多余的? 流言传到了“IP地址”和“MAC地址”的耳朵里,他俩也非常苦恼&#xff0c…

【Unity】 UI自适应案例

UI自适应案例 案例一:背包自动布局1. 创建背包面板2. 背包子项自动布局3. C#代码:动态添加子项到背包中案例二:文字自适应高度1. 创建文字面板2. 组件基本设置3. C#代码:动态更新文字并自适应高度案例一:背包自动布局 需求:动态添加背包组件,设定每行特定个数并自动匹配…

抖音seo矩阵系统源码开发(三)

抖音seo框架分析: 抖音SEO源码主要有两种框架: 一是基于爬虫的框架,通过爬取抖音平台的内容,提取关键词和标签等信息,再结合优化技巧,最终实现SEO效果的提升;二是基于粉丝互动和品牌策划的框架…

制作iOS越狱deb插件+dpkg命令行教程

iOS越狱deb插件的制作 dpkg命令行教程 deb安装包的制作 介绍 Cydia Sileo都是基于Debian开发的, 所以插件都是打包成.deb格式 deb包是Debian软件包格式,文件扩展名为.deb。是Debian系统(包含Debian和Ubuntu等)专属安装包格式。 deb包在Linux操作系统中类似于wi…

探索小程序容器在软件应用架构中的角色和优势

今年来,随着软件及开源技术的发展,软件应用架构的概念也随之流行起来。它提供了一种组织和设计软件系统的有效方法,具有许多优势和好处: 模块化和可维护性:软件应用架构将系统拆分为模块化的组件,每个组件负…

00后实在太卷了,测试用例写的比我还好,羞耻啊.....

经常看到无论是刚入职场的新人,还是工作了一段时间的老人,都会对编写测试用例感到困扰?例如: 如何编写测试用例? 作为一个测试新人,刚开始接触测试,对于怎么写测试用例很是头疼,无…

面了一个5年经验的测试工程师,自动化都不会也敢喊了16k,我也是醉了····

在深圳这家金融公司也待了几年,被别人面试过也面试过别人,大大小小的事情也见识不少,今天又是团面的一天, 一百多个人都聚集在一起,因为公司最近在谈项目出来面试就2个人,无奈又被叫到面试房间。 整个过程…

【JavaEE进阶】——第七节.Spring AOP统一功能处理(切面、切点、连接点、通知)

作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏:JavaEE进阶 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!! 文章目录 前…

教学场景下的AI数字人,可视化语音交互

玩了Midjourney,感慨AI太强大了,设计师已哭晕~~ AI数字人 教学场景下的AI数字人,能实现什么? 图:AI数字人 图:AI数字人 个性化学习支持 根据学生的个人需求和学习风格,提供个性化的学习支持和…

(赠书活动第2期)Java生日快乐,“不读此生遗憾”的Java开发必备书单

Java诞生日,推荐Java“此生错过必遗憾”系列书单 Java28岁了,当打之年,并且还会打很多年。 为即将或正在使用Java的你推荐Java“此生错过必遗憾”系列书单。看看你还缺哪本?请补齐。优惠购书链接就在文中,拿好不谢。 …

【权限提升】Linux Kernel 权限提升漏洞 (CVE-2023-32233)

文章目录 前言声明一、漏洞描述二、影响版本三、本地复现四、修复方案 前言 Linux Netfilter 是一个在 Linux 内核中的网络数据包处理框架,也称作 iptables,它可以通过各种规则和过滤器,基于数据包的来源、目标地址、协议类型、端口号等信息…

小程序技术给统一门户的建设带来新的构想

统一门户的发展可以追溯到20世纪90年代初期,当时的企业和组织开始意识到信息技术可以用于整合和管理各种分散的应用程序和服务。随着互联网的普及和Web 2.0技术的兴起,统一门户的发展迅速加速。 在早期,统一门户主要采用定制化开发的方式实现…

数据可视化-Canvas

Canvas Canvas API 主要聚焦于 2D 图形。当然也可以使用<canvas>元素对象的 WebGL API 来绘制 2D 和 3D 图形&#xff0c;可以用于动画、游戏画面、数据可视化、图片编辑以及实时视频处理。 Canvas非常适合图像密集型的游戏开发&#xff0c;适合频繁重绘许多的对象。能…

opencv膨胀腐蚀

OpenCV 是一个开源的计算机视觉库&#xff0c;它包含了许多图像处理的功能&#xff0c;其中膨胀和腐蚀是两种常用的形态学操作。 膨胀&#xff08;Dilation&#xff09;&#xff1a;膨胀操作是将图像中的高亮区域&#xff08;白色像素&#xff09;扩张&#xff0c;从而填充低亮…

火车票和机票已支持数电票,泛微齐业成提供数电票全流程管理方案

数电票已经成为趋势 01扩大全面数字化的电子发票试点范围 2023年以来&#xff0c;河南、深圳等多省市税务局发布《关于开展全面数字化的电子发票试点工作的公告》&#xff0c;进一步扩大了全面数字化的电子发票试点范围&#xff0c;在政府公告、文件描述中&#xff0c;“数电…