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 的相关使用文档。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/164945.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++11】default、delete与Noncopyable

C11 oop中的default、delete与Noncopyable default 在C11标准中,可以使用default关键字来显式地声明默认的构造函数和析构函数。 使用default关键字可以用来显式声明默认的构造函数和析构函数。这样做可以让编译器自动生成默认实现 –>->->关于构造函数…

计数排序+桶排序+基数排序 详讲(思路+图解+代码详解)

文章目录 计数排序桶排序基数排序一、计数排序概念:写法一:写法二: 二、桶排序概念代码 三、基数排序概念1.LSD排序法(最低位优先法)2.MSD排序法(最高位优先法) 基数排序VS基数排序VS桶排序 计数…

内容营销频频出圈,这些品牌号做对了什么?

小红书拥有大量的年轻用户,通过运营品牌号既能降低投放成本,又能更好地连接消费者和品牌,在平台完成一站式闭环营销。 今天就借助几个成功案例,来分析下他们是如何搭建官方账号,通过内容运营吸引更多用户,实…

一款专为POS机设计的芯片解决方案

一、基本概述 HCM8003设计用于磁条读卡器系统。它会从F/2F恢复时钟和数据信号磁产生的数据流头HCM8003将用于数据速率从200到15000比特每秒。 二、典型电路 内部数据的采集和跟踪这个范围是自动的。可以应用于POS机终端设备、磁卡门禁系统、身份识别等场合。 三、引脚定义 四…

redis的主从复制,哨兵模式

1.主从复制 主从复制:主从复制是redis实现高可用的基础,哨兵模式和集群都是在主从复制的基础之上实现高可用 主从复制实现数据的多机备份,以及读写分离(主服务器负责写,从服务器只能读) 缺陷&#xff1a…

PyTorch基本操作和工作流程

1. PyTorch基础 张量(Tensors): 学习 PyTorch 中表示数据的基本单元。了解如何创建、操作和使用张量。 自动微分(Autograd): 了解 PyTorch 的自动微分机制,这是训练神经网络的核心。 模型定义…

Android registerForActivityResults使用详解以及实现原理

registerForActivityResult 使用用途是监听Activity结果。 以下是使用样例 //需要传递Request用于解析Intent和解析上个Activity返回的结果 val launchdata = registerForActivityResult<PickVisualMediaRequest, Uri?>(ActivityResultContracts.PickVisualMedia()) {…

中国人工智能系列白皮书 AIGC

https://www.caai.cn/index.php?s/home/article/detail/id/3188.html

【git】使用ssh

前言 git之前一直使用https&#xff0c;因为很方便随时随地都可以用。最近把代码托管到GitHub&#xff0c;使用https就使用不了。后面听同事说GitHub使用ssh是没问题的&#xff0c;就想着尝试一下。 git ssh配置 设置用户名和邮箱 git config --global use.name username g…

OpenCV实现图像噪声、去噪基本方法

一、噪声分类 1、高斯噪声 指服从高斯分布&#xff08;正态分布&#xff09;的一类噪声&#xff0c;其产生的主要原因是由于相机在拍摄时视场较暗且亮度不均匀造成的&#xff0c;同时相机长时间工作使得温度过高也会引起高斯噪声&#xff0c;另外电路元器件白身噪声和互相影响…

acwing算法基础之数学知识--求组合数基础版

目录 1 基础知识2 模板3 工程化 1 基础知识 &#xff08;一&#xff09; 组合数 C n k C_n^k Cnk​的计算公式&#xff0c; C n k n ⋅ ( n − 1 ) ⋯ ( n − k 1 ) 1 ⋅ 2 ⋯ k C_n^k\frac{n\cdot(n-1)\cdots(n-k1)}{1\cdot 2\cdots k} Cnk​1⋅2⋯kn⋅(n−1)⋯(n−k1)​ …

laravel-admin导出excel全部,表中无id列导出失败

laravel-admin导出excel时&#xff0c;导出全部数据&#xff0c;但是表中没有id字段&#xff0c;然后就无法导出excel&#xff1b; 就直接显示 一开始我也很着急&#xff0c;弄了半天还是不行&#xff0c;然后重写还是有问题 最后发现底层代码排序是按照id排序的orderBy(id, a…

Unity地面交互效果——6、地形动态顶点置换和曲面细分

回到目录 Unity置换贴图局部距离曲面细分 大家好&#xff0c;我是阿赵。   这篇文章是我无聊的时候做了一个demo&#xff0c;觉得挺有趣&#xff0c;于是就发上来。这里面包含了4个内容&#xff1a;置换贴图、顶点偏移、局部曲面细分&#xff0c;曲面细分按距离调整强度。 …

JVS低代码表单设计:数据联动详解(多级数据级、数据回显等)

在这信息化时代&#xff0c;表单作为数据的收集和展示工具&#xff0c;已经渗透到不同的角落。JVS低代码对表单的设计和操作进行了不断的优化和创新。其中&#xff0c;联动回显作为一项重要的功能&#xff0c;无论是多级数据级联控制、组件的联动控制&#xff0c;还是多表的数据…

【0基础学Java第三课】-- 运算符

3. 运算符 3.1 什么是运算符3.2 算术运算符3.2.1 **基本四则运算符&#xff1a;加减乘除模( - * / %&#xff09;**3.2.2 增量运算符 - * %3.2.3 自增/自减运算符 -- 3.3 关系运算符3.4逻辑运算符(重点)3.4.1 逻辑与 &&3.4.2 逻辑 ||3.4.3逻辑非 !3.4.4 短路求值 3.5 …

DBS note4:Buffer Management

目录 1、介绍 2、缓冲池 3、处理页面请求 4、LRU替换和时钟策略 1&#xff09;顺序扫描性能 - LRU 5、最近最常使用替换策略&#xff08;MRU Replacement&#xff09; 1&#xff09;Sequential Scanning Performance - MRU 6、练习题 1&#xff09;判断真假 2&#xf…

华清远见嵌入式学习——网络编程——作业4

作业要求&#xff1a;①使用IO多路复用中的select函数实现TCP并发服务器客户端 ②使用IO多路复用中的poll函数实现TCP并发服务器的服务器端 一、 代码 #include <myhead.h>#define SERPORT 8888 //服务器端口号 #define SERIP "192.168.114.113"…

Samsung下origen中uboot的配置与编译

uboot的特点&#xff1a; n代码结构清晰 n 支持丰富的处理器与开发板&#xff0c;易于移植 n 支持丰富的用户命令 n 支持丰富的网络协议 n 支持丰富的文件系统 n 支持丰富的设备驱动 n 更新活跃、用户较多、资料丰富 n 开放源代码 n 较高的稳定性 n 不具有通用性&#xff08;不…

JavaScript编程基础 – 布尔值(Booleans)

JavaScript编程基础 – 布尔值(Booleans) Javascript Programming Essentials – Booleans 一个JavaScript布尔值包含两个值中的一个&#xff0c;即 true 或者 false。 本文简要介绍JavaScript布尔值的具体应用&#xff0c;以及可能作为对象的布尔值等。 1. 布尔值(Booleans)…