测试自动化框架

几代测试自动化框架
在开始自动化项目之前,您需要了解需求;您拥有哪些资源、需要自动化哪些内容、支持的平台等。但是,框架有不同类型,您需要仔细选择其中一种类型。您需要回答许多问题才能成功完成该过程。这里是其中的一些:

QA 工程师的技术水平如何?
谁将负责维护和开发该框架?
您的团队中是否有人在设计框架方面拥有丰富的经验?
您有 DEV 团队的支持吗?
您需要自动化的功能有多复杂?
应用的需求是否稳定?如果不是,多久更换一次?
这些只是您需要问的几个问题。我将撰写一篇关于它们的单独文章,更详细地讨论所有内容。我在这里的观点是,除了这些问题之外,了解不同类型的测试自动化框架的历史和背景将有助于您进行选择。特别是对于新项目,您不想生活在过去。几乎没有公司使用瀑布式开发软件而不使用敏捷方法或拥抱持续集成和持续部署。此外,当我们要讨论新一代自动化时,质量检查人员是/应该是非常好的程序员。抱歉写了“好”——测试自动化,你应该是技术性的,无论谁告诉你其他东西,他都是在撒谎,或者试图向你推销一些要花很多钱的东西。

第一代:录制和回放
我什至不能将这种类型的自动化测试称为框架,因为对我来说,框架应该是几乎完全编码的东西。有些人将这种类型的自动化称为 线性脚本框架。

2023 年自动化测试将会发生什么

我们的 2023 年自动化测试报告探讨和评估了当前的测试趋势、测试架构和框架,以及支持测试自动化的策略和工具,例如人工智能和低代码。


测试人员不需要编写代码来创建函数,并且步骤是按顺序编写的。在此过程中,测试人员记录每个步骤,例如导航、用户输入或检查点,然后自动回放脚本以进行测试。

我能给出的最著名的例子是Selenium IDE。

硒集成开发环境

优点和缺点
您不需要编写自定义代码。您确实可以快速自动化一些简单的场景。

然而,维持大量这些测试几乎是不可能的。自动化更复杂的场景是一个巨大的挑战。将这些测试集成到 CI 流程中、获得正确的报告并针对不同的工作环境进行配置是一件令人头疼的事情。

背景 — 质量保证和技术
当这些工具第一次出现时,大多数公司刚刚开始从瀑布式到敏捷式的过渡。当时,只有少数 QA 工程师(如果这是正确的名字的话),因此大多数测试都是手动的,因为技术更简单。整个网络热潮才刚刚开始,因此,毫不奇怪,大多数这些工具都支持网络录制和播放。后来出现了类似的桌面自动化工具,例如Test Studio。然而,由于新版本的发布并不经常发生,因此雇用更多非技术人员并手动测试应用程序会更便宜。这就是为什么这些人的编码解决方案不起作用,因为他们大多数人不知道如何编程。对于后代,你会看到这种情况开始发生变化,他们必须学习新技能才能保住工作。

第二代:模块化和数据驱动的框架
基于模块化的测试框架
在记录和回放脚本中,数据是硬编码的,更复杂的场景几乎不可能编写。这就是为什么大多数供应商和开源工具开始支持导出到代码选项,将录制的测试导出到流行的编程语言,您可以在其中编辑和修改它。

同样,最著名的例子是 Selenium IDE,您可以将测试导出到 Selenium 后端代码,然后导出到 WebDriver。

模块框架背后的整个想法是将应用程序分为不同的模块或导出的脚本,然后将它们组合成更大的测试。例如,您将有一个用于登录应用程序的模块,另一个用于填写账单信息的模块,还有一个用于提交票证的模块,等等。在大多数情况下,测试中的数据再次被硬编码。

数据驱动测试框架
由于对测试中的数据进行硬编码限制了不同步骤的组合,并使创建新测试变得越来越困难,因此出现了数据驱动框架。它们只是其他类型框架之上的一层,例如基于模块或基于库的框架。

数据驱动测试框架帮助用户将测试脚本逻辑和测试数据相互分离。它允许用户将测试数据存储在外部数据库中。外部数据库可以是 XML 文件、Excel 文件、文本文件、CSV 文件、ODBC 存储库等。

优点和缺点
由于这些框架是经过编码的,因此维护起来稍微容易一些,因为您可以使用编程 IDE 的功能来修复测试。此外,它们还显着增加了逻辑的重用。

但是,由于大部分代码是自动生成的,因此您必须重写它。由于抽象级别很低,代码的可维护性仍然很低,这导致了大量的复制粘贴。随着数据驱动框架的引入,调试和故障排除变得更加困难。另外,由于测试逻辑和测试数据是分开的,测试的可读性较差。

背景 — 质量保证和技术
随着敏捷的采用,项目开始变得更大、更复杂。人们开始觉得测试自动化可以帮助他们跟上步伐。但是,正如我们所讨论的,由于应用程序变得更加复杂,因此需要一种更好的编写测试的方法。

QA 人员开始学习程序员的编程语言,并开始导出测试,希望通过最少的编辑实现自动化。数据驱动测试的引入有助于更快地实现自动化。但是,就像完成一个新项目一样,一开始,每个人都试图无论如何都要完成它,这意味着没有人知道跟上这个节奏并维持测试会有多困难。随着时间的推移,维护测试的资源变得越来越大,人们支持旧脚本比编写新脚本花费更多的时间。

第三代:库和关键字驱动的框架
库架构测试框架
库架构测试框架从根本上是建立在基于模块的测试框架之上的,并且具有一些额外的优点。我们不是将被测应用程序划分为测试脚本,而是将应用程序划分为函数,或者更确切地说,划分为常用函数。该框架背后的基本原理是确定通用步骤,将它们分组到库下的函数中,并在需要时在测试脚本中调用这些函数。

例如,在我担任 Telerik 的 QA 架构师期间,我们拥有三个带有三个购物车的大型网站。正如您可以想象的那样,开发人员实现两个额外购物车的最快方法是复制并粘贴代码并仅更改布局。基本上,整个工作流程保持不变;只有前端看起来不同,并且网络元素有不同的定位器。当时,我们有类似基于模块的测试框架。我们认为,为两个额外网站维护相同的测试需要花费大量时间,因此我们将基于模块的测试框架升级为库框架,使用抽象外观来抽象整个工作流程。页面对象是此类框架的重要组成部分。

关键字驱动的测试框架
在关键字驱动的框架中,被测应用程序的每个功能都布置在一个表中,其中针对需要运行的每个测试按连续顺序排列了一系列指令。与数据驱动框架类似,测试数据和脚本逻辑在关键字驱动框架中分离,但这种方法更进一步。

在表中,关键字以逐步方式与关联对象或正在执行操作的 UI 部分一起存储。为了使这种方法正常工作,需要一个共享对象存储库来将对象映射到其关联的操作。

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

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

相关文章

【Android知识笔记】Webview专题

WebView 核心组件 类名作用常用方法WebView创建对象加载URL生命周期管理状态管理loadUrl():加载网页 goBack():后退WebSettings配置&管理 WebView缓存:setCacheMode() 与JS交互:setJavaScriptEnabled()WebViewClient处理各种通知&请求事件should

DDD与微服务的千丝万缕

一、软件设计发展过程二、什么是DDD?2.1 战略设计2.2 战术设计2.3 名词扫盲1. 领域和子域2. 核心域、通用域和支撑域3. 通用语言4. 限界上下文5. 实体和值对象6. 聚合和聚合根 2.4 事件风暴2.5 领域事件 三、DDD与微服务3.1 DDD与微服务的关系3.2 基于DDD进行微服务…

【深入探究Java集合框架】从List到Map的完整指南

文章目录 🌟 Java集合框架🍊 Collection🎉 List🎉 Set🎉 Map 🍊 集合的选择🎉 1. 有序并允许重复元素的集合 List🎉 2. 无序并且不允许重复元素的集合 Set🎉 3. 维护映射…

Spring Cloud Alibaba系列(6)之nacos集群搭建

传送门 Spring Cloud Alibaba系列之nacos:(1)安装 Spring Cloud Alibaba系列之nacos:(2)单机模式支持mysql Spring Cloud Alibaba系列之nacos:(3)服务注册发现 Spring Cloud Alibaba系列之nacos:(4)配置管理 Spring Cloud Al…

NLP:从头开始的文本矢量化方法

一、说明 NLP 项目使用文本,但机器学习算法不能使用文本,除非将其转换为数字表示。这种表示通常称为向量,它可以应用于文本的任何合理单位:单个标记、n-gram、句子、段落,甚至整个文档。 在整个语料库的统计 NLP 中&am…

Java 中的 Default 关键字

default 关键字:是在 Java 8 中引入的新概念,也可称为 Virtual extension methods——虚拟扩展方法与public、private等都属于修饰符关键字,与其它两个关键字不同之处在于default关键字大部分都用于修饰接口。 default 修饰方法时只能在接口…

Leetcode刷题解析——串联所有单词的子串

1. 题目链接:30. 串联所有单词的子串 2. 题目描述: 给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。 s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。 例如,如果 words ["…

【Docker从入门到入土 2】Docker数据管理、网络通信和网络模式 1.0

Part2 一、Docker网络模式(面试高频)1.1 Docker 网络实现原理1.2 host模式1.3 container模式1.4 none模式1.5 bridge模式1.6 自定义网络 二、Docker网络通信2.1 端口映射2.2 容器互联 三、Docker资源控制3.1 Cgroup简介3.2 CPU资源控制3.2.1 设置CPU使用…

论文阅读:Efficient Point Cloud Segmentation with Geometry-Aware Sparse Networks

来源:ECCV2022 链接:Efficient Point Cloud Segmentation with Geometry-Aware Sparse Networks | SpringerLink 0、Abstract 在点云学习中,稀疏性和几何性是两个核心特性。近年来,为了提高点云语义分割的性能,人们提…

5、Kafka集成 SpringBoot

SpringBoot 是一个在 JavaEE 开发中非常常用的组件。可以用于 Kafka 的生产者,也可以 用于 SpringBoot 的消费者。 1)在 IDEA 中安装 lombok 插件 在 Plugins 下搜索 lombok 然后在线安装即可,安装后注意重启 2)SpringBoot 环境准…

LeetCode75——Day12

文章目录 一、题目二、题解 一、题目 11. Container With Most Water You are given an integer array height of length n. There are n vertical lines drawn such that the two endpoints of the ith line are (i, 0) and (i, height[i]). Find two lines that together …

LC-1402. 做菜顺序(记忆化搜索 ==> 动态规划、贪心)

1402. 做菜顺序 困难 一个厨师收集了他 n 道菜的满意程度 satisfaction ,这个厨师做出每道菜的时间都是 1 单位时间。 一道菜的 「 like-time 系数 」定义为烹饪这道菜结束的时间(包含之前每道菜所花费的时间)乘以这道菜的满意程度&#x…

SpringCloud 微服务全栈体系(一)

第一章 认识微服务 随着互联网行业的发展,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢? 一、单体架构 单体架构:将业务的所有功能集中在一个项目中开发&#xff…

介绍Node.js中fs模块 代码和注释。

Node.js中的fs模块提供了一些用于文件系统操作的API,包括文件读写、目录操作等。 读取文件 使用fs.readFile()方法可以读取文件内容。该方法的第一个参数是文件路径,第二个参数是可选的选项对象,第三个参数是回调函数。回调函数的第一个参数…

Looper分析

Looper分析 在 Handler 机制中,Looper 的作用是提供了一个消息循环 ( message loop ) 的机制,用于处理和分发消息。 Looper 是一个线程局部的对象,每个线程只能有一个 Looper 对象。它通过一个无限循环来不断地从消息队列中取出消息&#x…

C#,数值计算——分类与推理Phylo_clc的计算方法与源程序

1 文本格式 using System; using System.Collections.Generic; namespace Legalsoft.Truffer { public class Phylo_clc : Phylagglom { public override void premin(double[,] d, int[] nextp) { } public override double dminfn(double[…

WebSocket的入门秘籍?

一、是什么 WebSocket,是一种网络传输协议,位于OSI模型的应用层。可在单个TCP连接上进行全双工通信,能更好的节省服务器资源和带宽并达到实时通迅 客户端和服务器只需要完成一次握手,两者之间就可以创建持久性的连接&#xff0c…

Linux常用命令——clockdiff命令

在线Linux命令查询工具 clockdiff 检测两台linux主机的时间差 补充说明 在ip报文的首部和ICMP报文的首部都可以放入时间戳数据。clockdiff程序正是使用时间戳来测算目的主机和本地主机的系统时间差。 选项 -o:使用IP时间戳选项来测量系统时间差。时间戳只用3个…

Kotlin 中 apply、let、also、run的区别

apply apply 函数接收一个目标并回来该目标自身。它答应您在目标上履行一些操作&#xff0c;同时仍然回来原始目标。 fun <T> T.apply(block: T.() -> Unit): TT 是目标的类型&#xff0c;block 是一个 lambda 表达式&#xff0c;能够在该目标上履行一些操作。在这个…

【OpenCV概念】 11— 对象检测

一、说明 这都是关于物体识别的。物体识别是指通过计算机视觉技术&#xff0c;自动识别图像或视频中的物体及其属性和特征&#xff0c;是人工智能领域的一个分支。物体识别可应用于多个领域&#xff0c;包括工业自动化、智能家居、医疗、安防等。请随时阅读这篇文章&#xff1a…