使用 TestCafe 编写测试用例,必须要先使用 fixture 声明一个测试夹具,然后在这个测试夹具下编写测试用例,在一个编写测试用例的 js 或 ts 文件中,可以声明多个测试夹具
声明了测试夹具之后,就可以定义测试用例了,在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');
});
在 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 提供了两种钩子,一种叫测试钩子,一定叫固定钩子。
测试钩子指的是每一条测试用例执行之前和执行之后,会执行的钩子函数,我们称之为测试钩子,关于测试钩子 Testcafe 提供了如下四个方法。
测试夹具 fixture 提供了一个 beforeEach 方法,可以给该 fixture 中的每一条测试用例设置前置执行的操作。案例代码如下:
import 'testcafe'
fixture(`百度案例`)
.page('https://www.baidu.com')
// 设置每条用例执行的前置操作
.beforeEach(async t => {
await t.typeText('#kw', "前置步骤").click('#su')
});
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(async t => {
await t.typeText('#kw', "test设置的前置")
})
('百度搜索功能', async t => {
await t.typeText('#kw', "python")
.click('#su');
})
给单独的用例设置后置操作
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');
})
夹具钩子和测试钩子不同,夹具钩子只会在夹具中的第一个测试开始之前和最后一个测试完成之后运行。要添加夹具钩子,可以使用fixture.before和fixture.after方法来定义定义。另外在夹具钩子中无法访问测试页面,也无法对测试页面进行相关操作。
fixture(`百度案例`)
.page('https://www.baidu.com')
.before( async ctx => {
// 前置夹具钩子
console.log(ctx)
})
fixture(`百度案例`)
.page('https://www.baidu.com')
.after( async ctx => {
console.log(ctx)
// 后置夹具钩子
});
fixture(`百度案例`)
.before(async ctx => {
// 夹具钩子中保存数据
ctx.someProp = 123;
})
test('Test1', async t => {
// 测试代码中获取数据
console.log(t.fixtureCtx.someProp);
});
在执行测试的时候,如果说有用例不想执行,那么我们可以设置跳过用例执行。关于跳过用例执行testcafe中提供了fixture.skip 和test.skip方法。
另外我们也可以使用 fixture.only 和 test.only 来筛选执行需要的用例,只有选择的用例或夹具运行,而所有其他应被跳过
以上就是 testcafe 中用例编写的所有内容啦,后续会持续更新 TestCafe 的相关使用文档。