前端Cypress自动化测试全网详解

news2024/11/14 11:58:12

Cypress 自动化测试详解:从安装到实战

Cypress 是一个强大的端到端(End-to-End, E2E)功能测试框架,基于 Node.js
构建,支持本地浏览器直接模拟测试,并具有测试录屏功能,极大地方便了测试失败时的场景重现与问题定位。本文将详细介绍 Cypress
的安装、配置以及一个实际的自动化测试示例。

在这里插入图片描述

一、安装 Cypress

  1. 安装 Node.js

首先,你需要安装 Node.js。Node.js
的安装包可以从其官方网站(https://nodejs.org/en/download/)下载。下载完成后,按照提示进行安装。

安装完成后,打开命令行工具(cmd 或 PowerShell),输入以下命令以确认安装成功:

sh
node -v
npm -v
  1. 安装 Cypress

接下来,我们需要安装 Cypress。首先,在你的工作目录中创建一个新的文件夹

例如 Ui_test,然后使用 cd 命令进入该文件夹。
sh
mkdir Ui_test
cd Ui_test
执行以下命令以安装 Cypress:
sh
npm init -y
npm install cypress --save-dev

这将创建一个 package.json 文件并安装 Cypress 及其依赖。

  1. 配置 Cypress

在项目根目录下,创建一个 package.json 文件(如果 npm init 没有自动生成),并添加以下配置,以便可以通过 npm
命令启动 Cypress:

json
{
  "scripts": {
    "cypress:open": "cypress open"
  }
}

二、启动 Cypress

现在,你可以通过以下命令启动 Cypress:

sh
npm run cypress:open

或者,如果你已经全局安装了 Cypress,可以直接使用:

sh
npx cypress open

Cypress 启动后,你将看到一个图形化的界面,其中包含了所有测试用例的列表。

三、编写测试用例

Cypress 的测试用例通常写在 cypress/integration 目录下。在该目录下,你可以创建多个文件夹和 .js
文件来组织你的测试用例。

以下是一个简单的登录测试用例示例:

  • 在 cypress/integration 目录下创建一个新的文件夹,例如 demo。
  • 在 demo 文件夹中创建一个新的文件,例如 login.js。
  • 在 login.js 文件中,编写以下测试代码:
js
describe('Login Test', function() {
  beforeEach(function() {
    // 在每个测试用例之前执行的代码
    cy.visit('http://your-test-url.com/login'); // 替换为你的登录页面 URL
  });
 
  it('Should login successfully', function() {
    // 定位用户名输入框并输入用户名
    cy.get('#username').type('your-username'); // 替换为你的用户名
    
    // 定位密码输入框并输入密码
    cy.get('#password').type('your-password'); // 替换为你的密码
    
    // 点击登录按钮
    cy.get('#login-button').click();
    
    // 断言登录成功后跳转的页面包含某个特定元素或文本
    cy.url().should('include', '/dashboard'); // 替换为登录成功后应该跳转的 URL 路径
  });
});

四、运行测试用例

回到 Cypress 的图形化界面,你将看到刚才创建的 login.js 测试用例。点击它,然后点击界面右上角的 “Run” 按钮来运行测试用例。

你也可以通过命令行来运行测试用例:

sh
npx cypress run --spec "cypress/integration/demo/login.js"

这将运行指定的测试用例并生成测试报告。

五、生成测试报告

Cypress 支持多种测试报告生成器,例如 Mocha Awesome。要生成 Mocha Awesome 报告,你需要安装以下依赖:

sh
npm install --save-dev mocha mochawesome mochawesome-merge mochawesome-report-generator

然后,在 cypress.json 文件中添加以下配置:

json
{
  "env": {
    "search": "Cypress e2e"
  },
  "reporter": "mochawesome",
  "reporterOptions": {
    "reportDir": "cypress/results",
    "overwrite": false,
    "html": true,
    "json": true
  }
}

再次运行测试用例时,Cypress 将在 cypress/results 目录下生成 HTML 和 JSON 格式的测试报告。

文件夹目录的详解

在Cypress测试框架中,fixtures、integration、plugins、support以及cypress.json是构成其项目结构的核心目录和文件。以下是对这些目录和文件的详细讲解:

1. fixtures
  • 作用:主要用于存储测试用例的外部静态数据。
  • 使用:通常与cy.fixture()命令配合使用,以加载和引用这些静态数据。
  • 文件类型:一般为.json后缀的文件,用于存储如HTTP状态码和返回值等静态数据。
  • 优点:
    可以模拟接口返回值,避免实际调用接口,从而提高测试速度。
    消除了对外部功能模块的依赖,使测试用例更加稳定可靠。
2. integration
  • 作用:存放集成测试用例。
  • 文件类型:支持多种文件格式,包括.js(普通JavaScript文件)、.jsx(带有扩展的JavaScript文件,可包含处理XML的ECMAScript)、.coffee(JavaScript的转译语言,拥有更严格的语法)以及.cjsx(CoffeeScript中的jsx文件)。
  • 特点:所有位于integration目录下的符合上述文件类型的文件,都将被Cypress识别为测试文件。
3. plugins
  • 作用:存放自定义插件或Cypress提供的现成插件。
  • 功能:允许修改或扩展Cypress的内部行为,如动态修改配置信息和环境变量等。
  • 默认文件:默认情况下,插件位于cypress/plugins/index.js中,但也可以配置到另一个目录。
  • 加载:每个测试文件运行之前,Cypress都会自动加载插件文件。
4. support
  • 作用:存放辅助文件,如命令、配置等。
  • 默认文件:默认情况下,支持文件位于cypress/support/index.js中,但也可以配置到另一个目录。
  • 功能:
    可以在其中配置一些辅助函数和命令,以便在测试用例中重复使用。
    通过导入命令文件,可以在测试用例中直接使用定义的命令。
5. cypress.json
  • 作用:Cypress的配置文件,用于定义Cypress项目的配置选项。
    配置选项:
  • baseUrl:用作cy.visit()或cy.request()命令的前缀URL。
  • chromeWebSecurity:是否启用Chrome的安全策略。
  • retries:测试用例的重试次数。
  • env:设置任意环境变量。

案例地址和官网地址

大家可以自己去下载 因为通过命令去下载可能不会生成integration文件 好像是因为最新版本的缘故

案例地址:https://github.com/TheBrainFamily/cypress-cucumber-example
官网地址:https://www.cypress.io/

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

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

相关文章

Qt_day4_Qt_UI设计

目录 Qt_UI设计 1. Designer 设计师(掌握) 2. Layout 布局(重点) 2.1 基本使用 2.2 高级用法 2.3 代码布局(了解) 3. Designer与C的关系(熟悉) 4. 基本组件(掌握…

杨中科 .Net Core 笔记 DI 依赖注入2

ServiceCollection services new ServiceCollection();//定义一个承放服务的集合 services.AddScoped<iGetRole, GetRole>();using (ServiceProvider serviceProvider services.BuildServiceProvider()) {var list serviceProvider.GetServices(typeof(iGetRole));//获…

机器学习—Additional Layer Types

到目前为止&#xff0c;我们使用的所有神经网络都是密集型的&#xff0c;一层中的每个神经元&#xff0c;上一层的所有激活&#xff0c;事实证明&#xff0c;仅仅使用密集层类型&#xff0c;可以建立一些非常强大的学习算法&#xff0c;并帮助你建立关于神经网络能做什么的进一…

力扣 LeetCode 206. 反转链表(Day2:链表)

解题思路&#xff1a; pre &#xff0c;cur双指针 需要通过tmp暂存cur的下一个位置&#xff0c;以方便cur的下一步移动 class Solution {public ListNode reverseList(ListNode head) {ListNode pre null;ListNode cur head;while (cur ! null) {ListNode tmp cur.next;c…

硬件---4电感---基本概念与特性

一电感是什么 1电感的概念 电感就是一根导线加一个磁性原料。生活中&#xff0c;所有由线圈组成的器件都是电感。 如下图&#xff0c;常见的电感封装&#xff0c;有裸露的也有贴片的。 二电感的基本特性 1流过电感的电流不能发生突变 注意和电容的区别&#xff0c;一个是…

【软件工程】深入理解一下SOA(面向服务的架构)

关于SOA的一些看法 概述SOA的核心特性包括&#xff1a;一、服务自治与独立性二、松耦合与标准化三、服务重用与粒度四、服务可发现与安全 五、其他核心原则SOA的应用领域非常广泛&#xff0c;包括&#xff1a;SOA的一些挑战包括&#xff1a; &#x1f680; SOA在云计算中的应用…

【论文复现】ChatGPT多模态命名实体识别

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀ChatGPT ChatGPT辅助细化知识增强&#xff01;1. 研究背景2. 模型结构和代码3. 任务流程第一阶段&#xff1a;辅助精炼知识启发式生成第二阶段…

隆盛策略正规炒股恒生科技指数跌4.19%,中芯国际跌近8%

查查配分析11月12日,香港恒生指数收跌2.84%,恒生科技指数跌4.19%。中兴通讯跌超9%,中芯国际跌近8%,蔚来跌超6%,美团、京东集团、理想汽车均跌超5%。 11月12日,港股跌幅扩大,恒生科技指数跌超4%,恒生指数跌超3%。 隆盛策略以其专业的服务和较低的管理费用在市场中受到不少关注。…

MFC图形函数学习07——画扇形函数

绘制扇形函数是MFC中绘图的基本函数&#xff0c;它绘制的仍是由椭圆弧与椭圆中心连线构成的椭圆扇形&#xff0c;特例是由圆弧与圆心连线构成的圆扇形。 一、绘制扇形函数 原型&#xff1a;BOOL Pie(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4); …

qt QHttpMultiPart详解

1. 概述 QHttpMultiPart是Qt框架中用于处理HTTP多部分请求的类。它类似于RFC 2046中描述的MIME multipart消息&#xff0c;允许在单个HTTP请求中包含多个数据部分&#xff0c;如文件、文本等。这种多部分请求在上传文件或发送带有附件的邮件等场景中非常有用。QHttpMultiPart类…

SpringBoot使用TraceId日志链路追踪

项目场景&#xff1a; 有时候一个业务调用链场景&#xff0c;很长&#xff0c;调了各种各样的方法&#xff0c;看日志的时候&#xff0c;各个接口的日志穿插&#xff0c;确实让人头大。为了解决这个痛点&#xff0c;就使用了TraceId&#xff0c;根据TraceId关键字进入服务器查询…

SSE (Server-Sent Events) 服务器实时推送详解

Server-Sent Events 一、什么是 SSE ?二、SSE 的工作原理三、SSE 的基本配置1.HTTP 请求和响应头设置2.SSE 字段介绍3.SSE 事件数据流示例 四、SseEmitter 的基本配置1.SseEmitter 介绍及用法2.使用 SseEmitter 示例11)编写核心 SSE Client2)编写 Controller3)前端接收与处理 …

【C++】踏上C++的学习之旅(六):深入“类和对象“世界,掌握编程的黄金法则(一)

文章目录 前言1. "面向过程"和"面向对象"的碰撞1.1 面向过程1.2 面向对象 2. "类"的引入3. "类"的定义3.1 &#x1f349;语法展示&#xff1a;3.2 "类"的两种定义方式3.3 "类"的命名规则 4. 类的访问限定符以及封…

机器学习:梯度提升树(GBDT)——基于决策树的树形模型

梯度提升树&#xff08;Gradient Boosting Decision Trees&#xff0c;GBDT&#xff09;是一种强大的机器学习方法&#xff0c;广泛用于回归和分类任务。它通过构建一系列决策树来优化模型的预测能力&#xff0c;基于梯度提升框架&#xff0c;使得每一棵树都试图纠正前一棵树的…

Spark SQL大数据分析快速上手-伪分布模式安装

【图书介绍】《Spark SQL大数据分析快速上手》-CSDN博客 《Spark SQL大数据分析快速上手》【摘要 书评 试读】- 京东图书 大数据与数据分析_夏天又到了的博客-CSDN博客 Hadoop完全分布式环境搭建步骤-CSDN博客,前置环境安装参看此博文 伪分布模式也是在一台主机上运行&…

github使用基础

要通过终端绑定GitHub账号并进行文件传输&#xff0c;你需要使用Git和SSH密钥来实现安全连接和操作。以下是一个基本流程&#xff1a; 设置GitHub和SSH 检查Git安装 通过终端输入以下命令查看是否安装Git&#xff1a; bash 复制代码 git --version配置Git用户名和邮箱 bash …

Python OpenCV孤立点检测

孤立点检测 在Python中使用OpenCV进行孤立点&#xff08;异常点&#xff09;检测&#xff0c;可以通过应用统计分析或者使用OpenCV的findContours和convexHull函数来识别。以下是一个简单的例子&#xff0c;使用OpenCV的findContours和convexHull来识别并绘制孤立点。 孤立点…

Vue自定义指令详解——以若依框架中封装指令为例分析

自定义指令 在Vue.js中&#xff0c;自定义指令提供了一种非常灵活的方式来扩展Vue的功能。以下是对Vue中自定义指令的详细解释&#xff1a; 一、自定义指令的基本概念 自定义指令允许开发者直接对DOM元素进行低层次操作&#xff0c;而无需编写大量的模板或者JavaScript代码。…

云渲染:服务器机房与物理机房两者有什么区别

云渲染选择服务器机房与物理机房两者主要区别在哪里呢&#xff1f; 服务器机房和物理机房作为云渲染的基础设施&#xff0c;各自扮演着不同的角色。 服务器机房的特点 服务器机房&#xff0c;通常指的是那些专门用于托管服务器的设施&#xff0c;它们可能位于云端&#xff0c…

即插即用篇 | YOLOv8 引入 代理注意力 AgentAttention

Transformer模型中的注意力模块是其核心组成部分。虽然全局注意力机制具有很强的表达能力,但其高昂的计算成本限制了在各种场景中的应用。本文提出了一种新的注意力范式,称为“代理注意力”(Agent Attention),以在计算效率和表示能力之间取得平衡。代理注意力使用四元组(Q…