Cypress 如何进行持续集成测试?
随着现代 Web 应用程序的复杂性越来越高,前端自动化测试已经成为不可或缺的一部分。Cypress 是一个流行的前端自动化测试框架,它提供了易于使用的 API 和强大的功能,可以帮助开发人员写出高质量的端到端(E2E)测试用例,但是如何将其集成到我们的持续集成(CI)流程中呢?
本文将指出如何使用简单但强大的工具链将 Cypress 集成到 CI 测试流程中。
第一步:安装 Cypress
在开始之前,必须先安装 Cypress。首先需要安装 Node.js,然后可以使用以下命令安装 Cypress。
npm install cypress --save-dev
第二步:配置 Cypress
为了使 Cypress 在 CI 流程中正常工作,需要对其进行一些配置。在 Cypress 的根目录创建 cypress.json 文件,并添加以下内容:
{ "baseUrl": "http://localhost:3000", "integrationFolder": "cypress/integration", "testFiles": "**/*.spec.js" }
其中:
- baseUrl 是从应用程序中提取出来的基本 URL,用于在测试之前设置所有访问到的 URL。
- integrationFolder 是存放测试用例的文件夹路径。
- testFiles 是定义要运行的测试文件的匹配模式。这里使用 **/*.spec.js,以便找到所有以 .spec.js 结尾的文件。
还可以添加其他选项,例如测试运行前的脚本或覆盖率报告文件的目录等。
第三步:编写测试用例
Cypress 的测试用例是基于 Mocha 和 Chai 构建的。因此,开发人员可以使用这些工具来编写测试用例。测试集例通常包含以下内容:
describe('Example Page', () => { it('loads the page', () => { cy.visit('/'); }); });
这个测试用例访问了网站的根目录。Cypress 还可以模拟用户交互,输入文本等。
第四步:在本地运行测试
在将测试用例推送到 CI 之前,需要在本地运行一下测试,以确保一切都运行良好。
在终端中运行以下命令,使用 Cypress GUI 在本地运行测试:
node_modules/.bin/cypress open
如果您愿意,也可以使用以下命令在命令行中运行测试:
node_modules/.bin/cypress run
第五步:将 Cypress 集成到 CI 流程中
Cypress 可以与各种 CI 工具集成,例如 Travis CI,Circle CI,Jenkins 等。下面以 Travis CI 为例,说明如何将 Cypress 集成到 CI 流程中。
首先,需要将 Travis CI 与 GitHub 帐户集成。然后,可以在项目的根目录中创建一个名为 .travis.yml 的文件,并定义要运行的脚本。以下是一个示例配置文件:
language: node_js node_js: - 8 install: - npm install - npm install cypress script: - npm run cy:run
其中:
- language 定义 Travis CI 运行的语言。
- node_js 指定我们希望使用的 Node.js 版本。
- install 定义需要安装和配置的依赖项。
- script 定义 Travis CI 运行的脚本。
在 script 属性中,我们使用了 npm run cy:run。该命令在 package.json 文件中定义,用于运行 cypress run 脚本。
{ "scripts": { "cy:run": "cypress run" } }
接下来,每次推送到 GitHub 仓库时,Travis CI 都会自动运行测试。
Cypress E2E 测试报错解决方案
Cypress 是一个功能强大的自动化测试框架,但是在实际使用中会出现各种错误。以下是常见的错误以及如何解决它们的示例。
- 错误:cy.visit() 只接受一个字符串参数。
在 Cypress 中访问页面可以使用 cy.visit() 函数。加入此函数出现错误可能是由于函数接受的参数不正确。
错误示例:
cy.visit('http://localhost:8080', { timeout: 60000 });
修复示例:
cy.visit('http://localhost:8080');
- 错误:timed out waiting for the element to have a non-empty 'value' property
这个错误通常是由于在获得数据之前,应用程序还没有完成加载所致。
错误示例:
cy.get('#username').type('test').should('have.value', 'test');
修复示例:
cy.get('#username', {timeout: 60000}).type('test').should('have.value', 'test');
- 错误:cy.get() 尝试在在挂起的元素上继续链的错误
这个错误通常是由于页面在 Cypress 操作期间重新加载导致的。
错误示例:
cy.get('button').click().get('input').type('test');
修复示例:
cy.get('button').click().wait(5000).get('input').type('test');
此代码等待 5 秒,以保证页面加载完全,然后再使用 cy.get() 函数选择输入框。
结论
这篇文章向您介绍了如何配置 Cypress 并将其集成到 CI 流程中,以及如何解决常见的 Cypress E2E 测试错误。对于那些希望提高前端自动化测试质量的人,Cypress 是一个必不可少的框架。希望这篇文章能够为您提供有帮助的指导!
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/673420450bc820c58246bb88