热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

自动化测试框架[Cypress框架拆解]

前言阅读本篇博文前,请确保已经阅读过自动化测试框架[Cypress测试实例凸显其优势]阅读本篇博文前,请确保已经阅读过自动化测试框架[Cypress环境搭建与配置详解]Cypres

前言


阅读本篇博文前,请确保已经阅读过自动化测试框架[Cypress测试实例凸显其优势]
阅读本篇博文前,请确保已经阅读过自动化测试框架[Cypress环境搭建与配置详解]



Cypress默认框架

在Cypress安装完成后,用cypress open命令首次打开Cypress,会自动进行初始化配置并生成一个默认的文件夹结构,如下图所示


fixtures

fixture通常配合cy.fixture()命令来使用,主要用来存储测试用例的外部静态数据,通常目录是在cypress/fixtures中,但也可以配置到另一个目录;静态数据通常存储在.json后缀文件里,例如自动生成的example.json


这里的数据通常是某个网络请求的对应响应部分,包括HTTP状态码和返回值,如果测试中需要对某些外部接口进行访问并依赖其返回结果,则可以使用fixtures而无须真正的访问这个接口,使用fixtures消除了对外部功能模块的依赖,可以使用fixtures提供的固定的期望的返回值,同时也因为无需真正的发送网络请求然后依赖其返回结果使得测试执行更有效率



integration

测试代码文件,默认位于cypress/integration路径下,也可以配置到另一个目录中,且以如下后缀的文件均会被Cypress视为测试文件



  • .js文件:普通的Javascript编写的文件

  • .jsx文件:带有扩展的Javascript文件,其中可能包含处理XML的ECMAScript

  • .coffee文件:是一套Javascript的转译语言,相对于Javascript它的语法更严格

  • .cjsx文件:CoffeeScript中的jsx文件

创建测试文件很简单,只要创建上述格式的文件,便可以使用Test Runner去执行


plugins

Cypress独一无二的优点便是测试运行在浏览器之内,但也带来了问题,就是在浏览器之外的通信变得很困难,为了解决此类问题,Cypress提供了现成的插件,当然也可以自定义插件,默认情况下插件位于cypress/plugins/index.js中,也可以配置到另一个目录下,在每个测试文件运行之前,Cypress都会自动加载插件文件cypress/plugins/index.js

通常情况下,插件的应用包括“



  • 动态更改来自cypress.json,cypress.env.json,CLI或系统环境变量等

  • 修改特定浏览器的启动参数

  • 将消息直接从测试代码传递到后端


support

该路径下通常放置可重用的配置,例如通用函数或全局默认配置等,默认位于cypress/support/index.js,也可以配置到另一个目录,每个测试文件运行之前,Cypress都会自动加载cypress/support/index.js
实际使用非常简单,只需要在cypress/support/index.js文件中使用beforeEach()函数即可,例如要实现每次测试运行前打印出所有的环境变量,如下代码所示

beforeEach(function(){
cy.log('当前环境变量为${JSON.stringify(Cypress.env())}')
})

自定义Cypress

Cypress不仅支持用户自定义文件结构,还支持用户自定义Cypress的各项配置,Cypress通过cypress.json文件来实现各项配置的自定义,当一个项目被添加到Cypress中后,该文件就会被创建在与Cypress同级目录下,它用来保存projectId和任何用户定义的配置信息


全局配置项

























































配置项默认值描述
baseUrlnull通常就设置为系统主域名
env{ }任何想用作环境变量的变量就都可以设置在env里
ignoreTestFiles*.hot-update.js忽略某些测试用例,被此选项规则匹配的测试用例不会被执行
numTestsKeptInMemory50保留在内存中的测试用例(主要是快照和命令数据)条数,默认50,过大将消耗大量内存
portnullCypress占用的端口号,默认随机生成
reporterspec在Cypress运行期间使用哪个reporter,例如Mocha内置的reporter,teamcity和junit等
reporterOptionsnullreporter支持的选项配置
testFiles**/*.*要加载的测试文件,可以指定具体文件,也可以模糊匹配
watchForFIleChangestrueCypress在运行中自动检测文件变化,当文件有变化时,则自动重新运行受影响的测试用例

超时










































配置项默认值描述
defaultCommandTimeout4000命令默认超时时间,单位毫秒
execTimeout60000在cy.exec()命令执行期间,等待系统命令完成执行的超时时间,单位毫秒
taskTimeout60000在cy.task()命令执行期间,等待任务完成执行的超时时间,单位毫秒
pageLoadTimeoutpage60000等待页面加载或cy.visit(),cy.go(),cy.reload()命令触发其页面加载事件的超时时间,单位毫秒
requestTimeout5000等待cy.wait()命令中的XHR请求发出的超时时间,单位毫秒
responseTimeout30000cy.request(),cywait(),cy.fixture(),cy.getCOOKIE(),cy.getCOOKIEs(),cy.setCOOKIE(),cy.clearCOOKIE(),cy.clearCOOKIEs()和cy.screenshot()命令的响应超时时间,单位毫秒

文件夹&文件

Cypress支持用户自定义文件结构















































配置项默认值描述
fileServerFolder项目根目录fileserver目录
fixturesFoldercypress/fixturesfixtures默认文件夹,可更改默认值为false来禁用它
integrationFoldercypress/integration测试用例默认文件夹
pluginsFilecypress/plugins/index.js插件默认文件夹,可以更改默认值为false来禁用它
supportFilecypress/support/index.js同样可以更改默认值为false来禁用它
videosFoldercypress/videos运行期间保存视频的默认路径
screenshotsFoldercypress/screenshots测试失败或者cy.screenshot()命令引发的截图默认存放路径

可视视图

Cypress在Test Runner运行期间,会显示一个可视视图






















配置项默认值描述
viewportHeight660被测应用程序视图下应用程序的默认高度,单位像素(可以使用cy.viewport()命令覆盖)
viewportWidth1000被测应用程序视图下应用程序的默认宽度,单位像素(可以使用cy.viewport()命令覆盖)

更多的配置项可参考Cypress官方



Cypress.config()

除了直接在cypress.json文件里更改配置项之外,Cypress还允许使用Cypress.config()去获取或者覆盖某些配置项,语法如下

// 获取所有config信息
Cypress.config()
// 获取指定配置项的信息
Cypress.config(name)
// 更改指定配置项的默认值
Cypress.config(name, value)
// 使用对象字面值设置多个配置项
Cypress.config(object)

实战

cypress/support/index.js写入如下代码

beforeEach(function(){
cy.log(`当前测试系统环境变量为${JSON.stringify(Cypress.config())}`)
})

cypress/integration/新建文件testConfig.js,并写入如下代码

// testLogin.js
///
describe('登陆', function(){
// 此用户名密码为本地服务器默认
const username = 'jane.lane'
const password = 'password123'
context('HTML表单登陆测试', function(){
it('登陆成功, 跳转到dashboard页', function(){
cy.log(`pageLoadTimeout当前值为:${Cypress.config('pageLoadTimeout')}`)
Cypress.config('pageLoadTimeout', 10000)
cy.log(`pageLoadTimeout当前值为:${Cypress.config('pageLoadTimeout')}`)
cy.visit('http://localhost:7077/login')
cy.get('input[name=username]').type(username)
cy.get('input[name=password]').type(password)
cy.get('form').submit()
// 断言,验证登陆成功则跳转到dashboard页面
// 断言,验证用户名存在
cy.url().should('include', '/dashboard')
cy.get('h1').should('contain', 'jane.lane')
})
})
})

执行测试,结果如下图所示

本文地址:https://blog.csdn.net/dawei_yang000000/article/details/110205072



推荐阅读
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
author-avatar
糖猫
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有