Web 自动化神器 TestCafe(三)—用例编写篇
一、用例编写基本规范
1、 fixture 测试夹具
使用 TestCafe 编写测试用例,必须要先使用 fixture 声明一个测试夹具,然后在这个测试夹具下编写测试用例,在一个编写测试用例的 js 或 ts 文件中,可以声明多个测试夹具
- fixture(测试夹具)的声明 import 'testcafe' // 声明一个测试夹具 百度测试 fixture `登录功能测试` 上面是官方文档中的 demo,调用 fixture 方法声明测试夹具的时候,使用的是模板字符串传参的形式,对于没用过这种语法的小伙伴来说看起来不太好理解,可以按下面这个使用括号调用函数的形式来写。 import 'testcafe' // 声明一个测试夹具 新浪测试 fixture('注册功能测试')
- fixture.page 方法: 通过 fixture.page 方法,我们可以在测试夹具打开一个要进行测试的页面 fixture('百度登录测试').page('https://www.baidu.com');
2、test 测试函数
2.1、测试用例编写
声明了测试夹具之后,就可以定义测试用例了,在testcafe中写测试用例,直接调用测试函数test, 并传递一个内部带有测试代码的函数即可 。
import 'testcafe'
// 在测试夹具中打开百度页面
fixture('百度案例').page('https://www.baidu.com');// 第一条用例:百度输入 学习点击搜索
test('用例1', async t => {await t.typeText('#kw', "学习").click('#su');
});// 第二条用例:百度输入 python 点击搜索
test('用例2', async t => {await t.typeText('#kw', "python").click('#su');
});
- 关于上面测试函数 test 调用的说明 test 方法的第一个参数为测试用例的名称,第二个参数是写测试代码的函数 关于参数 t: 在 testcafe 中 所有测试动作都需要使用 测试控制器对象的异步功能来实现。箭头函数定义的参数 t 就是用来接收测试控制器对象的。 上面写测试代码的函数是使用 async/await 语法定义的函数,这也是 testcafe 的推荐写法,在执行相关测试动作时,如果要等待前一个动作执行完成,再调用下一个动作或动作链,只需要进行等待的动作前面加上关键字 await 即可。
2.2、指定测试开始页面
在 fixture 中可以通过 page 方法去打开一个测试的初始页面,当然在 test 方法中如果不用 fixture 打开的初始页面,也可以使用 tes.page 自定义一个测试初始打开页面,如下:
fixture(`百度案例`).page `https://www.taobao.com`;test.page('https://www.baidu.com')('百度搜索功能', async t => {await t.typeText('#kw', "hao123").click('#su');
});
二、测试前后置处理
在工作中执行测试时,大多数的用例执行,都会有一些用例前置准备或者后置清理工作要去做。关于前后置处理的方法,我们称之为钩子函数,testcafe 提供了两种钩子,一种叫测试钩子,一定叫固定钩子。
1、测试钩子
测试钩子指的是每一条测试用例执行之前和执行之后,会执行的钩子函数,我们称之为测试钩子,关于测试钩子 Testcafe 提供了如下四个方法。
- fixture.beforeEach 方法
测试夹具 fixture 提供了一个 beforeEach 方法,可以给该 fixture 中的每一条测试用例设置前置执行的操作。案例代码如下:
import 'testcafe'fixture(`百度案例`).page('https://www.baidu.com')// 设置每条用例执行的前置操作.beforeEach(async t => {await t.typeText('#kw', "前置步骤").click('#su')});
- fixture.afterEach 方法
fixture(`百度案例`).page('https://www.baidu.com')// 设置每条用例执行的前置操作.beforeEach(async t => {await t.typeText('#kw', "前置步骤")}).afterEach(async t => {await t.typeText('#kw', "后置步骤").click('#su')});
上面这两种方法可以给通过测试夹具 fixture 给该夹具下的每条用例设置前后置操作。如果某一条用例需要单独的设置前后置,则需要使用 test.before 方法和 test.after 方法。
- test.before 方法
给单独的用例设置前置操作
test.before(async t => {await t.typeText('#kw', "test设置的前置")})('百度搜索功能', async t => {await t.typeText('#kw', "python").click('#su');})
- test.after 方法
给单独的用例设置后置操作
test.before(async t => {await t.typeText('#kw', "test设置的前置")})('百度搜索功能', async t => {await t.typeText('#kw', "python").click('#su');}).after(async t => {await t.typeText('#kw', "后置方法中输入的内容").click('#su');})
- 测试钩子和测试代码之间共享数据 如果需要在测试钩子和测试代码直接共享数据的话,我们可以通过测试上下文(t.ctx 属性)来进行传递。在测试钩子中将数据保存到测试上下文中,在测试方法中再去测试上下文中获取数据。具体案例如下: test.before(async t => { // 在测试钩子中通过t.ctx保存数据 t.ctx.token = 'musen123' }) ('百度搜索功能', async t => { // 测试钩子中通过t.ctx获取数据 console.log(t.ctx.token) })
2、夹具钩子
夹具钩子和测试钩子不同,夹具钩子只会在夹具中的第一个测试开始之前和最后一个测试完成之后运行。要添加夹具钩子,可以使用fixture.before和fixture.after方法来定义定义。另外在夹具钩子中无法访问测试页面,也无法对测试页面进行相关操作。
- fixture.before 方法
fixture(`百度案例`)
.page('https://www.baidu.com')
.before( async ctx => {// 前置夹具钩子console.log(ctx)
})
- fixture.after 方法
fixture(`百度案例`)
.page('https://www.baidu.com')
.after( async ctx => {console.log(ctx)// 后置夹具钩子
});
- 夹具钩子和测试代码之间共享数据 传递给 fixture.before 和 fixture.after 方法的钩子函数接收一个夹具上下文的参数 ctx。需要进行数据传递时,我们可以在夹具钩子中把数据保存到 ctx 的属性中。在测试代码中使用 t.fixtureCtx 来获取。案例代码如下:
fixture(`百度案例`).before(async ctx => {// 夹具钩子中保存数据ctx.someProp = 123;})test('Test1', async t => {// 测试代码中获取数据console.log(t.fixtureCtx.someProp);
});
三、跳过和选择用例
1、跳过用例
在执行测试的时候,如果说有用例不想执行,那么我们可以设置跳过用例执行。关于跳过用例执行testcafe中提供了fixture.skip 和test.skip方法。
- fixture.skip:跳过整个 fixture 的用例
- test.skip:跳过当前的测试用例 // 跳过夹具F1中所有的用例 fixture.skip('F1'); test('F1-->用例1', async t => { }); test('F1-->用例2', async t => { }); fixture('F2'); // 跳过这一条用例 test.skip('F2-->用例1', async t => { }); test('F2-->用例1', async t => { });
2、选择用例
另外我们也可以使用 fixture.only 和 test.only 来筛选执行需要的用例,只有选择的用例或夹具运行,而所有其他应被跳过
- fixture.only:选择执行的测试夹具
- test.only:选择执行的测试用例 // 选择F1这个测试夹具 fixture.only('F1'); test('F1-->用例1', async t => { }); test('F1-->用例2', async t => { }); fixture('F2'); // 选择这一条用例 test.only('F2-->用例1', async t => { }); test('F2-->用例1', async t => { });
以上就是 testcafe 中用例编写的所有内容啦,后续会持续更新 TestCafe 的相关使用文档。
相关文章:
Web 自动化神器 TestCafe(三)—用例编写篇
一、用例编写基本规范 1、 fixture 测试夹具 使用 TestCafe 编写测试用例,必须要先使用 fixture 声明一个测试夹具,然后在这个测试夹具下编写测试用例,在一个编写测试用例的 js 或 ts 文件中,可以声明多个测试夹具 fixture(测试…...
Redis 基本命令—— 超详细操作演示!!!
内存数据库 Redis7—— Redis 基本命令 三、Redis 基本命令(下)3.8 benchmark 测试工具3.9 简单动态字符串SDS3.10 集合的底层实现原理3.11 BitMap 操作命令3.12 HyperLogLog 操作命令3.13 Geospatial 操作命令3.14 发布/订阅命令3.15 Redis 事务 四、Re…...
Linux:centOS常用命令
CentOS是一种基于Red Hat Enterprise Linux(RHEL)的开源操作系统,因此与其他基于Linux的系统共享很多相似的命令。以下是一些在CentOS上常用的命令 件和目录操作: ls: 列出目录内容。cd: 切换目录。pwd: 显示当前工作目录。mkdir: 创建目录…...
数据结构-二叉树(1)
1.树概念及结构 1.1树的概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。 1.有一个特殊的结点&…...
SpringBoot——国际化
优质博文:IT-BLOG-CN 一、Spring 编写国际化时的步骤 【1】编写国际化配置文件; 【2】使用ResourceBundleMessageSource管理国际化资源文件; 【3】在页面使用ftp:message取出国际化内容; 二、SpringBoot编写国际化步骤 【1】创…...
shell 条件语句 if case
目录 测试 test测试文件的表达式 是否成立 格式 选项 比较整数数值 格式 选项 字符串比较 常用的测试操作符 格式 逻辑测试 格式 且 (全真才为真) 或 (一真即为真) 常见条件 双中括号 [[ expression ]] 用法 &…...
C语言:写一个函数,实现3*3矩阵的转置(指针)
分析: 在主函数 main 中,定义一个 3x3 的整型数组 a,并定义一个指向整型数组的指针 p。然后通过循环结构和 scanf 函数,从标准输入中读取用户输入的 3x3 矩阵的值,并存储到数组 a 中。 接下来,调用 mov…...
STL pair源码分析
STL pair源码分析 pair是STL中提供的一个简单的struct,用来处理类型不同的一对值,是非常常用的数据结构。这一对值是以public的形式暴露出来的,直接通过first和second就能访问。我们以MSVC提供的STL源码为例,分析pair的具体实现。…...
【开源】基于Vue和SpringBoot的农家乐订餐系统
项目编号: S 043 ,文末获取源码。 \color{red}{项目编号:S043,文末获取源码。} 项目编号:S043,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户2.2 管理员 三、系统展示四、核…...
MyBatis 操作数据库(入门)
一:MyBatis概念 (1)MyBatis 💗MyBatis是一款优秀的持久层框架,用于简化JDBC的开发 (2)持久层 1.持久层 💜持久层:持久化操作的层,通常指数据访问层(dao),是用来操作数据库的 2.持久层的规范 ①…...
JVM——垃圾回收器(G1,JDK9默认为G1垃圾回收器)
1.G1垃圾回收器 JDK9之后默认的垃圾回收器是G1(Garbage First)垃圾回收器。 Parallel Scavenge关注吞吐量,允许用户设置最大暂停时间 ,但是会减少年轻代可用空间的大小。 CMS关注暂停时间,但是吞吐量方面会下降。 而G1…...
多模态——使用stable-video-diffusion将图片生成视频
多模态——使用stable-video-diffusion将图片生成视频 0. 内容简介1. 运行环境2. 模型下载3. 代码梳理3.1 修改yaml文件中的svd路径3.2 修改DeepFloyDataFiltering的vit路径3.3 修改open_clip的clip路径3.4 代码总体结构 4. 资源消耗5. 效果预览 0. 内容简介 近期,…...
springboot(ssm网络相册 在线相册管理系统Java(codeLW)
springboot(ssm网络相册 在线相册管理系统Java(code&LW) 开发语言:Java 框架:ssm/springboot vue JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:mysql 5.7(或8.0)…...
邮箱发送短信的多种方式
第一种:邮箱验证方法: 导入依赖: <!-- mail依赖(发送短信的依赖) --><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId> &l…...
R语言——taxize(第五部分)
taxize(第五部分) 3. taxize 文档中译3.71. nbn_synonyms(从 NBN 返回具有给定 id 的分类群名称的所有同义词)3.72. ncbi_children(在 NCBI 中搜索类群的子类群)3.73. ncbi_downstream(检索 NCB…...
负载均衡lvs
简介 ipvsadm 是 Linux 内核中的 IP 虚拟服务器(IPVS)管理工具。IPVS是 Linux 内核提供的一种负载均衡解决方案,它允许将入站的网络流量分发到多个后端服务器,以实现负载均衡和高可用性。IPVS通过在内核中维护一个虚拟服务器表&a…...
【腾讯云云上实验室】探索向量数据库背后的安全监控机制
当今数字化时代,数据安全成为了企业和个人最为关注的重要议题之一。随着数据规模的不断增长和数据应用的广泛普及,如何保护数据的安全性和隐私性成为了迫切的需求。 今天,我将带领大家一起探索腾讯云云上实验室所推出的向量数据库,…...
阅读笔记——《Removing RLHF Protections in GPT-4 via Fine-Tuning》
【参考文献】Zhan Q, Fang R, Bindu R, et al. Removing RLHF Protections in GPT-4 via Fine-Tuning[J]. arXiv preprint arXiv:2311.05553, 2023.【注】本文仅为作者个人学习笔记,如有冒犯,请联系作者删除。 目录 摘要 一、介绍 二、背景 三、方法…...
electron实现截图的功能
Electron是一种跨平台的桌面应用程序开发框架,可以使用HTML、CSS和JavaScript等Web技术构建桌面应用程序。下面是一种使用Electron实现截图的简单方法: 安装Electron和截图库 首先,需要安装Electron和一个截图库,例如electron-sc…...
11、动态数码管显示
数码管驱动方式 1、单片机直接扫描:硬件设备简单,但会消耗大量的单片机CPU时间 2、专用驱动芯片:内部自带显存、扫描电路,单片机只需告诉他显示什么即可 #include <REGX52.H> //数组代表显示亮灯的内容0、1、2、3、4、5、…...
人工智能如何悄然重塑我们的日常生活(从身边小事谈起)
1. 早晨被AI温柔唤醒的每一天 清晨6:30,我的卧室窗帘自动缓缓拉开到45度角,这个精确的角度是AI根据季节和天气预报计算出的最佳采光位置。床头的小爱同学用比上周低沉3%的嗓音说:"今天空气质量优,建议步行上班。"这个细…...
UE5蓝图实战:用JsonLibrary插件轻松搞定WebUI数据交互(附完整节点图)
UE5蓝图实战:用JsonLibrary插件轻松搞定WebUI数据交互 在虚幻引擎5的蓝图开发中,WebUI插件为开发者提供了强大的网页交互能力。然而,当涉及到前后端数据交换时,JSON格式的处理往往成为新手开发者的绊脚石。本文将带你深入探索Json…...
告别手写诊断协议!用Canoe的Osek_Tp.dll库,5分钟搞定CAN/CANFD的TP层测试脚本
5分钟极速搭建CAN/CANFD诊断测试环境:基于Vector Osek_Tp.dll的工程实践 在汽车电子开发领域,诊断协议测试往往是最耗时的环节之一。传统手工编写ISO-15765协议栈的方式,不仅需要深入理解TP层(传输协议层)的复杂状态机…...
《算法题讲解指南:优选算法-字符串》--61.最长公共前缀,62.最长回文子串,63.二进制求和,64.字符串相乘
🔥小叶-duck:个人主页 ❄️个人专栏:《Data-Structure-Learning》《C入门到进阶&自我学习过程记录》 《算法题讲解指南》--优选算法 《算法题讲解指南》--递归、搜索与回溯算法 《算法题讲解指南》--动态规划算法 ✨未择之路࿰…...
2026届毕业生推荐的五大降重复率方案推荐榜单
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 为能切实且有效地把文本里AIGC的比例给降下来,特地给出建议采用多维度的策略&am…...
收放系统变深声纳(VDS)
一、整体结构与典型 VDS 收放系统框图 从 Curtiss-Wright 的公开资料看,典型舰用 VDS 收放系统通常包括: 水动力稳定、声学透明的拖体(4.5–18英尺 / 1.37–5.49 m,钢制或复合材料,360 水平声窗) 拖体发射/回收机构(Body launch and recovery mechanism) 拖缆绞车(拖…...
Realistic Vision V5.1 虚拟摄影棚结合传统软件:生成素材导入PS进行后期合成
Realistic Vision V5.1 虚拟摄影棚结合传统软件:生成素材导入PS进行后期合成 你有没有遇到过这样的场景:脑子里有一个绝佳的创意画面,但要么找不到合适的模特和场景,要么拍摄成本高得吓人,要么就是后期修图修到天昏地…...
eksctl多集群管理终极指南:跨区域部署和统一运维实践
eksctl多集群管理终极指南:跨区域部署和统一运维实践 【免费下载链接】eksctl The official CLI for Amazon EKS 项目地址: https://gitcode.com/gh_mirrors/ek/eksctl eksctl作为Amazon EKS官方CLI工具,为用户提供了快速创建、管理和运维Kuberne…...
YOLO X Layout参数详解:IOU阈值对Table嵌套结构识别准确率的影响实验
YOLO X Layout参数详解:IOU阈值对Table嵌套结构识别准确率的影响实验 1. 引言 在日常文档处理工作中,我们经常遇到包含复杂表格结构的文档,特别是那些嵌套表格、合并单元格的复杂布局。YOLO X Layout作为基于YOLO模型的文档版面分析工具&am…...
如何高效解析城通网盘链接:这款开源工具让下载速度提升10倍
如何高效解析城通网盘链接:这款开源工具让下载速度提升10倍 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet ctfileGet作为一款专注于城通网盘链接解析的开源工具,通过纯前端技术…...
