近期接触了Cypress和TestCafe,两个测试框架都基于Node.js,都不再使用Selenium+WebDriver,而且开箱即用,非常轻量级,就冲着不再使用WebDriver这一点,极大地勾起了我的好奇心。所以今天就来初略的学习一下,并以此文作为学习笔记。

本文学习笔记以Windows10 为背景,Mac 和 Linux请参考官网

.

注意: Cypress 和 TestCafe 都依赖Node.js,所以在学习之前确保电脑上已经安装了Node.js

本篇文章只是一个初略的Demo学习笔记,更多详细内容后期学习继续更新文章。

安装Node.js并配置npm环境变量

1、Node.js下载地址:https://nodejs.org/en/



2、安装路径

3、配置npm环境变量

安装Cypress

方法一: 直接使用命令安装(cmd 安装 会比较慢,还是建议选择下面的第2种方式,直接下载安装包来安装。)

npm install cypress

方法二: 或者去官网下载安装包 https://www.cypress.io/

解压后的文件如下,直接点击Cypress.exe安装文件启动即可

启动运行Cypress

方法一: 使用cmd命令行启动

(npm高于v5.2的版本中自带npx, 或者你也可以单独安装npx.)

npx cypress open



方法二: 如果是下载Cypress安装包,解压后的文件中直接点击Cypress.exe安装文件启动即可启动



方法三:

在package.json文件中加入以下内容之后,就可以使用 npm run cypress:open 来启动Cypress

比如我的package.json在 E:\WorkSpace\Ui_test\node_modules\cypress

{
"scripts": {
"cypress:open": "cypress open"
}
}



cd到上述文件夹E:\WorkSpace\Ui_test\node_modules\cypress下输入 npm run cypress:open 即可启动Cypress。

方法四: 当然还有几种方式启动,请参考官网介绍;上面选择了最方便的启动方式。

Cypress启动运行界面

启动后的Cypress界面如下:

选择项目地址,然后就可以继续选择并执行项目里面的测试脚本。

Cypress测试脚本与执行

先来说一下文件结构:

|-- fixtures
|-- integration
| `-- example_spec.js
|-- plugins
| `-- index.js
`-- support
|-- commands.js
`-- index.js

fixtures 文件夹存放自定义 json 文件;

integration 文件夹编写测试;

plugins 和 support 是非必须使用的文件夹,需要自定义指令的时候会用到。

添加自己的第一个测试用例

1、如果是cmd npm安装的cypress, 用例脚本在\node_modules\cypress\cypress\integration\examples 文件下。

2、如果是下载解压的cypress,用例脚本在\cypress\integration\examples文件下

新建sample_spec.js:

describe('My First Test', function () {
it('Does not do much!', function () {
cy.visit("https://www.baidu.com")
cy.get("#kw").type("cypress test")
cy.wait(60)
cy.get("#su").click()
cy.contains('cypress website').click()
})
})

然后运行Cypress可以看到如下图,然后直接点击js文件,运行测试用例,将会启动Chrome运行脚本。



安装TestCafe

一个基于Node.js的WebUI自动化端到端测试框架,使用JS或TypeScript编写测试。

npm install -g testcafe #全局安装模式



更多安装方式可参考官网

安装之后使用测试命令测试一下是否安装成功

testcafe chrome tests/

TestCafe创建一个简单的测试例子

TestCafe允许使用JavaScript和TypeScript来编写测试。

cd到你的项目文件下,要创建测试,请新建一个后缀名为.js或.ts文件。这个文件必须有一个特殊的结构-测试必须组织到fixture中。

比如此处以sample.js 为例:

1、首先,导入·testcafe模块

import { Selector } from 'testcafe';

2、然后使用fixture函数声明一个fixture。

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

3、然后,创建测试函数test,你可以在其中输入测试代码,之后保存为sample.js。

import { Selector } from 'testcafe';

fixture `Getting Started`
.page `http://devexpress.github.io/testcafe/example`; test('My first test', async t => {
// Test code
});

TestCafe运行测试脚本

在你的项目文件夹下,cmd切换到你指定目标浏览器和文件路径,即可运行测试。

testcafe chrome sample.js

TestCafe将自动打开所选的浏览器并在其中开始执行测试。

查看测试结果

当测试运行时,TestCafe收集关于测试运行的信息,并在shell命令窗口中输出报告。





有关如何配置测试运行的详细信息,可以参考官网

TestCafe编写测试代码

1、在页面上执行操作

每个测试都应该能够与页面内容交互。对于用户要执行的操作,TestCafe提供了:Click,hover, typetext,setFilesToUpload等等。他们可以叫做 链,操作链。

下面的fixture包含一个简单的测试,该测试在文本编辑器中键入开发人员名称,然后单击Submit按钮。

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', '软测小生')
.click('#submit-button');
});

所有的操作实现都使用对象控制器t的异步功能来实现。 此对象用于访问测试运行API。要等待操作完成,在调用这些操作或操作链时使用await关键字。

2、观察页面状态

TestCafe允许测试人员观察页面状态。为此,它提供了在客户端上执行代码的特殊类型的函数:Selector 用于直接访问DOM元素,ClientFunction用于从客户端获取任意数据。你可以将这些函数作为常规的异步函数调用,也就是说,你可以获得它们的结果并使用参数向它们传递数据。

Selector API提供方法和属性来选择页面上的元素并获取它们的状态。

例如,单击示例web页面上的Submit按钮将打开一个“谢谢”页面;要访问打开页面上的DOM元素,就必须使用Selector函数。

下面的示例演示如何访问文章标题元素并获取其实际文本。

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', '软测小生')
.click('#submit-button'); const articleHeader = await Selector('.result-content').find('h1'); // 获取文章标题的文本
let headerText = await articleHeader.innerText;
});

更多内容可参考选择页面元素

3、断言

一般而言,功能测试还应该检查执行操作的结果。例如,“谢谢”页面上的文章标题应该显示为用户输入的名称。要检查页面Title是否正确,必须向测试添加断言:

下面的测试演示了如何使用内置的断言

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', '软测小生')
.click('#submit-button') // 使用断言检查实际的标题文本是否等于预期的标题文本
.expect(Selector('#article-header').innerText).eql('Thank you, 软测小生!');
});

总结:

在接触了Cypress和TestCafe之后,惊掉下巴,这两个工具的轻量级之轻,与之前使用的Selenium相比,简直无法想象,从安装到执行第一个脚本,从上述的学习笔记中可以看出,10分钟入门完全不是吹的。

遥想当年Selenium+WebDriver的学习之路,可谓是很艰辛,也很复杂,很大原因也可能是由于那时是小白;再接触到Cypress和TestCafe之后,爱不释手,决定使用目前的项目来实施拓展一下。

Cypress与TestCafe WebUI端到端测试框架简介的更多相关文章

  1. pytest测试框架 -- 简介

    一.pytest测试框架简介: (1)pytest是python的第三方测试框架,是基于unittest的扩展框架,比unittest更简洁,更高效. (2)pytest框架可以兼容unittest用 ...

  2. Python 各种测试框架简介(三):nose

    转载:https://blog.csdn.net/qq_15013233/article/details/52527260 摘要 这里将从(pythontesting.net)陆续编译四篇 Pytho ...

  3. Python 各种测试框架简介

    转载:https://blog.csdn.net/yockie/article/details/47415265 一.doctest doctest 是一个 Python 发行版自带的标准模块.本篇将 ...

  4. Assignment3:白盒测试以及测试框架简介

    一. 白盒测试简介       白盒测试又称结构测试.透明盒测试.逻辑驱动测试或基于代码的测试.白盒测试是一种测试用例设计方法,盒子指的是被测试的软件,白盒指的是盒子是可视的,你清楚盒子内部的东西以及 ...

  5. python 几种常见的测试框架

    1. unittest 参考文档: https://docs.python.org/3/library/unittest.html The unittest unit testing framewor ...

  6. 端到端测试工具--testcafe

    写在前面 随着业务的增加,复杂性的增加,我们更需要保证页面不能出错,之前需要每次上线之前需要每次人工测试,如果有好多改动,为保证业务不出错,需要耗费更多的时间来测试,所以我们需要写一些测试来保证业务的 ...

  7. cypress 端到端测试框架试用

    cypress 包含的特性 端到端测试 集成测试 单元测试 安装 yarn add cypress --dev 运行测试项目 初始化项目 yarn init -y 安装cypress yarn add ...

  8. 最受欢迎的5款Node.js端到端测试框架

    测试,尤其是自动化测试在现代 WEB 工程中有着非常重要的角色,与交付过程集成良好的自动化测试流程可以在新版发布时帮你快速回归产品功能,也可以充当产品文档.测试因粒度不同又可以分为单元测试.接口测试. ...

  9. pc端和android端应用程序测试有什么区别?(ps面试题)

    pc端和android端应用程序测试有什么区别?(ps面试题) [VIP7]大连-凭海临风(215687736) 2014/4/10 8:56:171.测试环境不同PC平台一般都是windows an ...

随机推荐

  1. java实现多线程(车站卖票)

    import java.util.ArrayList; import java.util.List; public class 多线程 { // public static int j=0; publ ...

  2. POJ - 2184 Cow Exhibition 题解

    题目大意 有 \(N(N \le 100)\) 头奶牛,没有头奶牛有两个属性 \(s_i\) 和 \(f_i\),两个范围均为 \([-1000, 1000]\). 从中挑选若干头牛,\(TS = \ ...

  3. PMBOK 基础知识(1)

    启动.结束过程 项目管理计划 第一章  引论 第2章项目运行环境 第3章 项目经理的角色 第4章 项目整合管理 第5章 项目范围管理 第6章 项目进度管理 第7章 项目成本管理 第8章 项目质量管理  ...

  4. [原创][开源] SunnyUI.Net 更新日志

    SunnyUI.Net, 基于 C# .Net WinForm 开源控件库.工具类库.扩展类库.多页面开发框架 Blog: https://www.cnblogs.com/yhuse Gitee: h ...

  5. Pikachu的暴力破解演示-----基于表单的暴力破解

    1 首先打开XAMMP与burpsuite 2 打开游览器输入127.0.0.1:88进入pikachu,(由于我的端口有80改成88所以输入127.0.0.1:88要是没有更改80只需要输入127. ...

  6. Dubbo——SPI及自适应扩展原理

    文章目录 引言 正文 一.什么是SPI? 1. Java SPI的实现 2. Dubbo SPI实现原理 由配置文件得到的猜想 SPI源码 二.自适应扩展机制 三.Dubbo IOC 总结 引言 Du ...

  7. winxp系统连接服务器丢包解决方法

    winxp系统连接服务器丢包解决方法 MFC编写一个打开网页的程序,发生异常没有获取到数据. 分析步骤: 1. 用getLastError()获取到的信息,(2)- 系统找不到指定的文件. 2. 用浏 ...

  8. JSON Web令牌(JWT)介绍与使用

    手机端接口开发会遇到一个问题是,接口登录后需要返回一个Token.token首先有一点必须唯一,每次请求都需要把token给带上.基于必须唯一的特性,很多朋友在开发是都选择了uuid.是不是token ...

  9. new jup在新一代中存在

    1.灰度发布服务动态路由 动态配置路由规则,实现对调用流量的精确控制.可配置基于版本.IP.自定义标签等复杂的规则.2.服务鉴权示例2需求:服务 provider-demo 只允许来自 consume ...

  10. ElasticSearch中倒排索引和正向索引

    ElasticSearch搜索使用的是倒排索引,但是排序.聚合等不适合倒排索引使用的是正向索引 倒排索引 倒排索引表以字或词为关键字进行索引,表中关键字所对应的记录项记录了出现这个字或词的所有文档,每 ...