100个候选人,没一个能讲明白什么是自动化框架?

news2024/11/24 23:05:47

什么是自动化测试框架

01 什么是框架

框架是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法。它规定了应用的体系结构,阐明了整个设计、协作构件之间的依赖关系、责任分配和控制流程,表现为一组抽象类以及其实例之间协作的方法。

框架一般是成熟、稳健的,它可以处理系统很多细节问题,比如,事物处理,安全性,数据流控制等问题。还有框架一般都经过很多人使用,所以结构很好,所以扩展性也很好,而且它是不断升级的,可以直接享受别人升级代码带来的好处。

02 什么是自动化测试框架

自动化测试框架是为自动化测试用例或者脚本提供执行环境而搭建的基础设施。自动化测试框架有助于有效地开发、执行和报告自动化测试用例。

1、优点:

代码复用

提高测试效率

更高的测试覆盖率

维护成本低

更早发现和记录bug

在这里插入图片描述

2、框架的基本组件

需要配置文件管理

一般需要一个配置文件去控制一些环境信息、开关。配置文件可以是txt/xml/yaml/properties/ini,一般.properties使用较多在JAVA里,Python的话通常会选择ini文件。

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

如果代码和脚本在一个类文件,那么就根本没有用到代码重构,复用。代码和用例文件分离后,会更加清晰,可以有更多人开发脚本,方便调试。

报告和日志文件输出

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

自定义的库的封装

很多功能需要重复调用,可以写成一个公用方法,放到工具包下,每次方便调用,例如浏览器引擎类和basepage.py的封装。

管理、执行脚本方式

例如Python中单元测试框架unittest使用率非常高。

第三方插件引入

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

持续集成

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

总结:

一个简单的自动化测试框架,可能包含哪些组成部分:

图片

03 为什么需要自动化测试框架

使自动化测试的实施更容易:一个好的自动化测试框架是可以让不那么懂技术的人也可以写自动化测试脚本。

解决自动化测试脚本本身存在的问题:如异常处理和场景恢复。

测试易于维护。

可重用性:可以实现一些通用功能,简化脚本开发过程。

测试报告美观易读。

04 判断是否需要自动化测试

自动化测试成本投入高,风险大,并且不是所有的项目都适合自动化。自动化测试的优势在于反复迭代,它的价值产出在于长期的回归测试,以保证被测产品长期稳定地版本更新。

适用项目:

项目周期要长,且需求不会频繁变更。

系统中多数对象要可以被识别,并且不存在大量第三方插件。

02 自动化测试框架的类型

01 自动化测试框架的分类

下面是目前流行的各种类型的自动化测试框架。这些框架可能基于对不同关键因素(例如驱动类型、可重用性、易于维护等)进行自动化的支持而彼此不同。

1、基于模块的测试框架:

在这里插入图片描述

这种框架将整个“测试中的应用程序”分为许多逻辑和独立的模块。对每个模块,创建一个独立的测试脚本,这些脚本结合在一起时,会构建成更大的测试脚本,代表多个模块,这些模块被抽象层隔开,这样在应用程序的各个部分所做的更改不会对该模块产生影响。

缺点:在为每个模块实现测试脚本的同时,测试数据已经嵌入到测试脚本中,这导致使用不同的测试数据进行测试时需要在测试脚本中进行操作。

2、库架构测试框架

在这里插入图片描述

库体系结构测试框架是建立在基于模块的测试框架之上,但比后者有一些额外的优势。它没有将测试的应用程序划分为测试脚本,而是划分为函数。因此,为测试中的应用程序创建一个由公共函数组成的公共库,当需要时,可以从测试脚本中调用这些库。

它的基本原理就是确定通用的步骤,并将这些步骤分组到公共库下的函数中,在需要的时候在测试脚本中调用这些函数。

比如:一个登录的步骤,可以把它组合成一个函数,并保存到一个库中,登录时可以直接从库中调用这个函数,而不需要重新再编写代码。

缺点:像基于模块的框架一样,测试数据嵌入测试脚本中,改变数据需要修改脚本;随着越来越多的库的引入,可能会使框架越来越复杂。

3、数据驱动测试框架

在这里插入图片描述

数据驱动测试框架将测试脚本逻辑和测试数据彼此分离。可以把测试数据单独存储起来,存储数据的可以是 xml文件、excel文件、文本文件、csv文件、ODBC数据库等。一般都是以 key-value 格式存储,方便获取使用。

缺点:

① 过程比较复杂,可能需要定制测试数据源格式和读取机制

② 只有具有相同执行步骤集的相似测试用例才能组合成多组数据。不同的执行步骤集需要不同的测试用例

4、关键字驱动测试框架

在这里插入图片描述

关键字驱动测试框架是对数据驱动测试框架的扩展,从某种意义上说,它不仅将测试数据从脚本中分离出来,它还将数据测试脚本的特定代码集保存到外部数据文件中。这些代码集被称为关键字,每个关键字都一种操作。关键字和测试数据都是独立于该框架。

缺点:

① 需要懂得关键字的创建机制,从而可以自己开发关键字

② 随着越来越多的关键字引入,可能会使框架逐渐变得复杂

③ 测试用例变得更长且复杂,从而影响测试用例的可维护性

5、混合测试框架

在这里插入图片描述

混合测试框架就是上述(模块化,数据驱动和关键字驱动)多种类型框架的组合。就是利用各种类型框架的优点,组合起来的混合型测试框架。

在这种框架中,通过将测试用例结合到模块化测试框架中,从模块化脚本中开发测试用例。每个测试用例都使用一个驱动程序脚本,该脚本使用数据驱动框架中的数据文件和关键字驱动框架中的操作文件。

会比其他类型的测试框架更为复杂一些,例如阅读、维护等

6、行为驱动开发框架

行为驱动测试框架可以让开发人员、测试人员等以易于阅读和理解的格式实现功能验证的自动化。可通过自然语言来描述测试功能,测试场景,测试步骤,测试结果等。

02 流行的自动化测试框架

1、Robot Framework

如果要使用python自动化测试框架进行测试自动化,则Robot Framework是最佳选择。Robot Framework是基于Python的,但是也可以使用 Jython(Java)或IronPython(.NET)语言进行脚本用例的编写。

Robot Framework使用关键字驱动的方法使测试用例易于创建。

Robot Framework还可以测试MongoDB、FTP、Android、Appium等。

它拥有非常多的测试库,包括Selenium WebDriver库和其他常用的的工具。

Robot Framework具有许多API,可帮助使其尽可能地扩展。

2、WebdriverIO

WebdriverIO是基于Node.js的自动化测试框架。它具有集成的测试运行程序,可以为Web应用程序以及本机移动APP运行自动化测试用例。而且,WebdriverIO可以同时在WebDriver协议和Chrome Devtools协议上运行,从而使其对于基于Selenium Webdriver的跨浏览器测试或基于Chromium的自动化都非常有效。由于WebDriverIO是开源的,因此测试工程师可以获得一堆满足自动化需求的插件。

3、Citrus

Citrus是一个开源测试框架,测试人员可以使用该框架自动化针对任何消息传递协议或数据格式的集成测试。对于诸如REST、HTTP、SOAP或JMS之类的任何消息传递传输,Citrus测试框架都适用于测试消息传递集成。如果需要与用户界面进行交互然后验证后端过程,则可以将Citrus与Selenium进行集成

4、Cypress

Cypress是一个以开发人员为中心的测试自动化框架,该框架使TDD测试驱动开发对开发人员而言成为现实。它的设计原理是能够非常简单地将所有内容打包并捆绑在一起以进行整个端到端测试。Cypress的架构与Selenium不同。Selenium WebDriver在浏览器外部远程运行,而Cypress在其内部运行。这种方法有助于了解浏览器内部和外部发生的所有事情,以提供更一致的测试结果。

5、Selenium

Web应用程序中最受欢迎的开源测试自动化框架之一。Selenium具有跨平台和跨浏览器功能,它还可以用作许多其他测试工具的基础。Selenium支持多种编程语言,例如Java、C#、PHP、Python、Ruby等。它拥有最大的在线社区之一,因此更加易于维护。

Selenium可以通过广泛的库和API进行高度扩展,以满足每个团队的需求。Selenium是测试人员首选的测试框架,因为可以编写更高级的测试脚本来满足各种复杂程度。它提供了用于测试创作的回放工具,而无需学习特定的脚本语言。

6、Carina

Carina使用流行的开源解决方案(如Appium、TestNG和Selenium)构建的,可减少对特定技术堆栈的依赖。测试人员可以测试APP(原生APP、混合APP、WebAPP)、WEB应用程序、REST服务和数据库。Carina框架支持不同类型的数据库,例如MySQL、SQL Server、Oracle、PostgreSQL,从而提供了使用MyBatis ORM框架实现DAO层的完美体验。

Carina支持所有流行的浏览器和移动设备,并且在IOS/Android之间重用了高达80%的测试自动化代码。API测试基于Freemarker模板引擎,它在生成REST请求方面提供了极大的灵活性。Carina是跨平台的,可以在Unix或Windows OS上轻松运行测试用例。

03 Selenium

Selenium是一个用于Web应用程序测试的工具,是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE)、编写及运行(Selenium Remote Control)和测试的并行处理(Selenium Grid)。Selenium的核心Selenium Core基于JsUnit,完全由JavaScript编写,因此可以用于任何支持JavaScript的浏览器上。Selenium可以模拟真实浏览器,自动化测试工具,支持多种浏览器,爬虫中主要用来解决JavaScript渲染问题。

这个工具的主要功能包括:测试与浏览器的兼容性,测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。

优点:

开源:不需要钱,且方便进行二次开发,例如提取对json和xml的处理来实现的数据驱动等。

灵活性:因为更加入了xpath(当然大型项目的脚本里xpath 慎用,尽量取id或稳定的属性),加上配合IDE进行定位等,效果比较好。

资料更全面,用该框架的公司越来越多。

缺点:

无论是RC还是Webdriver,对测试人员的编码水平有一定要求。

ant,testng,hudson使用也都是小众,大多数人执行这个框架前需要有较长时间学习适应。

时间较短,不如QTP如此完善。

01selenium 1.0

selenium 1.0 包括两部分:

selenium server

Client Libraries

支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera,Edge等。

1、selenium server

selenium server负责控制浏览器的行为。主要有launcher,Http Proxy,selenium core。selenium core使用Selenium Server嵌入到浏览器页面中。实质上,selenium core是由JS函数组成,这样我们可以实现用程序对浏览器进行操作。

2、client Libraries

编写测试用例时控制selenium server的库。

3、testcase的执行过程

图片

测试案例(Testcase)通过Client Lib的接口向Selenium Server(一个独立的中间服务器,确切地说是代理服务器)发送Http请求,要求和Selenium Server建立连接。

Selenium Server的Launcher启动浏览器,把Selenium Core加载入浏览器页面当中,并把浏览器的代理设置为Selenium Server的Http Proxy。

Testcase通过Client Lib的接口向Selenium Server发送Http请求,Selenium Server对请求进行解析,然后通过Http Proxy发送JS命令通知Selenium Core执行操作浏览器的动作。

Selenium Core接收到指令后,执行操作。

浏览器收到新的页面请求信息(因为在4中,Selenium Core的操作可能引发新的页面请求),于是发送Http请求,请求新的页面。由于Selenium Server在启动浏览器时做了手脚,所以Selenium Server会接收到所有由它启动的浏览器发送的请求。

Selenium Server接收到浏览器的发送的Http请求后,自己重组Http请求,获取对应的Web页面。

Selenium Server的Http Proxy把接收的Web页面返回给浏览器。

02 selenium 2.0(Webdriver)

Selenium 2.0 将浏览器原生的API封装成WebDriver API,可以直接操作浏览器页面里的元素,甚至操作浏览器本身(截屏,窗口大小,启动,关闭,安装插件,配置证书之类的),所以就像真正的用户在操作一样。

1、Selenium2的架构:

在这里插入图片描述

webdriver按照server–client的经典设计模式设计:

server端就是remote server,可以是任意的浏览器:我们的脚本启动浏览器后,该浏览器就是remote server,它的职责就是等待client发送请求并做出相应。

client端简单说来就是我们的测试代码:测试代码中的一些行为,比如打开浏览器,转跳到特定的url等操作是以http请求的方式发送给被server端(也就是被测浏览器)server接受请求,并执行相应操作,并在response中返回执行状态、返回值等信息。

2、WebDriver Wire

the WebDriver Wire Protocol是Selenium自己设计定义的协议,这套协议非常之强大,几乎可以操作浏览器做任何事情,包括打开、关闭、最大化、最小化、元素定位、元素点击、上传文件等

WebDriver Wire协议是通用的,也就是说不管FirefoxDriver还是ChromeDriver,启动之后都会在某一个端口启动基于这套协议的Web Service。

例如FirefoxDriver初始化成功,默认从http://localhost:7055开始,IE则是http://localhost:52432。

3、webdriver的工作原理:

启动浏览器后,selenium-webdriver会将目标浏览器绑定到特定的端口,启动后的浏览器则作为webdriver的remote server。

客户端(也就是测试脚本),借助ComandExecutor发送HTTP请求给sever端

(通信协议:The WebDriver Wire Protocol,在HTTP request的body中,会以WebDriver Wire协议规定的JSON格式的字符串来告诉Selenium我们希望浏览器接下来做什么事情)。

Sever端需要依赖原生的浏览器组件,转化Web Service的命令为浏览器native的调用来完成操作。

04 Appium

Appium是一个开源的、跨平台的自动化测试工具,支持IOS、Android和FirefoxOS平台。通过Appium,开发者无需重新编译app或者做任何调整,就可以测试移动应用,可以使测试代码访问后端API和数据库。

它是通过驱动苹果的UIAutomation 和 Android的UiAutomator框架来实现的双平台支持,同时绑定了Selenium WebDriver用于老的Android平台测试。开发者可以使用WebDriver兼容的任何语言编写测试脚本

如Java, OC, JS, PHP,Python, Ruby, C#,Clojure 和Perl语言。

01 UIAutomation

UIAutomation是苹果提供的UI自动化测试框架,使用Javascript编写。

基于UIAutomation有扩展型的工具框架和驱动型的框架:

扩展型框架以JavaScript扩展库方法提供了很多好用js工具。

注入式的框架通常会提供一些Lib或者是Framework,要求测试人员在待测应用的代码工程中导入这些内容,框架可以通过他们完成对app的驱动。

驱动型UI Automation 在自动化测试底层使用了UI Automation库,通过TCP通信的方式驱动UI Automation来完成自动化测试,通过这种方式,编辑脚本的语言不再局限于JavaScript。

Automation是Apple官方提供的UI自动化测试的解决方法,但接口不够丰富。

02 UiAutomator

UIAutomator是由谷歌提供的测试框架,它提供了原生Android app和游戏的高级UI测试。这是一个包含API的Java库,用来创建功能性UI测试,还有运行测试的执行引擎。该库自带Android SDK。

优点:它在运行访问不同的进程时,会给JUnit测试案例特权。库由谷歌社区支持和维护。

缺点:仅支持android4.1(API level 16)及以上。不支持脚本记录。支持的重点是Java。

如自动化测试中有跨APP操作,可以结合UiAutomator实现。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:【文末小卡片领取】

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

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

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

相关文章

AntSKPro AI知识库一体机:深度解析RTX 4060 8G与RTX 3060 12G在大模型处理中的性能优劣势

1. 架构与性能 RTX 4060 8G:基于NVIDIA的较新架构,可能提供更高的计算效率和更先进的功能,如更高效的光线追踪和AI处理能力。RTX 3060 12G:虽然是基于较早的架构,但拥有更大的显存容量,对于处理大型数据集…

【828华为云征文|工欲善其事必先利其器:华为云Flexus X实例 一键部署宝塔面板】

文章目录 Flexus云服务器X实例介绍华为云的神秘新武器Flexus云服务器X实例的独门绝技Flexus云服务器X实例:哪里有需要,哪里就有我 一键部署宝塔面板Flexus云服务器X 购买及登录使用部署宝塔面板什么是宝塔面板一键安装宝塔面板如何放行13012端口&#xf…

Qt进程间通信,不推荐使用QSharedMemory和QLocalSocket

1、据网友说QLocalSocket有问题,共享内存QSharedMemory也有,多线程问题,不灵活,丢数据都有,而且还占资源。后来换成了zmqprotobuf。 2、zmq ZMQ(zeromq)被称为史上最快的“消息队列”,它处于会话层之上,应用层之下,使用…

ElasticSearch的DSL查询④(DSL查询、RestClient的DSL查询)

目录 一、DSL查询 1.1 快熟入门 1.2 叶子查询 1.2.1 全文检索查询 1)match查询 2)multi_match查询 1.2.2 精确查询 1)term查询 2)range查询 3)ids查询 1.3 复合查询 1.3.1 bool查询 1.3.2 算分函数查询 …

9月10号的学习

//界面1 头文件 signals://界面1的自定义信号void my_signal(); private slots:void on_pushButton_2_clicked();void on_pushButton_clicked(); //界面1 .cpp文件 void Widget::on_pushButton_2_clicked() {QMessageBox msg(QMessageBox::Warning,"警告","是否…

Linux学习-ELK(一)

配置三台elasticsearch服务器 安装包 elasticsearch.j2 报错 #---执行rsync命令报以下错误 [rootes1 ~]# rsync -av /etc/hosts 192.168.29.172:/etc/hosts root192.168.29.172s password: bash: rsync: 未找到命令 rsync: connection unexpectedly closed (0 bytes receive…

【Unity面经】性能优化篇

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 专栏交流🧧&…

MySQL 查询优化秘籍:让你的数据库查询飞起来

《MySQL 查询优化秘籍:让你的数据库查询飞起来》 在数据库应用中,高效的查询性能至关重要。MySQL 作为广泛使用的关系型数据库,掌握一些常用的查询优化方法可以极大地提升系统的响应速度和性能。今天,我们就来一起探讨常用的优化…

WORD批量转换器MultiDoc Converter

WORD批量转换器MultiDoc Converter https://www.52pojie.cn/thread-1318745-1-1.html 可批量将doc、docx等文件格式转成doc、docx、pdf、rtf、txt、html、epub等格式。 安装包下载地址:https://wws.lanzouj.com/irvVbiz0pkd 最终下载文件打包地址(未作成…

QT Creater实现国庆节主题项目【0基础完成版】

本文适用对象 想要学习qt creater的小白;想要学习c++制作软件的编程爱好者。可以先下载这篇博客绑定的资源,然后一边操作,一边学习,会更高效~0. 创建初始项目 一步步来操作吧,首先下载qt creter,之前发布过相关资源,大家直接查找下载,或者自行下载。 1. 初始代码 mai…

C++竞赛初阶L1-15-第六单元-多维数组(34~35课)555: T456505 矩阵乘法

题目内容 计算两个矩阵的乘法。nm 阶的矩阵 A 乘以 mk 阶的矩阵 B 得到的矩阵 C 是 nk 阶的,且 C[i][j]=A[i][0]B[0][j]+A[i][1]B[1][j]+ …… +A[i][m−1]B[m−1][j](C[i][j] 表示 C 矩阵中第 i 行第 j 列元素)。 输入格式 第一行为 n,m,k,表示 A 矩阵是 n 行 m 列,B 矩…

如何使用 ONNX 结合 GPU 加速推理(CUDA 与 cuDNN 简明指南)

前言 在深度学习模型推理中,使用 GPU 进行加速是提升模型推理速度的关键方式之一。 本文将带大家一步步了解如何使用 ONNX Runtime 结合 NVIDIA 的 CUDA 和 cuDNN 进行 GPU 加速。 一、查找ONNX、CUDA与cuDNN之间的对应版本 首先,我们需要确保 ONNX Runtime 与 CUDA 和 cu…

数据流图例题

答案:A A 解析:DFD是数据流图 ERD是实体流程图,也就是ER图 数据流图的元素 数据流:、由一组固定成分的数据组成,表示数据的流向。每个数据流通常有一个合适的名词,反映数据流的含义 加工:加…

(计算机网络)运输层

一.运输层的作用 运输层:负责将数据统一的交给网络层 实质:进程在通信 TCP(有反馈)UDP(无反馈) 二.复用和分用 三. TCP和UDP的特点和区别 进程号--不是固定的 端口号固定--mysql--3306 端口--通信的终点 …

认识保护模式

认识保护模式 为什么需要保护模式 Intel 8086是16位CPU,它有着16位的寄存器,16位的数据总线以及20位的地址总线和1MB的寻址能力。从80386开始CPU进入32位时代,寻址能力达到4GB,无法使用16位寄存器完成寻址 GDT(global descriptor table) 而保护模式下,虽然段值仍…

《王者荣耀世界》不止在苹果16优化 多终端优化也在进行

易采游戏网9月10日消息:随着iPhone16的发布,全球手游玩家的目光再次聚焦于这款全新设备的性能表现。而作为国内游戏界的代表作之一,《王者荣耀世界》也将迎来一波重大的体验升级。这一次的优化并不只局限于iPhone16,实际上&#x…

客服宝:专业跨平台快捷回复软件

在这个信息爆炸的时代,客服工作的重要性不言而喻。然而,面对多渠道、高频率的咨询与互动,客服团队如何保持高效、专业且富有人情味的对话呢?客服宝——一款专业的跨平台快捷回复软件,以其独特的功能优势,为…

第三部分:4---进程地址空间

目录 数组的空间分配解析: 物理地址和虚拟地址: 虚拟地址空间: 进程地址空间的本质: 为什么要有进程地址空间? 页表对进程访问内存的检查: 进程地址空间和页表如何关联起来? 进程的独立…

源荷储再创新!小论文轻松发!基于雨流计数法的源-荷-储双层协同优化配置研究程序代码!

前言 如何实现源与荷信息互通,将传统的供需信息由静态传递向能源互联转变,形成能源互联网,是今后能源革命的变革方向。新电改的出台推动了能源互联网的发展,储能技术作为能源互联网发展中的关键元素,由于储能系统投资…

每个python程序员都应该早点知道的 6 个 Python 函数

在编程中,默认参数的引入使得函数调用更为灵活,不仅允许开发者在特定情况下省略某些非必需参数,同时也强调了对参数与实际传递值(即论点)之间区别的理解,这对于掌握函数工作机制至关重要。 此外&#xff0…