写在前面

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

端到端测试

测试有很多种,只是当前我们的业务对单元测试不太友好(之前写过redux的单元测试,例子在点我),代码耦合性略高,函数也非pure function。所以需要端到端的测试(End to End Testing)。端到端的测试可以确保一堆组件能够按照预先设想的方式整合起来运行的时候使用。

testcafe

之前调研了一些框架,选择了testcafe这个框架,之前是收费的,现在开源没多久,所以生态不是很好。之所以选中testcafe,很主要的原因是它的api简单和不需要任何依赖。

testcafe只需要全局安装这个库,并不需要安装lite chrome等等。还有一点就是它很具有前瞻性的支持了ts和众多es6,es7的特性。这是比较爽的。

我们开始编写一个测试试一下。

安装testcafe环境

sudo npm i -g testcafe

开始编写case

import { Selector  } from 'testcafe';

引入选择器

fixture `open.toutiao.com test case`
.page `http://open.toutiao.com/`;

打开需要测试的网站(api比较简洁)。

test('should open.toutiao work as expected', async t => {
//some code there
});

这是一个测试的case

test('should open.toutiao work as expected', async t => {
const newsList = Selector('section');
await t.expect(newsList.exists).eql(true, 'should display news list');
})

这是一个最简单的例子,我们选择新闻列表,这个列表需要存在。

ok,我们运行一个命令来执行这个测试。

文件保存为index.js

testcafe chrome index.js

官网例子

import { Selector } from 'testcafe';

fixture `Github Search`
.page `https://github.com`; test('should github search work as expected', async t => {
const searchInput = Selector('.js-site-search-focus');
const searchList = Selector('.repo-list-item');
const resultItem = Selector('.repo-list-item h3 a');
const repoContent = Selector('.repository-content'); await t.setTestSpeed(0.8);
await t.expect(searchInput.exists).eql(true, 'should search input visible');
await t.typeText(searchInput, 'testcafe');
await t.pressKey('enter'); await t.expect(searchList.count).eql(10, 'should show 10 results');
await t.click(resultItem); await t.expect(repoContent.exists).eql(true, 'should repo detail visible'); const location = await t.eval(() => window.location);
await t.expect(location.pathname).eql('/DevExpress/testcafe', 'should testcafe repo found');
});

这个测试做的工作为打开github,期望github的搜索框存在,输入框输入testcafe,点击回车,期望搜索列表搜索结果多于10条,点击第一条结果,期望跳转的页面中存在返回的内容。

最后期望网址的域名搜索位置为/DevExpress/testcafe。返回。

可以运行测试

testcafe chrome index.js

我们的测试

我们的测试也挺简单的,再给个例子吧~

import { Selector, ClientFunction } from 'testcafe';

fixture `open.toutiao.com test case`
.page `http://open.toutiao.com/`; test('should open.toutiao work as expected', async t => {
const newsList = Selector('section');
const detailItem = Selector('.list_content section a');
const getWindowLocation = ClientFunction(() => document.body.scrollTop);
let random = Math.floor(Math.random()*10); await t.expect(newsList.exists).eql(true, 'should display news list');
await t.expect(newsList.count).gt(5,'news more than 5 ');//需要新闻列表页大于5条新闻
let a = detailItem.nth(random);
await t.click(a);//进入任意一条详情页
await t.debug();
await t.eval(() => {
document.body.scrollTop =$('.box-title')[0].offsetTop;//滚动到推荐
}); await t.expect(getWindowLocation()).gt(0,'should be scroll');//保证页面滚动
await t.expect(Selector('#pageletArticleContent').exists).eql(true, 'should display news and it is open.toutiao ');//文章是open下的文章 });

测试做的工作是打开open.toutiao.com,期望新闻列表页存在,期望多于5条新闻,随机点开一条新闻,文章滚动到“精彩推荐区域”,保证页面已经滚动,保证文章内容存在,且不是广告页。

具体的工作已经写在注释就不多说了。

测试效果

执行命令,自动打开浏览器。输入网址:

我们可以通过await debug来进行调试,点击上图的step可以每步进行调试。

运行成功如图

如果点击到广告页,搜索不到新闻内容就会报错,我们也可以很容易的debug,如图:

我们可以看到哪一步出错,报什么错,来进行业务代码的快速debug,也可以配合插件进行log上报。

屏幕快照功能

  await t
.click('#change-avatar')
.setFilesToUpload('#upload-input', 'img/portrait.jpg')
.click('#submit')
.takeScreenshot();

点击文件上传,上传文件,点击提交,然后拍一下照,保存。可以在命令行里加-s来指定文件位置。就不展示了。

注意

  • testcafe不提供浏览器环境,所以如果我们需要什么浏览器就自行下载。只需要在命令行修改浏览器名称。比如 testcafe safari index.js。
  • testcafe不支持function spy。
  • testcafe支持异步,不需要为lazyload的dom特殊处理。可以直接选择。
  • 在eval里不支持await
  • ...具体参见其官网好了。

端到端测试工具--testcafe的更多相关文章

  1. PC和移动端浏览器同步测试工具Browsersync使用介绍

    在移动端网页开发中,总是因为不方便调试,导致各种问题不容易被发现.但是现在有了Browsersync,一切都解决了. 不熟悉的同学可以看看Browsersync的官方网站Browsersync中文网. ...

  2. Monkey (压力测试)-移动端手机压力测试工具 monkey以及monkeyrunner

    4. Monkey (压力测试) 这个是Android提供的系统工具.它向系统发送伪随机的用户事件流(如按键输入.触摸屏输入.手势输入等),实现对正在开发的应用程序进行压力测试.Monkey测试是一种 ...

  3. Cypress与TestCafe WebUI端到端测试框架简介

    近期接触了Cypress和TestCafe,两个测试框架都基于Node.js,都不再使用Selenium+WebDriver,而且开箱即用,非常轻量级,就冲着不再使用WebDriver这一点,极大地勾 ...

  4. Socket测试工具(客户端、服务端)

    Socket是什么? SOCKET用于在两个基于TCP/IP协议的应用程序之间相互通信.最早出现在UNIX系统中,是UNIX系统主要的信息传递方式.在WINDOWS系统中,SOCKET称为WINSOC ...

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

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

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

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

  7. 移动web开发之移动端真机测试

    × 目录 [1]特性 [2]安装 [3]设置[4]移动端 前面的话 chrome的开发者工具可以很好地做好模拟工作,但毕竟模拟和实际还是有差别的.所以,真机测试是一定要做的,如何高效地进行真机测试呢. ...

  8. 脚手架vue-cli系列五:基于Nightwatch的端到端测试环境

    不同公司和组织之间的测试效率迥异.在这个富交互和响应式处理随处可见的时代,很多组织都使用敏捷的方式来开发应用,因此测试自动化也成为软件项目的必备部分.测试自动化意味着使用软件工具来反复运行项目中的测试 ...

  9. 前端端对端测试:基于PhantomJS的CasperJS

    简介 Casperjs是一个基于PhantomJS和SlimerJS的前端端对端测试框架,当然你也可以使用它完成网络爬虫功能,它的特点的通过简单的脚本模拟浏览器行为, 主要有casper.tester ...

随机推荐

  1. 数据结构 哈希表(Hash Table)_哈希概述

    哈希表支持一种最有效的检索方法:散列. 从根来上说,一个哈希表包含一个数组,通过特殊的索引值(键)来访问数组中的元素. 哈希表的主要思想是通过一个哈希函数,在所有可能的键与槽位之间建立一张映射表.哈希 ...

  2. 使用Botkit和Rasa NLU构建智能聊天机器人

    欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 我们每天都会听到关于有能力涉及旅游.社交.法律​​.支持.销售等领域的新型机器人推出的新闻.根据我最后一次查阅的数据,单单Facebook Me ...

  3. TemplateMethod-模板模式

    什么是Template Method模式 在父类中定义处理流程的框架,在子类中实现具体处理的模式就称为Template Mehtod模式.模板模式的关键是:子类可以置换掉父类的可变部分,但是子类却不可 ...

  4. Linux指令--chmod

    chmod命令用于改变linux系统文件或目录的访问权限.用它控制文件或目录的访问权限.该命令有两种用法.一种是包含字母和操作符表达式的文字设定法:另一种是包含数字的数字设定法. Linux系统中的每 ...

  5. 邪恶的PLS

    今天碰到一个存储过程编译错误,提示PLS-00103错误,关于这个错误网上能搜到一大把,原因很多,我碰到的错误提示如下: Compilation errors for PROCEDURE ETL.PR ...

  6. mybatis 中文文档

    http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html

  7. python爬虫之小说爬取

    废话不多说,直接进入正题. 今天我要爬取的网站是起点中文网,内容是一部小说. 首先是引入库 from urllib.request import urlopen from bs4 import Bea ...

  8. 【ASP.NET Core】MVC中自定义视图的查找位置

    .NET Core 的内容处处可见,刷爆全球各大社区,所以,老周相信各位大伙伴已经看得不少了,故而,老周不考虑一个个知识点地去写,那样会成为年度最大的屁话,何况官方文档也很详尽.老周主要扯一下大伙伴们 ...

  9. Ubantu搭建FTP

    1.安装并启动 FTP 服务 安装 VSFTPD 使用 apt-get 安装 vsftpd kylin@kylin:~$ sudo apt-get install vsftpd -y [sudo] p ...

  10. appium GUI介绍

    Appium作为APP端的自动化测试工具,具有很多的有点,今天主要介绍一下它的UI界面,包含其中的一些参数等.主要说的是windows下的APPIUM GUI. 先看一眼它的界面(版本为1.4.16. ...