Cypress安装与使用教程(4)—— 软测大玩家

在这里插入图片描述

 
 

在这里插入图片描述
😏作者简介:博主是一位测试管理者,同时也是一名对外企业兼职讲师。
📡主页地址:【Austin_zhai】
🙆目的与景愿:旨在于能帮助更多的测试行业人员提升软硬技能,分享行业相关最新信息。
💎声明:博主日常工作较为繁忙,文章会不定期更新,各类行业或职场问题欢迎大家私信,有空必回。

在这里插入图片描述

 
 

阅读目录

  • 1. 接上回
  • 2. Cypress插件
    • 2.1 插件安装
    • 2.2 实用插件推荐
  • 3. 后话

1. 接上回

在这里插入图片描述
  上一篇我们介绍了Cypress中的自定义命令和一些高频场景下的对应使用技巧。当然,除了自定义命令外,为了应对日常的各类测试业务场景,我们仍旧需要其他的手段来灵活组合使用。今天就继续带着大家来看看Cypress还有什么其他的对应用法。

 
 

2. Cypress插件

在这里插入图片描述
  除了Cypress自带的功能方法外,我们还可以利用它的另一个强大功能 —— 插件。这可以说是一个让使用者通向另一个新世界的大门。有了插件系统,我们就可以将Cypress的功能进一步进行扩展,来额外为Cypress添加全新的功能以适应更多的各类测试场景。在众多插件中存在着相当多的优秀功能插件,比如自动重试、模拟真实事件、截图甚至于一些非功能性的测试插件。

 

2.1 插件安装

  要使用Cypress插件,我们就必须先将插件系统安装上,在安装了Cypress的前提下,具体参看《Cypress安装与使用教程(1)—— 软测大玩家》。

  检查你的Cypress项目目录下是否有plugins文件夹,没有的话可以手动创建一个。在plugins文件夹下创建一个名为index.js的文件,这个文件是之后用来保存和配置Cypress插件的。

  然后我们打开cmd,在终端中输入以下命令,来安装对应的插件,这里的name是你需要安装的具体插件名。

npm install cypress-plugin-name --save-dev

  安装完成之后我们回到plugins/index.js文件中,在文件中配置并引入插件,同样的插件名name要改成你具体安装的插件名,格式如下:

// plugins/index.js
module.exports = (on, config) => {require('cypress-plugin-name/lib/plugin')(on);
};

2.2 实用插件推荐

  cypress-plugin-retries是可以让测试用例在失败的时候进行自动重试的插件,一般在一些运行稳定性较差的测试场景中会普遍用到。

  安装

npm install cypress-plugin-retries --save-dev

  配置插件

module.exports = (on, config) => {require('cypress-plugin-retries/lib/plugin')(on);
};

  这里我们举一个简单的例子,假设我们有一个网络请求的测试用例,有时由于网络波动或服务器问题,请求可能会出现失败的场景。这里就需要使用cypress-plugin-retries来提高测试用例执行的稳定性。

describe('Network Requests', () => {it('should retry on network failure', { retries: 2 }, () => {cy.intercept('GET', '/api/data', { forceNetworkError: true });cy.visit('/');cy.get('.data-display').should('contain.text', 'Success');});
});

  通过上面的这个例子,由于我们使用了cy.intercept拦截了一个GET请求,并强制让它返回网络错误。这样我们的测试用例就会强制错误,而测试用例中使用了 { retries: 2 } 来指定在测试失败时重试的次数为2次。这意味着如果请求失败,Cypress 将会再次尝试运行该测试用例,最多重试2次。所以一旦使用了cypress-plugin-retries这个插件,即使请求由于网络问题失败,测试用例也有机会在重试时成功。简单来说就是提高了测试的鲁棒性,特别是一些需要频繁在网络敏感的测试场景中进行测试的任务。另外需要注意的是,重试的次数也是有一定的讲究的,不可设置的过高,万一功能有一些难以复现的问题出现,就会因为设置了过高的重试次数而导致用例通过,从而隐藏了真正的问题。

 

  cypress-real-events这个插件允许Cypress去模拟一些真实的浏览器事件,比如模拟用户的输入文字的过程、鼠标事件、获取焦点与失焦等,让一些测试用例提供了更为高级和复杂的UI交互事件。

  安装

npm install cypress-real-events --save-dev

  配置

import 'cypress-real-events/support';

  同样的在我们的测试场景中,比如有一个输入框,用户在输入框中输入文字后,页面会显示相应的提示。如果使用了cypress-real-events插件,我们就可以模拟用户输入文字的过程,已验证提示是否正确。

describe('Input Interaction', () => {it('should show suggestions as user types', () => {cy.visit('/');// 模拟用户输入文字cy.get('#search-input').realType('Cypress');// 验证提示框是否正确显示cy.get('.suggestions').should('contain.text', 'Cypress Testing Framework');});
});

  在上面的例子中,我们使用了realType方法来模拟用户在输入框中输入文字的过程。这比普通的type方法更为真实,能够触发更多与输入相关的事件,从而更全面地测试输入框的交互行为。

 

  cypress-image-snapshot用来进行测试中页面图像快照测试,可以比较页面截图,验证页面的外观是否符合预期。

  安装

npm install cypress-image-snapshot --save-dev

  配置

import 'cypress-image-snapshot/command';

  我们考虑一个场景,假设我们有一个页面,包含了一个动态生成的图表,我们希望能够在每次测试运行时截取图表的截图,并与之前保存的预期截图进行比较,以验证图表的外观是否保持一致。

describe('Chart Snapshot Test', () => {it('should match the snapshot', () => {cy.visit('/');// 等待图表加载cy.wait(2000);cy.screenshot('chart-snapshot', { capture: 'viewport' });cy.compareSnapshot('chart-snapshot');});
});

  上面的这个例子中,我们使用了cy.screenshot来捕捉当前视口的截图,然后使用cy.compareSnapshot来与之前保存的预期截图进行比较。如果比较失败,那么测试结果也将会变为失败,来告知页面的外观不符合预期结果。

 

  一些注重用户体验的产品与项目中测试团队经常会进行可访问性测试,而cypress-axe则是我们做此类测试中经常会用到的一个插件。

  安装

npm install cypress-axe --save-dev

  配置

import 'cypress-axe';

  比如我们需要对一个登录表单的页面进行对应的可访问性测试,作为测试来说就需要确保该表单在可访问性方面符合标准。而接下来我们会用cy.checkA11y()来触发可访问性检查,当然实际场景不会是如此的简单,如果只需要检查页面中的某一个区域就只要将对应的指向具体的某个组件即可,比如我需要检查这个登录表单的可访问性,就只需要cy.get(‘form’).checkA11y()这样写即可。

describe('Accessibility Test', () => {it('should pass accessibility checks for login form', () => {// 访问包含登录表单的页面cy.visit('/login');// 触发 cypress-axe 插件进行可访问性检查cy.checkA11y();// 或者只检查页面的一部分,比如登录表单区域cy.get('form').checkA11y();// 可以传入一些配置参数,比如忽略某些规则cy.checkA11y({runOnly: {type: 'tag',values: ['wcag2a', 'wcag2aa'],},});});
});

 
 

3. 后话

在这里插入图片描述
  以上就是一些实用的Cypress插件的具体使用方法与场景,那么在我们使用的过程中也需要同时注意一些特殊的情况,一个就是插件与Cypress的版本兼容性,我们需要确保所使用的 Cypress 插件与 Cypress 测试框架的版本兼容。有些插件可能对特定版本的 Cypress 有依赖,所以在使用之前在官网查看对应的版本需求是一个不容忽视的点;另外一般的插件在测试调试或执行的过程中出现报错都可以通过对应的Cypress自身日志来进行问题的调查与定位。

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

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

相关文章

Java实现农村物流配送系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统登录、注册界面2.2 系统功能2.2.1 快递信息管理:2.2.2 位置信息管理:2.2.3 配送人员分配:2.2.4 路线规划:2.2.5 个人中心:2.2.6 退换快递处理:…

Java调用openai微调Fine-tuning实战示例

注: 建议先看微调文档, 遵从官网给出的规则。例如: jsonl训练文件至少有10个例子, 否则报错 官网微调文档https://platform.openai.com/docs/guides/fine-tuning官网微调APIhttps://platform.openai.com/docs/api-reference/fine-tuning 1. 实现步骤 1. 准备好jsonl数据集2…

当前vscode环境下 多进程多线程运行情况探究

我的代码 其中在“打开图片时”、“进入子进程之前”、“子进程join前”、“进入子进程区域后”,“子进程join后”、“进入子线程区域后”分别打印了进程线程的编号和数量。 # -*- coding: utf-8 -*-# Form implementation generated from reading ui file test2.…

好书推荐丨AI时代Python量化交易实战:ChatGPT让量化交易插上翅膀(北大社)

文章目录 写在前面关键点内容简介作者简介推荐理由粉丝福利写在后面 写在前面 本期博主给大家推荐一本Python量化交易实战类书籍: ChatGPT让量化交易师率飞起来! 金融量化交易新模式一本专注于帮助交易师在AI时代实现晋级、提高效率的图书书中介绍了如…

【Rust日报】2024-01-12 将 Rust 引入 Git 项目

将 Rust 引入 Git 项目 去年年底的假期里,Taylor Blau 花了一些时间思考如何将 Rust 引入 Git 项目。 将 Rust 引入 Linux 内核的重要工作正在进行中。在他们既定的目标中,他认为有一些可能与 Git 项目相关: 由于语言的安全保证,内…

ssm基于vue的儿童教育网站的设计与实现论文

摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理,然而,随着近些年信息技术的迅猛发展,让许多比较老套的信息管理模式进行了更新迭代,视频信息因为其管理内容繁杂,管理数量繁多导致手工进行处理不能满足广大…

开启C++之旅(上):探索命名空间与函数特性(缺省参数和函数重载)

之前浅显的讲解了数据结构的部分内容:数据结构专栏 那么今天我们迎来了新的起点:C的探索之旅 文章目录 1.命名空间1.1引入命名冲突1.2命名空间1.2.1命名空间的定义1.2.2命名空间的使用 2.c的输入与输出3.缺省参数3.1概念3.2缺省参数分类 4.函数重载4.1概…

【计算机二级考试C语言】C变量

C 变量 变量其实只不过是程序可操作的存储区的名称。C 中每个变量都有特定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上。 变量的名称可以由字母、数字和下划线字符组成。它必须以字母或下…

12-桥接模式(Bridge)

意图 将抽象部分与它的实现部分分离,使他们可以独立地变化 个人理解 一句话概括就是只要是在抽象类中聚合了某个接口或者抽象类,就是使用了桥接模式。 抽象类A中聚合了抽象类B(或者接口B),A的子类的方法中在相同的场…

基于elementUI的el-table组件实现按住某一行数据上下滑动选中/选择或取消选中/选择鼠标经过的行

实现代码 <template><div :class"$options.name"><el-tablestyle"user-select: none"ref"table":data"tableData":row-class-name"row_class_name"mousedown.native"mousedownTable"row-click&q…

[力扣 Hot100]Day5 盛最多水的容器

题目描述 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#xff1a;你不能倾斜容…

2、BERT:自然语言处理的变革者

请参考之前写的&#xff1a;2、什么是BERT&#xff1f;-CSDN博客文章浏览阅读826次&#xff0c;点赞19次&#xff0c;收藏22次。BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;是Google在2018年提出的一种自然语言处理&#xff08;NLP&…

linux安装QQ(官方正版)

QQ官网上有支持linux系统的版本&#xff0c;所以去官网直接下载正版就好。 安装步骤&#xff1a; 1.进入官网&#xff1a;https://im.qq.com/linuxqq/index.shtml 2.选择版本&#xff1a;X86版下载dep 如下所示&#xff1a; 3.下载qq安装包&#xff1a; 4.使用命令安装qq s…

Android 事件分发机制详解(下)

2.3 View事件分发机制 从上面 ViewGroup 事件分发机制知道&#xff0c;View事件分发机制从 dispatchTouchEvent() 开始 源码分析 /*** 源码分析&#xff1a;View.dispatchTouchEvent&#xff08;&#xff09;*/public boolean dispatchTouchEvent(MotionEvent event) { if …

国科大-自然语言处理复习

自然语言处理复习 实体关系联合抽取流水线式端到端方法 检索式问答系统流水线方式信息检索&#xff08;IR&#xff09;阶段阅读理解&#xff08;RC&#xff09;阶段基于证据强度的重排基于证据覆盖的重排结合不同类型的聚合 端到端方式Retriever-Reader的联合学习基于预训练的R…

用Scala采集出行平台机票价格信息

年关将至&#xff0c;趁着过年&#xff0c;打算拖家带口的出去游玩一番&#xff0c;目前也没有什么计划&#xff0c;去哪里玩也比较随机。正好年底公司项目都已经完成差不多&#xff0c;利用空余时间&#xff0c;用爬虫爬取各大景点飞机票价格信息&#xff0c;选择景点不错机票…

【XR806开发板试用】单总线协议驱动DHT11温湿度传感器

1.昨天刚收到极速社区寄来的全志XR806开发板&#xff0c;之前用过很多全志的SOC芯片&#xff0c;但是像这种无线芯片还是第一次用。这次打算使用XR806芯片驱动一下DHT11温湿度传感器。 2.代码如下&#xff1a; #include "common/framework/platform_init.h" #inclu…

鸿蒙Harmony--AppStorage--应用全局的UI状态存储详解

无所求必满载而归&#xff0c;当你降低期待&#xff0c;降低欲望&#xff0c;往往会得到比较好的结果&#xff0c;把行动交给现在&#xff0c;用心甘情愿的态度&#xff0c;过随遇而安的生活&#xff0c;无论结果如何&#xff0c;都是一场惊喜的获得! 目录 一&#xff0c;定义 …

文献阅读:Large Language Models as Optimizers

文献阅读&#xff1a;Large Language Models as Optimizers 1. 文章简介2. 方法介绍 1. OPRO框架说明2. Demo验证 1. 线性回归问题2. 旅行推销员问题&#xff08;TSP问题&#xff09; 3. Prompt Optimizer 3. 实验考察 & 结论 1. 实验设置2. 基础实验结果 1. GSM8K2. BBH3.…

多测师肖sir___ui自动化测试po框架讲解版

po框架 一、ui自动化po框架介绍 &#xff08;1&#xff09;PO是Page Object的缩写&#xff08;pom模型&#xff09; &#xff08;2&#xff09;业务流程与页面元素操作分离的模式&#xff0c;可以简单理解为每个页面下面都有一个配置class&#xff0c; 配置class就用来维护页面…