前言
在前端开发中,自动化测试框架是必不可少的。Cypress 是一款被广泛使用的高效自动化测试框架,它以简洁的语法和易于理解的 UI 测试工具而著称。Cypress 将自动化测试变得更加容易,快速和稳定,因此,它不仅是前端测试的关键工具,也是 Web 应用程序的高质量保证。
本篇文章将详细介绍 Cypress 自动化测试框架,并提供实战教程,让读者能够了解 Cypress 的核心功能,如何正确地编写测试用例,以及如何集成 Cypress 到项目中。
什么是 Cypress
Cypress 是一款自动化测试框架,可以用于测试前端 Web 应用程序。它不需要借助其他程序或浏览器扩展等工具,当你安装 Cypress 后,你就可以开箱即用。Cypress 提供的是一个捕获浏览器中发生的事件,并且可以进行断言的运行环境。
除此之外,Cypress 还拥有许多其他功能,例如:
- 支持 JavaScript 和 TypeScript 编写测试脚本,能够直接在浏览器运行测试
- 快速的测试启动和分组,使用了头等公民模式,可以快速定位和解决测试问题
- 测试脚本和浏览器是直接交互的,可以更方便地进行断言和调试
- 报错信息友好清晰,不需要繁琐的错误调试信息
Cypress 的安装与配置
Cypress 的安装非常方便,只需要通过 npm 安装即可:
$ npm install cypress --save-dev
安装完成后,你可以在你的项目目录里看到 node_modules/cypress
目录,其中包含了 Cypress 的相关文件。
接着,我们需要在项目的 package.json
文件中添加一些命令:
"scripts": { "cypress": "cypress open" },
现在,我们就可以使用以下命令来启动 Cypress:
$ npm run cypress
这个命令将启动 Cypress 的 UI 界面,你可以在这个界面中执行测试用例和获得测试报告。
Cypress 测试用例
Cypress 虽然很容易入门,但如果你想充分利用它的功能,还需要进行深入的学习。首先,需要了解如何正确地编写测试用例。
创建测试脚本
Cypress 测试用例是通过编写 JavaScript 脚本来实现的。首先,我们需要创建 cypress/integration/
目录。在该目录下创建一个新的脚本文件,例如 example.spec.js
,这个文件就是我们的测试脚本。
describe('搜索', () => { it('可以进行搜索', () => { cy.visit('http://localhost:3000') cy.get('#input-search').type('cypress') cy.get('#button-search').click() cy.get('#search-result').contains('cypress').should('be.visible') }) })
在这个测试脚本中,我们首先通过 cy.visit()
命令访问我们需要测试的 Web 应用程序;接着,我们获取了输入框、搜索按钮和搜索结果等 DOM 元素,并且依次对它们进行输入、点击和查找等操作;最后,使用 should()
函数对期望结果进行断言,这个案例里即是判断 search-result
中是否包含字符串 cypress
。
运行测试用例
创建好测试用例后,我们需要使用 Cypress 进行运行。我们可以通过以下命令运行测试用例:
$ npm run cypress:run
这将会在命令行界面运行 Cypress,Cypress 将会自动地运行所有测试用例,并显示它们的运行结果。
除此之外,我们还可以使用图形界面来运行 Cypress。我们可以在 package.json
文件中添加以下命令:
"scripts": { "cypress": "cypress open" },
在项目根目录下运行以下命令即可开启 Cypress 图形界面:
$ npm run cypress
Cypress 的高级用法
Cypress 同时支持 UI 和 API 测试。Cypress 的 API 定义了一些可以捕获和模拟浏览器行为的命令,每个命令都作为 Cypress 对象的一个方法,可以与其他 Cypress 命令组合使用。
下面是 Cypress 的一些高级用法:
观察响应状态代码
你可以通过 Cypress 从网络响应获取状态码,以检查异步请求的返回结果。例如,如果你已经向服务器发出 AJAX 请求,你需要检查请求是否正常运行,并收到了正确的 HTTP 响应。
-- -------------------- ---- ------- ----------------- ---- ------- -------- -- - ------ ---- ---- ---- -------- -- - ------------ ------- ------- ---- ---------------------------------- ----- - -------- ----------- ---------- ---- - ------------------ -- - ---------------------------------- -- -- --展开代码
其中,request()
函数可以向网站地址发送 HTTP 请求并接收响应。上述代码中向服务器发送了一个 POST 请求,请求网站的一个 REST API, body 的内容是一个新笔记的基本信息。
由于请求是异步的,因此我们需要在请求完成之后使用 .then()
方法来获取响应结果并断言状态码是否为 201。
监听网络请求
Cypress 还提供了一个 intercept()
方法,可以让你在代码中拦截并处理每个发出的请求,以确保请求正确。例如:
-- -------------------- ---- ------- ----------------- ---- ------- -------- -- - ------ ---- ---- -------- -- - -------------------- --------------------------- --------------------------------- --------------------------- ----------------------------------------- ---------------------------------- ------------------------- --------------------------------------- -- - -------------------------------------------------------- --------------------------------------------------------------- --------------------------------------------------- -- -- --展开代码
在上面的测试用例中,通过 intercept()
函数,我们拦截了请求 POST /api/notes
。通过 wait()
函数监听请求,以确保他已经成功完成。可以断言请求参数、响应状态码等信息。
定制失败错误
Cypress 会在测试用例失败时输出默认信息给用户,以便他们尽快快速定位问题。但是,这个信息有时候可能不完美,不足以描述真正的问题。
你可以自定义你的日志输出,以便更好的描述失败信息,例如:
-- -------------------- ---- ------- --------------------- -- -- - ------------- -- - ------------------ ----------- ---------- ------- ------- ---- ------------- --------- --- ------- --- ------------------ -- ------------------- -- -- - ------------------------------------------ ----------------------------------------------- ------------------------- --------------------- ---------------------- --------------------- --------------- ----------- -- --展开代码
模拟用户行为
通过 Cypress,你可以速写并且无需毫无障碍地输入内容,例如:
-- -------------------- ---- ------- -------------- -- -- - ------------ -- -- - --------------------------------- --------------------------------------- -------------------------------- ------------- ----------------------------------------------------------------- -- --展开代码
上述用例中,我们通过 get()
命令获取搜索框和按钮,并分别进行了操作。
自动化测试与持续集成
当你的团队或公司在快速开发演进时,我们无法仅仅依靠手动测试来确保你的产品的稳定。这时,你需要使用自动化测试工具来确保产品的每个版本都是稳定可靠的。
当你把自动化测试工具与 CI/CD 构建管道相结合时,你的团队可以轻松地构建,测试,交付和部署 Web 应用。这时,你可以使用 Cypress 进行持续集成测试。
以下是 Cypress 针对 CI/CD 的集成步骤:
- 建立 CI/CD 流程
- 在 CI/CD 流程中添加 Cypress 的脚本命令
- 集成和执行 Cypress 测试
以下为一个使用 Travis 作为 CI/CD 的例子:
-- -------------------- ---- ------- --------- ------- -------- - --------- ------ ------------ - -------------- --------- - ------- -------------- - --- ------- - --- --- ----- ------- - --- --- ------- -------------- - --- --- -------- ---- ------- - -----------展开代码
结语
Cypress 是一个强大的自动化测试工具,可以在开发过程中减少反复测试时浪费的时间和精力。在本文中,我们学习了 Cypress 的基础知识,并提供了几个高级用法,使你能够更好地使用 Cypress 进行测试。我们也讲解了如何将 Cypress 集成到持续集成流程中,以确保产品的质量稳定性。在实战中使用 Cypress,可以大大提高测试效率并节约时间。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67bf4b3c0c976d473a3d58a1