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

目录

前言:

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

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【SpringMVC 学习笔记】

SpringMVC 笔记记录 1. SpringMVC 简介2. 入门案例3. 基本配置3.1 xml形式配置3.2 注解形式配置 4. 请求4.1 请求参数4.1.1 普通类型传参4.1.2 实体类类型传参4.1.3 数组和集合类型传参 4.2 类型转换器4.3 请求映射 5. 响应 1. SpringMVC 简介 三层架构 2. 入门案例 3. 基本…

基于matlab使用深度学习估计身体姿势(附源码)

一、前言 此示例演示如何使用 OpenPose 算法和预训练网络估计一个或多个人的身体姿势。 身体姿势估计的目标是识别图像中人的位置及其身体部位的方向。当场景中存在多个人时,由于遮挡、身体接触和相似身体部位的接近,姿势估计可能会更加困难。 有两种…

Spring概念:容器、Ioc、DI

目录 什么是容器? 什么是 IoC? 传统程序的开发 理解 Spring IoC DI 总结 我们通常所说的 Spring 指的是 Spring Framework(Spring 框架),它是⼀个开源框架,有着活跃⽽庞⼤的社区,这就是它…

Swin Transformer训练报错问题

1. 训练遇到报错问题 (1)mportError: cannot import name _pil_interp from timm.data.transforms 原因: timm.data.transforms里面没有_pil_interp,只有str_to_pil_interp、_str_to_pil_interpolation、_pil_interpolation_to_s…

【Docker】docker安装配置Jenkins

docker 安装 Jenkins #拉镜像 docker pull jenkins/jenkins#创建卷(volume) docker volume create jenkins_home#制作容器并启动 docker run -d \ -p 8080:8080 \ -p 50000:50000 \ -v jenkins_home:/var/jenkins_home \ -v /usr/lib/jvm/java-8-openjdk-amd64:/usr/local/java…

如何将window文件夹挂载到VMware系统mnt目录

背景:项目开发过程中,通常是在Windows上编码,有些框架和软件只能够在Linux上面执行,如果在 VMware中的Linux上面开发不太方便,因此需要在Windows上面开发好再同步到Linux上面运行。 软件: Samba客户端 V…

配置Jenkins的slave agent并使用它完成构建任务

上一章,使用单机配置并运行了一个简单的maven项目,并发布到了一个服务器上启动。这一章将要配置一个slave agent,并将上一章的job放到agent上执行。我们agent使用的是ssh的方式 前置步骤 准备两台虚拟机: 192.168.233.32&#…

svn commit 用法

转载   原文:https://blog.csdn.net/qq_39790633/article/details/103700391 使用svn进行代码的提交有两种方法:一种是通过TortoiseSVN客户端界面进行提交,另一种是通过svn commit指令提交。 方法一:通过TortoiseSVN客户端界面提…

STM32速成笔记—IWDG

文章目录 一、IWDG简介二、STM32的IWDG2.1 STM32的IWDG简介2.2 喂狗2.3 IWDG框图 三、IWDG配置步骤四、IWDG配置程序4.1 IWDG初始化程序4.2 喂狗 五、应用实例 一、IWDG简介 独立看门狗(Independent Watchdog, IWDG),什么是看门狗&#xff1…

NVIDIA-Linux-x86_64-535.54.03.run cuda_12.2.0_535.54.03_linux.run下载地址

Official Drivers | NVIDIA Linux x64 (AMD64/EM64T) Display Driver | 535.54.03 | Linux 64-bit | NVIDIA 下载连接 Download NVIDIA, GeForce, Quadro, and Tesla DriversDownload drivers for NVIDIA graphics cards, video cards, GPU accelerators, and for other GeFor…

魔兽世界私人服务器怎么开

开设魔兽世界的私人服务器涉及到一系列复杂的步骤和技术要求。下面是一个大致的指南,以供参考: 1. 硬件需求:首先,你需要一台强大的服务器来承载游戏服务器。服务器的规模和配置将取决于你计划同时容纳多少玩家以及服务器的性能要…

.vm文件发邮件时js未生效,无法控制显示隐藏

需求起因 最近在做一个发邮件的功能,是后端发邮件,不过邮件内容是由前端来写。 邮件内容包括姓名、手机号、邮箱,这三个参数都是不一定有的,如果没有某个参数时,那一行内容就不显示。 写法没错,但就是js…

Java——抽象类和接口

抽象类 抽象类 使用abstract关键字定义的类称为抽象类 public abstract class Employee {private String name;private int number; }在 Java中抽象类不可以实例化为对象。例如: 抽象方法 使用abstract关键字定义的方法称为抽象方法。抽象方法没有方法体 抽象…

使用影刀RPA拆分excel数据

首先,要使程序有一定的兼容性,即增加互动性,认为选择要拆分的文件和拆分的依据列,可以利用影刀中的‘打开选择对话框’和‘打开输入对话框’来实现,这样一来便不用考虑待拆分excel的路径问题获取1中选择的依据拆分列&a…

CSS实现多头像叠加ui效果

第一种实现方式 简单粗暴直接使用margin-right实现&#xff0c;缺点是第一行右侧最右边头像溢出容器&#xff0c;代码中的三行注释的代码放开后可解决这个问题。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8">&…

【ISO26262】汽车功能安全第一部分:术语

【tommi_wei@163.com】 故障响应时间 fault reaction time 从故障(2.42) 探测到进入安全状态(2.102) 的时间间隔。 故障容错时间间隔 fault tolerant time interval 在危害事件(2.59) 发生前, 系统(2.129) 中一个或多个故障(2.42) 可存在的时间间隔。 功能安全 functio…

如何调用百度地图API

前言 要调用百度地图API&#xff0c;步骤操作如下 注册并创建一个API密钥。您可以在百度地图API控制台上创建您的密钥。选择要使用的API服务。百度地图API提供了多种服务&#xff0c;包括地图展示、路线规划、地点搜索、实时交通等。您可以在百度地图API控制台上查看所有可用…

Uniapp uni-app学习与快速上手

个人开源uni-app开源项目地址&#xff1a;准备中 在线展示项目地址&#xff1a;准备中 什么是uni-app uni&#xff0c;读 you ni&#xff0c;是统一的意思。 Dcloud即数字天堂(北京)网络技术有限公司是W3C成员及HTML5中国产业联盟发起单位&#xff0c;致力于推进HTML5发展构…

亚马逊云科技“专库专用”模式,可有效提高数据库的性能和效率

近日&#xff0c;全球数据库市场发生了一件令人瞩目的事件&#xff0c;根据Gartner的数据&#xff0c;我们发现亚马逊云科技作为一个纯云厂商&#xff0c;夺得了2022年全球数据库领导者的桂冠&#xff0c;占据全球市场的25.3%份额。 云原生数据库的发展方向&#xff1a;与数据分…

Python技术自学的方式

Python是一种高级编程语言&#xff0c;被广泛用于软件开发、数据分析、人工智能和科学计算等领域。它于1991年由Guido van Rossum创建&#xff0c;并且其简洁、易读的语法以及丰富的标准库使得它成为了初学者和专业开发人员的首选语言之一。 一、Python技术介绍 学习Python技术…