目录

  • 初始化项目
    • 准备好 Docker 镜像
    • 安装依赖
      • ESLint 配置
      • IDE 集成
    • 配置
      • 手动配置
    • Gitlab 集成
  • 测试用例
    • 配置环境变量
      • 静态变量
      • 动态变量
      • 使用变量
    • 添加 Commands
    • 添加测试用例
  • 其他

初始化项目

准备好 Docker 镜像

比如:

FROM cypress/browsers:node16.14.0-slim-chrome99-ff97

浏览器镜像参考: cypress-docker-images/browsers at master · cypress-io/cypress-docker-images

安装依赖

yarn add --dev cypress eslint eslint-plugin-cypress

ESLint 配置

参考: GitHub - cypress-io/eslint-plugin-cypress: An ESLint plugin for projects that use Cypress

IDE 集成

参考: IDE Integration | Cypress Documentation

配置

安装好依赖后执行

npx cypress open

运行会初始化配置。

手动配置

参考: Configuration | Cypress Documentation

Gitlab 集成

示例项目: cypress-io / cypress-example-docker-gitlab

测试用例

配置环境变量

静态变量

修改 cypress.json

{"baseUrl": "http://localhost:4100","env": {"apiUrl": "http://localhost:3000","user": {"email": "tester@test.com","password": "password1234","username": "testuser"},"codeCoverage": {"url": "http://localhost:3000/__coverage__"}},"viewportHeight": 1000,"viewportWidth": 1000,"video": true,"projectId": "bh5j1d","nodeVersion": "system"}

动态变量

可以在 plugins/index.js 中注入,如:

// 也可以在这里注入 dotenvmodule.exports = (on, config) => {// `on` is used to hook into various events Cypress emits// `config` is the resolved Cypress config/* eslint-disable no-param-reassign */config.env.authing_username = process.env.AUTHING_USERNAME;config.env.authing_password = process.env.AUTHING_PASSWORD;config.env.authing_userpool_id = process.env.AUTHING_USERPOOL;return config;};

注意一下,需要用根用户池登录,且最好关闭 MFA (没有接口支持)。产品环境用户池 ID 为 59f86b4832eb28071bdd9214

使用变量

// Cpress 是测试脚本中全局注入的const apiUrl = Cypress.env('apiUrl')

添加 Commands

如获取登录 token。登录方式自行封装,这里以邮箱登录为例:

// ***********************************************// This example commands.js shows you how to// create various custom commands and overwrite// existing commands.//// For more comprehensive examples of custom// commands please read more here:// https://on.cypress.io/custom-commands// ***********************************************////// -- This is a parent command --// Cypress.Commands.add('login', (email, password) => { ... })////// -- This is a child command --// Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... })////// -- This is a dual command --// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... })////// -- This will overwrite an existing command --// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... })import JSEncrypt from 'jsencrypt';function encrypt(text, key) {const jsencrypt = new JSEncrypt();jsencrypt.setPublicKey(key); // 设置公钥const encrypted = jsencrypt.encrypt(text);return encrypted;}Cypress.Commands.add('login',(userPoolId = Cypress.env('authing_userpool_id'),email = Cypress.env('authing_username'),password = Cypress.env('authing_password')) => {cy.loginByEmail(userPoolId, email, password).then((token) => {localStorage.setItem('token', token);cy.getCookie('authing_session').should('exist').then((c) => {cy.setCookie('authing_session', c.value);});});});Cypress.Commands.add('loginByEmail',(userPoolId = Cypress.env('authing_userpool_id'),email = Cypress.env('authing_username'),password = Cypress.env('authing_password')) =>cy.getPublicKey().then((publicKey) =>cy.request({method: 'POST',url: '/api/v2/login/login-by-email',headers: {'x-authing-userpool-id': userPoolId},body: {input: {email,password: encrypt(password, publicKey)}}}).its('body.data.token').should('exist')));Cypress.Commands.add('getPublicKey', () =>cy.request({method: 'GET',url: 'https://core.authing.cn/api/v2/.well-known'}).its('body.data.publicKey').should('exist')
);

参考文档:

  • Custom Commands | Cypress Documentation
  • request | Cypress Documentation

添加测试用例

// enables intelligent code completion for Cypress commands// https://on.cypress.io/intelligent-code-completion/// <reference types="Cypress" />context('Console Sample', () => {beforeEach(() => {// https://on.cypress.io/visitcy.login();});it('With Login', () => {cy.visit('/console/61e4da8864ed00680e252e99/application/self-built-apps');cy.get('.app').contains('创建自建应用');});// more examples//// https://github.com/cypress-io/cypress-example-todomvc// https://github.com/cypress-io/cypress-example-kitchensink// https://on.cypress.io/writing-your-first-test});

其他

  • 最佳实践指南: Best Practices | Cypress Documentation
  • API 文档: Table of Contents | Cypress Documentation

Cypress 前端 E2E 测试——手把手入门教程相关推荐

  1. 前端E2E测试略详解(以cypress为例)

    上一篇文章很简略的介绍了E2E测试的一些框架,本文从相对更详细的层面进行整理 E2E测试 (by cypress): cypress安装 npm install cypress --save-dev ...

  2. 【前端实例代码】Html5+css3创建新拟态新拟物风格(Neumorphism)音乐播放器+注册登录页表单图标网页效果~前端开发网页设计基础入门教程~超简单~

    b站视频演示效果: [前端实例代码]Html5+css3创建新拟态新拟物风格(Neumorphism)音乐播放器+注册登录页表单图标网页效果!前端开发网页设计基础入门教程!超简单~ 效果图: 完整代码 ...

  3. 【前端实例代码】Html5+css3+JavaScript创建在线播放架子鼓电子鼓演奏网页效果!前端开发网页设计基础入门教程!超简单~

    b站视频演示效果: [前端实例代码]Html5+css3+JavaScript创建在线播放架子鼓电子鼓演奏网页效果!前端开发网页设计基础入门教程!超简单~ 效果图: 完整代码: <!DOCTYP ...

  4. 【前端实例代码】Html5+css3创建拟物风格昏昏欲睡的云朵动画网页效果~前端开发网页设计基础入门教程~适合初学者~超简单~

    b站视频演示效果: [前端实例代码]Html5+css3创建拟物风格昏昏欲睡的云朵动画网页效果!前端开发网页设计基础入门教程!适合初学者~超简单~ 效果图: 完整代码: <!DOCTYPE ht ...

  5. 要web开发精品教程吗?免费一百期连讲的那种-逐浪CMS前端开发100期入门教程全面开放

    要web开发精品教程吗?免费无广告一百期连讲的那种-逐浪CMS前端开发100期入门教程全面开放 大师主讲 经验难得 由逐浪CMS首席架构师发哥老师,亲自主理讲解. 历时一年精心打造, 汇聚了互联网诞生 ...

  6. ETH智能合约开发手把手入门教程|猿创征文

    文章目录 安装钱包 安装 Metamask.并创建好账号 执行第一次转账 测试币获取 第一次转账 第一个智能合约 使用 Remix 创建第一个合约 使用 Remix 测试第一个合约 使用 Remix ...

  7. 前端E2E测试-环境搭建-Vue+Cypress(1)

    项目背景 脚手架: Vue CLI 3.0 Vue 版本: 2.5.16 环境搭建 安装cypress依赖 npm install cypress --save-dev // 安装包下载比较慢,并常出 ...

  8. 前端框架React Js入门教程【转】

    现在最热门的前端框架有AngularJS.React.Bootstrap等.自从接触了ReactJS,ReactJs的虚拟DOM(Virtual DOM)和组件化的开发深深的吸引了我,下面来跟我一起领 ...

  9. 微信小程序手把手入门教程

    从零到有写一个小程序系列专题,很早以前就想写来分享,但由于项目一直在进展,没有过多的时间研究技术,现在可以继续分享了. 1:注册 用没有注册过微信公众平台的邮箱注册一个微信公众号, 申请帐号 ,网址: ...

最新文章

  1. HTML的标签描述15
  2. centerOs-6.8的安装
  3. 用Lucene建立搜索索引
  4. [深度学习-实践]Tensorflow 2.x应用ResNet SeNet网络训练cifar10数据集的模型在测试集上准确率 86%-87%,含完整代码
  5. JavaScript笔记 - 对象继承的几种方式
  6. 蓝桥杯 ALGO-113 算法训练 数的统计
  7. 数据结构排序系列详解之六 树形选择排序
  8. flask post json_使用Flask构建web项目的代码架构以及技术栈模板(一)
  9. Linux虚拟机的安装与创建【超详细】【手把手教学】
  10. java 纯真ip 乱码_UTF-8使用纯真IP数据库乱码问题
  11. SSIM公式:结构相似性计算原理,基于SSIM的图像质量评价
  12. ctfshow七夕杯复现
  13. 怎么删除淘宝足迹 淘宝足迹多久才能形成
  14. 【建站】手把手教你域名注册(腾讯云)
  15. 在百度Create 2021大会聆听李彦宏,王海峰“论道”AI
  16. 纪首领浙大计算机学院,趣链科技X浙江大学|区块链技术与应用专题研讨会成功召开...
  17. 前缀、真前缀、后缀、真后缀
  18. Neighbor2Neighbor源码解读
  19. 5. 文件上传下载 与 db数据库
  20. 南京大学计算机科学与技术系分数,南京大学计算机科学与技术专业2017年在江苏理科高考录取最低分数线...

热门文章

  1. 区块链百科合集之共识机制
  2. 关于小米智能家庭套装的十个小常识,你能答出几个?
  3. 一文读懂贝叶斯推理问题:MCMC方法和变分推断
  4. 贝叶斯推理:概率分布
  5. Android事件分发之ACTION_MOVE与ACTION_UP的传递机制
  6. 基于K-MEANS聚类的客户价值分群
  7. 【论文阅读】Fair and Efficient Gossip in Hyperledger Fabric -- ICDCS
  8. 如何成为优秀软件设计师
  9. 准确率、精确率、召回率、F1值
  10. VC助手破解,含VC2010