自动化测试框架[Cypress概述]

news2024/11/13 10:14:18

目录

前言:

Cypress简介

Cypress原理

Cypress架构图

Cypress特性

各类自动化测试框架介绍

       Selenium/WebDriver

Karma

Karma的工作流程

Nightwatch

Protractor

TestCafe

Puppeteer


前言:

Cypress是一个基于JavaScript的端到端自动化测试框架,专为现代网络应用程序而设计。Cypress提供了一种简单的方式来编写、运行和调试自动化测试,可帮助测试人员更快、更准确地测试应用程序,并提高测试覆盖率。

Cypress简介

       自2004年Selenium诞生并伴随着WebDriver的发展,Selenium和Webdriver的组合成为前端自动化测试不二之选,但近些年前端技术的发展显然远远超出了Selenium的演进速度,尤其是前端页面演化成了前端应用程序开发,实际上前端已经具备了后端的一切能力,而Selenium和Webdriver本身仍旧只能单纯的用在UI层,除非我们再引入其他的库处理后端请求和响应,那么产生的问题是:Selenium和Webdriver的组合在做自动化测试的时候,如果接口请求失败了,我们不知道前端的问题还是后端的问题

       除了Selenium/WebDriver的组合外,还诞生了很多自动化测试框架,例如Karma、Nightwatch、Protractor、TestCafe、Cypress、Puppeteer,他们有的仍然依托于Selenium/Webdriver的底层协议,有的则自成体系,或极大的扩展了Selenium/Webdriver的功能,或填补了Selenium/Webdriver无法弥补的空白

       这里要说的就是Cypress,它是基于JavaScript的下一代前端测试工具,其底层实现与Selenium/Webdriver完全不同,并不依托于WebDriver Protocol,运行速度比Selenium要快,并且它和被测应用程序运行在同一个浏览器界面,因此Cypress可以测试的范围就是UI集成测试、API接口测试和单元测试,也就是测试金字塔的三层均可,不需要借助第三方库便可以对浏览器中运行的任何内容进行快速简单可靠的测试,它会彻底改变整个自动化测试的格局

Cypress原理

       大多数测试工具(Selenium/WebDriver)通过在浏览器外部运行并在网络上执行远程命令来运行(WebDriver底层的通信协议基于JSON Wire Protocol其运行需要网络通信),Cypress恰恰相反,它在与应用程序相同的生命周期里执行,当运行测试时,Cypress首先使用webpack将测试代码中的所有模块bundle到一个js文件中,然后,它会运行浏览器并将测试代码注入一个空白页面里,然后它将在浏览器中运行测试代码(可以理解为Cypress通过一系列操作将测试代码放到一个iframe中运行)

       在每次测试首次加载Cypress时,内部Cypress Web应用程序先把自己托管在本地的一个随机端口上(例如http://localhost:65874/__/),在识别出测试中发出的第一个cy.visit()命令后,Cypress将会更改其本地URL以匹配你远程应用程序的Origin(用于满足同源策略),这使得你的测试代码和应用程序可以在同一个Run Loop中运行

       因为Cypress测试代码和应用程序均运行在由Cypress全权控制的浏览器中,且他们运行在同一个Domain下的不同iframe内,所以Cypress的测试代码可以直接操作DOM、Window Objects甚至Local Storages而无须通过网络访问,也因此它更快

       此外Cypress还可以在网络(请求)层进行及时读取和更改网络流量的操作,Cypress背后是NodeJS Process,任何发往浏览器之外的HTTP的请求和响应,均由Cypress生成,被NodeJS Process控制的Proxy进行转发,因此Cypress不仅可以修改进出浏览器的所有内容,还可以更改可能影响自动化浏览器操作的代码,所以Cypress不仅从根本上控制整个自动化测试的流程,还可以提供稳定性更佳的结果

Cypress架构图

Cypress特性

  • Cypress在测试代码运行时自动拍摄快照,测试运行结束后用户可在Cypress提供的Test Runner李,通过将鼠标悬停在命令日志上查看运行时候每一步都发生了哪些事

  • 当测试代码修改后,Cypress会自动加载变更的代码并重新运行测试

  • Cypress允许验证并控制函数行为,Mock服务器响应或更改系统时间

  • 运行结果一致性,它不使用Selenium/WebDriver,在运行效率可靠性测试结果一致性上均有良好的保障

  • 不用猜测为什么测试失败,直接从Chrome DevTools进行调试,高可读性的错误提示和堆栈跟踪,调试更便利

  • 自动等待,无须再测试中添加wait或sleep,它会自动等待元素至可操作状态时才执行命令或断言,更有助于异步操作

  • 网络流量控制,它可以Mock服务器返回结果,无须连接后端服务器即可实现控制,模拟网络请求

  • 截图与视频,在测试运行失败时自动截图,在无头运行时录制整个测试套件的过程

各类自动化测试框架介绍

       Selenium/WebDriver

  • Selenium作为应用范围最广泛的UI自动化测试工具,在Selenium1的时代也就是Selenium RC,其工作原理是通过把Selenium Core注入浏览器的方式来控制浏览器,现在Selenium1已经被Selenium WebDriver取代

  • Selenium WebDriver已经到了4.x时代,它运行在浏览器中,通过调用浏览器原生API来实现对浏览器的控制,因为调用的是浏览器原生API,所以对于同样的元素操作,Selenium需要针对不同的浏览器提供相应的WebDriver

  • Selenium IDE,它是以插件的形式存在,作为一个集成开发环境,它提供了简介的页面,并提供了录制和导出不同语言代码的功能

  • Selenium-Grid,它通常跟持续集成工具配合使用,允许用户并行运行测试并且允许分布式执行测试任务

Karma

       Karma不是一个测试框架,它只是基于Node.js的一个JavaScript测试运行器,Karma基于Client/Server架构,可以用来测试所有主流的浏览器,它允许Web开发人员在简单的配置后立刻开始测试,Karma的一个强大的特性是它设置了一个文件监听器,允许代码发生更改时自动重新运行测试脚本

       服务器端(Server),是系统的主要部分,它保持所有状态(例如关于捕获的客户端的信息,当前在文件系统上运行的测试或文件)和基于该状态的可进行的操作,它包含如下部分:

  • Manager:负责与客户端的双向通信,例如通过广播启动一次测试,收集来自客户端的测试结果等

  • FS Watcher:负责观察文件系统(FS),它维护测试项目的内部模型(所有文件,它们所在的位置以及它们最后修改的时间戳),Web Server会使用此FS模型,以便向客户端提供正确的文件

  • Reporter:负责将测试结果呈现给开发人员

  • Web Server:负责提供客户端所需的所有静态数据,静态数据是客户端管理器的源代码,测试框架的源代码以及测试代码和测试中的实际代码

客户端(Client),实际执行所有测试的地方,通常是指各种浏览器,它包含如下部分:

  • Manager:负责与服务器端的双向通信,它处理来自服务器的所有消息(例如触发测试运行)并将它们传递给其他客户端组件(通常是测试框架)

  • Testing Framework:Testing Framework不是该项目的一部分,Karma足够灵活,允许使用任何第三方测试框架

  • Code Under Test & Test Code:测试框架运行的所有用户代码,它从Web Server获取并通过测试框架执行

Karma的工作流程

  • Karma在启动后,会加载插件和配置文件,然后启动本地的一个Web Server来监听所有的连接,在此过程中,所有已经连接上Server的浏览器会断开并重新连接,插件在加载的时候,一个监听浏览器的事件TestReporter将会被注册以用于后续的测试报告

  • 接着Karma启动浏览器,并将初始页面设置为Karma服务器的URL,当有浏览器链接进来时,Karma会提供一个"client.html"页面给浏览器,此页面在浏览器中运行时,会通过websocket连接回Karma服务器

  • 一旦服务器检测到websocket连接,就会通过websocket协议指示客户端执行测试:客户端页面打开一个iframe,其中包含来自服务器根据配置信息生成的“context.html”页面,该页面包括测试框架适配器,要测试的代码和测试代码

  • 当浏览器加载context页面时,一个onload事件处理程序会通过PostMessage连接客户端页面和这个context页面,此时测试框架适配器会通过客户端页面来运行测试,报告错误或成功

  • 发送到客户端页面的消息会通过websocket转发到Karma服务器,服务器将这些消息重新分派为浏览器事件,监听浏览器事件的Test Reporter通过监听浏览器事件获取数据,TestReporter可以打印这些数据,将其保存到文件,或将数据转发到另一个服务,由于数据是由测试框架适配器发送给Test Reporter的,因此适配器和Test Reporter几乎总是成对出现,如karma-jasmine和karma-jasmine-reporter

Nightwatch

       Nightwatch.js是一个用于Web应用程序和网站的自动化测试框架,使用Node.js编写并使用W3C WebDriver API(即Selenium/WebDriver的底层协议),它是一个完整的端到端测试解决方案,目的在于简化编写自动化测试和设置持续集成,Nightwatch还可以用于编写Node.js单元和集成测试

       Nightwatch使用WebDriver API执行与浏览器自动化相关的任务,例如打开窗口,点击链接等等,Nightwatch通过CSS选择器或Xpath表达式来定位元素,Nightwatch的运行依赖于Selenium Standalone Server连接和WebDriver Service(浏览器驱动),从Nightwatch1.0开始,Selenium Standalone Server不再是必备,除非需要针对于IE进行测试,或者需要使用Selenium Grid

Protractor

       Protractor基于Angular和AngularJS应用程序的端到端测试框架,它构建于WebDriverJS(W3C WebDriver API的官方实现)之上,Protractor扩展了所有WebDriverJS功能,这些功能有助于自动化所有最终用户针对各种Web浏览器的操作此外,Protractor还有一组额外的功能,比如自动等待元素加载和针对Angular的特殊定位器。

       Protractor默认使用Jasmine单元测试框架作为测试框架,所以用户可以像写Jasmine测试用例那样编写自己的测试用例,Protractor同时允许用户按喜好更改单元测试框架,由于低层架构使用W3C WebDriver协议,所有发往浏览器的测试命令均通过网络传输,速度会是个问题

TestCafe

       TestCafe是一个用于测试Web端应用程序的纯NodeJS端到端解决方案,支持使用TyepScript或JavaScript(包括支持新特性async/await)来编写测试脚本TestCafe不使用Selenium/WebDriver,它使用URL Rewriting Proxy代理,此代理将模拟用户操作的驱动程序脚本注入测试页面,由此,TestCafe可以完成测试所需的一切,例如模拟用户操作,身份验证,运行自己的脚本等,整个过程就是个仿真交互的过程

Puppeteer

       Puppeteer是一个NodeJS库,它提供了一个高级API,通过DevTools协议(Chrome DevTools协议允许工具对chromium,chrome和其他基于Blink的浏览器进行检测,检查,调试和配置)控制无头(Headless)Chrome或Chromium,通过配置,它也可以控制完整的(有头)Chrome或Chromium

通过Puppeteer,用户可以:

  • 生成页面的截屏和PDF

  • 抓取SPA(单页面应用程序)并生成预渲染内容(即“SSR”服务器端渲染)

  • 自动化表单提交,UI测试,键盘输入等等

  • 创建最新的自动化测试环境,使用最新的JavaScript和浏览器功能直接在最新版本的Chrome中运行测试

  • 捕获网站的时间线跟踪,用于帮助诊断性能问题

  • 测试Chrome扩展程序

 作为一位过来人也是希望大家少走一些弯路,希望能对你带来帮助。(WEB自动化测试、app自动化测试、接口自动化测试、持续集成、自动化测试开发、大厂面试真题、简历模板等等),相信能使你更好的进步!

 留【自动化测试】即可【自动化测试交流】:574737577(备注ccc)icon-default.png?t=N5K3http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=pDT8nLpWvOrLUSQ-i3IcDot7xS6NZxse&authKey=h0VjM1VXghu6FK9i7hd7QLWkQ9tHpvG5IGJTul3SmVQq1g%2F4ZezdQEc4tHcIH%2FqM&noverify=0&group_code=574737577

 

 

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

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

相关文章

个人自我评价格式范文五篇

★个人自我评价1 工作已经进行两周多了,突然发现自己似乎又重蹈覆辙了,再一次一次的不经意中和某些人的就距离却是越来越来大,总是想偷一下懒,总是想着马马虎虎过去算了,没有那么精打细算过。结果不经意有些人人开始脱…

android的项目下的res文件夹下的部分文件夹介绍

1.看图 drawable文件夹下的图片是不压缩的图片 drawable-xhdpi文件夹下的图片是适合指定分辨率的图片 mipmap-xxhdpi文件夹下的图片是小型设备分辨率的图片

基于物联网、云计算建设的智慧校园云平台源码

电子班牌作为班级文化展示交流的窗口,可以让更多的人看到校园信息建设与班级风格相结合,及时传递校园信息。学生也可以通过电子班牌看到学校近期重要事件的发布,也可以参与回复,让学生及时掌握校园和班级动态。同时,还…

版本管理可视化工具GitKraKe安装

资源下载地址 https://download.csdn.net/download/u012796085/87953404 1 解压后安装GitKrakenSetup-7.5.5.exe 2 命令窗口进入GitKraken存放目录,分别执行以下语句 git clone https://gitee.com/pan13640612207/GitKraken.git cd GitKraken/ yarn install yarn…

STM32使用STM32CUBEMX配置FreeRTOS+SDIO4bit+FATFS注意事项

一、使用STM32CUBEMX配置FreeRTOSSDIO4bitFATFS注意事项: 以STM32F429为例: 1、SDIO配置 配置为4bit模式,此配置不是最终配置,后面会在代码进行修改。 2、Fatfs配置 Set Defines 选项中的配置可以默认,最重要注意Ad…

git配置和git合并

git配置: 首先下载安装git:https://git-scm.com/downloads/ 一路默认,安装完成后,打开文件夹C:\Users\Administrator\.ssh(Administrator是当前用户名),在空白处点鼠标右键选择“Git Bush Her…

资源分享开发系统

资源分享系统-开放 提示:开源是学习的来源,分享是进步的体现 近期,使用springboot结合layui写了一个技术管理系统,其实最主要是做一些资源的分享,可便捷生活和学习,包括免费听音乐的网站,免费…

和鲸助力中国大学生计算机设计大赛国赛作品评审标准落实研讨会召开,专家平台首发布

6月16日至19日,中国大学生计算机设计大赛国赛作品评审标准落实研讨会(第一期)在天津召开,本次会议由中国大学生计算机设计大赛组委会主办,南开大学承办,和鲸社区参与协办。 会议由中国人民大学杜小勇教授、…

GPIO模拟时序控制外设1——WS2812B

文章目录 前言WS2812B1.模块简介2.时序介绍3.硬件介绍4.传输速率,以及帧数要求 代码1.初始化2.模拟时序1.复位函数2.发送0、1码3.封装发送函数 总结 前言 上一篇文章中介绍了整个板子的最基本功能模块——使用GPIO的通用输入输出实现简单的按键输入以及推挽输出控制…

【若依分离版操作方法日志与其它业务数据(如入库操作)关联的实现】

若依框架业务表和操作日志表关联 需求:分析:思路:实现: 需求: 基于若依分离版框架业务数据与操作日志的数据做个关联 入库表 /*入库业务表 */ CREATE TABLE [BS_In]( [Id] int IDENTITY(1,1)…

【MySQL 主从复制与读写分离】

目录 一、MySQL主从复制1.1、主从复制架构和原理1.2、MySQL的扩展1.2.1、什么是读写分离1. 读写分离的基本原理2. MySQL 读写分离原理 1.2.2、为什么要读写分离1.2.3、什么时候要读写分离1.2.4、主从复制与读写分离1.2.5、mysql支持的复制类型 1.3、复制的共用1.4、复制架构1.5…

2023年下半年北京/上海/深圳NPDP产品经理认证招生

产品经理国际资格认证NPDP是新产品开发方面的认证,集理论、方法与实践为一体的全方位的知识体系,为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会(PDMA)成立于1979年,是…

java学习记录之DBUtils

1 jdbc回顾 1.1 批处理  Statement 执行多条sql addBatch(sql) clearBatch() int[] executeBatch()  PreparedStatement 执行一条sql语句,多组参数 addBatch() 执行之前必须设置实际参数 psmt.setXxxx() clearBatch() executeBatch() 1.2 事务  事务&…

SpringBoot 整合redis + Aop防止重复提交 (简易)

1.redis的安装 redis下载 解压 安装 # wget http://download.redis.io/releases/redis-6.0.8.tar.gz # tar xzf redis-6.0.8.tar.gz # cd redis-6.0.8 # make 看一下就会有 进入redis-6.0.8下的src目录 [rootVM-16-8-centos redis]# cd redis-6.0.8 [rootVM-16-8-centos re…

【Java】Java 中的引用类型

本文仅供学习参考! Java是一种类型化语言,这本质上意味着声明的每个变量都有与之关联的特定类型。此类型确定它可以存储的值。例如,整数类型可以存储非小数。也称为数据类型,这可以大致分为两类:基元和引用。基元类型是…

华为云GaussDB,能否成为数据库国产化替代的“更优选择”?

没有一个行业比数据库更需要长期主义,而在践行长期主义的道路上,国内数据库厂商中华为是不可忽视的存在。 近日,Gartner Peer Insights《Voice of the Customer for Cloud Database Management Systems,2023》报告发布&#xff0…

使用python unittest从零构建web应用的自动化测试用例

文章目录 必要性使用pycharm搭建unittest框架selenium下载web driverweb driver的基本使用driver 定位元素driver使用事件处理下拉框处理复选框 sshftp数据库sqlserveroracle安装使用 mongodb excelpycurl 必要性 大部分团队起始对于要不要投入资源进行UI自动化测试的开发都是…

泰裤辣!Corona 10强势来袭,蓝海创意云同步更新支持

2023年6月22日,Chaos Corona官网发布了Chaos Corona 10 for 3ds Max and Cinema 4D版本。本次不仅更新了新功能,还优化了渲染卡顿的问题,一起来看看有哪些实用的好玩意吧! 1.贴花影响特定通道 CR10在你的场景中焕然一新&#xff…

Git报错: Please move or remove them before you switch branches.

Bug记录:在我写需求的时候,产品说上个包有崩溃,于是我就控制台 git checkout切分支,结果报错Please move or remove them before you switch branches.下面是被改动的文件,因为是项目build的时候产生的临时文件&#x…

在虚幻引擎中创建大气的HIMIL电影作品

今天瑞云渲染小编给大家带来了关于电影制片人Tiziano Fioriti展示了《H I M I L》项目背后的工作流程,解释了人工智能是如何用于细节的,并谈到了设置火光的问题。 介绍 大家好,我叫Tiziano Fioriti,是来自意大利的自由电影制作人…