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

news2024/10/5 2:50:45

在这里插入图片描述

 
 

在这里插入图片描述
😏作者简介:博主是一位测试管理者,同时也是一名对外企业兼职讲师。
📡主页地址:【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.coloradmin.cn/o/1385718.html

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

相关文章

presto/trino 入门介绍实战

引言 Presto是一款分布式SQL查询引擎,它能够在大规模数据集上实现快速、交互式的查询。本文将介绍Presto的基本概念并结合一些实际的代码示例,能够让的大家快速入门并在实际项目中应用。 官网:Launch Presto: Local download, JDBC, Docker…

【深度学习:构建医学图像】如何构建医学图像的 QA 工作流程

【深度学习:构建医学图像】如何构建医学图像的 QA 工作流程 第 1 步:选择并划分数据集第 2 步:准备使用多个盲注进行注释第三步:建立图像标注协议第 4 步:在少数样本上练习医学图像注释第 5 步:发布第一批图…

Nodejs 入门8 NeDB 轻量级的Node.js 数据库

Nodejs 入门8 NeDB 轻量级的Node.js 数据库 一、简介1. 什么是 Nedb?2. 特性和优势1. 轻量级2. 简单的API3. 内存和磁盘存储 二、如何开始使用 Nedb1. 安装 Nedb2. 创建数据库实例(1)简单示例(2) options 参数说明&…

为什么我说小公司也一定要用K8S

Kubernetes是谷歌以Borg为前身,基于谷歌15年生产环境经验开源的一个项目。Kubernetes致力于提供跨主机集群的自动部署、扩展、高可用以及运行应用程序容器的平台,其遵循主从式架构设计,其组件可以分为工作节点(Node)组…

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

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

vivado ip manager cache

https://china.xilinx.com/video/hardware/configuring-managing-reusable-ip-vivado.html “Core Containers”(核容器):勾选Use Core Containers for IP(为 IP 使用核容器)即可使用核容器功能,该功能支持…

Python操作excel-读取、表格填充颜色区分

1.场景分析 遇到一个需要读取本地excel数据,处理后打入到数据库的场景,使用java比较重,python很好的解决了这类问题 2.重难点 本场景遇到的重难点在于: 需要根据表格内的背景颜色对数据进行筛选 读取非默认Sheet 总是出现Value…

YOLOv8改进 | 细节涨点篇 | UNetv2提出的一种SDI多层次特征融合模块(分割高效涨点)

一、本文介绍 本问给大家带来的改进机制是UNetv2提出的一种多层次特征融合模块(SDI)其是一种用于替换Concat操作的模块,SDI模块的主要思想是通过整合编码器生成的层级特征图来增强图像中的语义信息和细节信息。该方法已在多个公开的医学图像分割数据集上进行了验证,包括皮…

全包了 功能超级强大的linux管理平台1panel部署教程

目录 先看下效果 1.1panel是什么 2.安装教程 2.1下载安装包 2.2解压 2.3安装 3.查看 3.1初始化并登录 3.2容器管理页面,可以启动 重启 创建容器 ​编辑 3.3应用商店 意见安装常用应用 ​编辑 3.4可视化任务管理 3.5网站管理 3.6数据库管理 ​编辑 3…

[计算机提升] 管理设备

4.8 管理设备 通过设备管理器可以对设备进行管理,通常的操作包括:禁用设备、启用设备、安装设备和卸载设备。 4.8.1 禁用、启用、卸载设备 1、打开设备管理器,找到要操作的设备,这里以网络适配器(网卡)示例: 2、右…

electron+vue项目使用serialport报错Cannot read property ‘indexOf‘ of undefined解决办法

描述 使用ElectronVue项目时引入serialport串口后启动时报下面错误 Cannot read property indexOf of undefined解决方法 打开vue.config.js找到pluginOptions -> electronBuilder -> externals添加serialport module.exports {pluginOptions: {electronBuilder: {e…

走迷宫(c语言)

前言: 制作一个迷宫游戏是一个有趣的编程挑战。首先,我们需要设计一个二维数组来表示迷宫的布局,其中每个元素代表迷宫中的一个格子。我们可以使用不同的值来表示空格、墙壁和起点/终点。接下来,我们需生成迷宫。在生成迷宫的过程…

MIT_线性代数笔记:第 26 讲 复矩阵;快速傅里叶变换

目录 复向量 Complex vectors复矩阵 Complex matrices傅里叶变换 Fourier transform快速傅里叶变换 Fast Fourier transform 实矩阵也可能有复特征值,因此无法避免在矩阵运算中碰到复数,本讲学习处理复数矩阵和复向量。 最重要的复矩阵是傅里叶矩阵&…

【备战蓝桥杯】——Day1

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-xKn7nmq36s9pgUXR {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

9 - 数据分片概述|部署MyCat服务

数据分片概述|部署MyCat服务|测试配置 数据分片概述分库分表分割方式水平分割(横向切分)垂直分割(纵向切分) 提供分库分表存储服务软件(中间件)MyCAT软件分片服务器的工作过程 部署M…

基于电源完整性的一些PCB设计建议

基于电源完整性的一些PCB设计建议 1. 尽量减少电源和地通路之间的环路电感,在相邻的层上分配电源和接地面时,使用尽可能薄的电介质; 2. 通过在平面之间使用尽可能高的介电常数来获得平面之间的最低阻抗,与尽可能薄的介电常数设计…

基于springboot的流浪动物救助管理系统

🍅点赞收藏关注 → 私信领取本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅一 、设计说明 1.1研究背景 随着…

Netty-初探

引言 最近开始学习网络编程这一块,特此总结 直接内存为什么比堆内内存要快? JVM在发送堆内数据给远程时,首先会把这部分数据复制到堆外的一块内存空间(防止GC过程中文件引用地址发生变化带来的问题),然后…

陪诊小程序开发|陪诊软件定制|陪诊系统成品功能包含哪些?

陪诊小程序是一种便捷的工具,为用户提供一系列服务和功能,方便患者在就医过程中获得更好的体验和效果。接下来我们将介绍几个主要的陪诊小程序功能。 陪诊小程序开发功能: 一、预约挂号功能。陪诊小程序能够连接用户和医疗机构的系统&#x…

扩散模型微调方法/文献综述

🎀个人主页: https://zhangxiaoshu.blog.csdn.net 📢欢迎大家:关注🔍点赞👍评论📝收藏⭐️,如有错误敬请指正! 💕未来很长,值得我们全力奔赴更美好的生活&…