testcafe:了解testcafe,并初尝试使用,入门(一)

前言

碰巧一个朋友想学testcafe,我正好想学英语,哈哈,相互碰撞一下,我教他testcafe,他教我英语。正好把我学习的过程记录下来,也方便教他

一、简介

1、纯的node.js-TestCafe不使用Selenium,不需要插件即可在真实的浏览器中运行测试。它建立在node.js之上,因此可以与现代开发工具集成并很好地工作
2、无需其他设置或配置-TestCafe都设置为在之后立即运行测试 npm install
3、完整的测试工具-通过一个启动命令,TestCafe即可启动浏览器,运行测试,收集结果并生成报告
4、对于前端开发工程师很友好,只要会Node,JS\TypeScript,基本前端都可以搭建一套UI自动化测试

官网:http://devexpress.github.io/testcafe/

二、入门

安装TestCafe

安装testcafe分两种,一种全局安装,一种本地安装
在安装testcafe前,你要确保已经安装node和npm(具体如何安装可以百度一下)

全局安装

npm install -g testcafe

本地安装

npm install testcafe --save-dev

初尝试testcafe

简单的运行代码

要创建测试,请创建一个新的.js或.ts文件。

//test1.js
import { Selector } from 'testcafe';

fixture `Getting Started`
    .page `http://devexpress.github.io/testcafe/example`;

test('My first test', async t => {
    // Test code
});

运行测试
TestCafe自动打开选定的浏览器并在其中启动测试执行。
testcafe是全局安装的包,chrome是指定谷歌浏览器运行 test1.js是我们要运行的文件

testcafe chrome test1.js

在页面上执行操作

每个测试都应该能够与页面内容进行交互。要执行用户操作,TestCafe提供了大量的动作:click,hover,typeText,setFilesToUpload,等它们可以在一个被称为链。

以下fixture包含一个简单的测试,该测试将开发人员的姓名键入文本编辑器,然后单击“提交”按钮。

import { Selector } from 'testcafe';

fixture `Getting Started`
    .page `http://devexpress.github.io/testcafe/example`;

test('My first test', async t => {
    await t
        .typeText('#developer-name', 'shufeng zeng')
        .click('#submit-button');
});

观察页面状态

TestCafe允许您观察页面状态。为此,它提供了特殊类型的功能,这些功能将在客户端上执行您的代码: 用于直接访问DOM元素的选择器和用于从客户端获取任意数据的ClientFunction。您将这些函数称为常规异步函数,也就是说,您可以获取它们的结果并使用参数将数据传递给它们。

如下:单击示例网页上的Submit按钮可打开“谢谢”页面。要访问打开页面上的DOM元素,Selector可以使用此功能。下面的示例演示如何访问article标头元素并获取其实际文本。

import { Selector } from 'testcafe';

fixture `Getting Started`
    .page `http://devexpress.github.io/testcafe/example`;

test('My first test', async t => {
    await t
        .typeText('#developer-name', 'shufeng Zeng')
        .click('#submit-button');

    const articleHeader = await Selector('.result-content').find('h1');

    // Obtain the text of the article header
    let headerText = await articleHeader.innerText;
});

断言

功能测试还应检查所执行操作的结果。例如,“谢谢”页面上的文章标题应使用输入的名称来寻址用户。要检查标题是否正确,您必须在测试中添加一个断言。

以下测试演示了如何使用内置断言。

import { Selector } from 'testcafe';

fixture `Getting Started`
    .page `http://devexpress.github.io/testcafe/example`;

test('My first test', async t => {
    await t
        .typeText('#developer-name', 'shufeng zeng')
        .click('#submit-button')

        // Use the assertion to check if the actual header text is equal to the expected one
        .expect(Selector('#article-header').innerText).eql('Thank you, shufeng zeng!');
});

三、fixture

TestCafe测试必须有fixture类别,一个js/ts文件可以包含多个fixture。

要声明测试fixture,请使用fixture功能。

fixture( fixtureName )
fixture `fixtureName`

当我们执行的时候,输出页面则输出fixtureName ,既注册页面测试
fixture 带有一些方法

参数类型描述
*pageString测试的网页
beforeEachObject每个test执行之前都会被运行
beforeObject比beforeEach更早运行,且每个fixture只运行一次
afterObject比afterEach更晚运行,且每个fixture只运行一次
afterEachObject每个test执行之后都会被运行

page

填写测试的网页

fixture`注册页面测试`
    .page`http://devexpress.github.io/testcafe/example/`;

beforeEach

每个test执行之前都会被运行

语法块

fixture.beforeEach( fn(t) )
参数类型描述
fnFunction包含挂钩代码的异步挂钩函数。
tObject用于访问测试运行API的测试控制器

before

比beforeEach更早运行,且每个fixture只运行一次

fixture.before( fn(ctx) )
参数类型描述
fnFunction包含挂钩代码的异步挂钩函数。
ctxObjectfixture上下文对象用于共享变量fixture代码和测试代码之间。

与test的生命周期不同,fixture的生命周期在测试之间运行,无法访问测试页面。使用它们来执行服务器端操作,例如准备托管测试过的应用程序的服务器。

after

比afterEach更晚运行,且每个fixture只运行一次

fixture.after( fn(ctx) )
参数类型描述
fnFunction包含挂钩代码的异步挂钩函数。
ctxObjectfixture上下文对象用于共享变量fixture代码和测试代码之间。

afterEach

每个test执行之后都会被运行

fixture.afterEach( fn(t) )
参数类型描述
fnFunction包含挂钩代码的异步挂钩函数。
tObject用于访问测试运行API的测试控制器

fixture的demo

fixture(`beforeeach test1`)
    .page(`https://www.baidu.com`)
    .beforeEach(async I => {
        console.log('this is beforeEach')
    })
    .before(async I => {
        console.log('this is before')
    })
    .after(async I => {
        console.log('this is after')
    })
    .afterEach(async I=>{
        console.log("this is afterEach")
    });

test("test beforeAndafter",I=>{
    console.log("1111")
});

test("test beforeAndafter",I=>{
    console.log("2222")
});

效果如下:
在这里插入图片描述
通过打印,我们可以知道fixture的执行顺序

四、test

test( testName,fun(t))
fixture`注册页面测试`
    .page`http://devexpress.github.io/testcafe/example/`;
    
test('帐号不满11位数的校验', async t => {
    await t
        .typeText('#phone', '1387656003')
});

如果校验通过,在输出台则会输出√帐号的校验,否则是✖帐号的校验,

参数类型描述
beforeObject该test运行之前运行
afterObject该test运行之后运行

before

从控制台输出看,test的before 会覆盖fixture中的beforeEach。也就是说如果一个test里面包含了before 那么fixture中的beforeEach对该test无效。

after

从控制台输出看,test的after 会覆盖fixture中的afterEach。也就是说如果一个test里面包含了after 那么fixture中的afterEach对该test无效。

test的demo

fixture(`beforeeach test1`)
    .page(`https://www.baidu.com`)
    .beforeEach(async I => {
        console.log('this is beforeEach')
    })
    .before(async I => {
        console.log('this is before')
    })
    .after(async I => {
        console.log('this is after')
    })
    .afterEach(async I => {
        console.log("this is afterEach")
    });

test
    .before(async t => {
        console.log(`this is test's before`)
    })
    ("test beforeAndafter", I => {
        console.log("1111")
    })
    .after(async t => {
        console.log(`this is test's after`)
    });

test("test beforeAndafter", I => {
    console.log("2222")
});

输出效果如下
在这里插入图片描述

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荒男

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值