热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

运用HeadlessChrome举行自动化测试

本文翻译自:AutomatedtestingwithHeadlessChrome作者:EricBidelman(Google工程师)译者:justjavac假如您想运用Headle

本文翻译自:Automated testing with Headless Chrome
作者:Eric Bidelman (Google 工程师)
译者:justjavac

假如您想运用 Headless Chrome 举行自动测试,请不要再张望了!本文将教你怎样运用 Karma 作为 test runner ,并合营 Mocha + Chai 举行测试。

这些是什么呢?

Karma?Mocha?Chai?Headless Chrome?oh my!

  • Karma 是一种测试套件,能够与任何盛行的测试框架 (比方 Jasmine, Mocha, QUnit) 一同运用。

  • Chai 是一个断言库,能够与 Node.js 或许浏览器一同运用。我们须要后者。

  • Headless Chrome 是一种在 headless 环境运转的 Chrome 浏览器,这类运转体式格局没有 UI。运用 Headless Chrome(而不是直接在 Node 中测试)的优点之一是您的 Javascript 测试将在与您网站用户雷同的环境中实行。Headless Chrome 为您供应真正的浏览器环境,而无需运转完全版本的 Chrome,如许也避免了奋发的内存开支。

装置

装置依靠库

装置 Karma 已相干的插件,能够运用 yarn:

yarn add --dev karma karma-chrome-launcher karma-mocha karma-chai
yarn add --dev mocha chai

或许运用 npm

npm i --save-dev karma karma-chrome-launcher karma-mocha karma-chai
npm i --save-dev mocha chai

在这篇文章中,我运用 Mocha 和 Chai,假如你不喜好这两个库,你能够挑选你喜好的任何一个库,只需它能在浏览器中运转就能够。

设置 Karma

建立 karma.config.js 文件,ChromeHeadless 启动器会运用这个文件。

karma.conf.js

module.exports = function(config) {
config.set({
frameworks: ['mocha', 'chai'],
files: ['test/**/*.js'],
reporters: ['progress'],
port: 9876, // karma web server port
colors: true,
logLevel: config.LOG_INFO,
browsers: ['ChromeHeadless'],
autoWatch: false,
// singleRun: false, // Karma captures browsers, runs the tests and exits
concurrency: Infinity
})
}

注重: 运转 ./node_modules/karma/bin/ init karma.conf.js 以天生 Karma 设置文件。

写一个测试

新建文件 /test/test.js.

/test/test.js

describe('Array', () => {
describe('#indexOf()', () => {
it('should return -1 when the value is not present', () => {
assert.equal(-1, [1,2,3].indexOf(4));
});
});
});

运转你的测试

package.json 中增加一个 test 剧本,经由过程前面我们的设置文件运转 Karma。

package.json

"scripts": {
"test": "karma start --single-run --browsers ChromeHeadless karma.conf.js"
}

当您运转测试(yarn test)时,Headless Chrome 会启动并将效果输出到终端:

《运用 Headless Chrome 举行自动化测试》

建立自定义的 Headless Chrome 启动器

ChromeHeadless 启动器非常重要,由于它为我们供应了开箱即用的 Headless Chrome 测试。它包括合适您的
Chrome flag,并启动 Chrome 的长途调试功用,监听 9222 端口。

偶然您能够愿望将自定义的 flag 传递给 Chrome 或变动启动器运用的长途调试端口。我们建立一个customLaunchers 来扩大 ChromeHeadless 启动器的默许字段:

karma.conf.js

module.exports = function(config) {
...
config.set({
browsers: ['Chrome', 'ChromeHeadless', 'MyHeadlessChrome'],
customLaunchers: {
MyHeadlessChrome: {
base: 'ChromeHeadless',
flags: ['--disable-translate', '--disable-extensions', '--remote-debugging-port=9223']
}
},
}
};

在 Travis CI 上运转测试

设置 Karma 并在 Headless Chrome 中运转测试虽然不非常简朴。不过在 Travis 中做延续集成只须要几行代码!

To run your tests in Travis, use dist: trusty and install the Chrome stable addon:

要在 Travis 中运转测试,运用 dist: trusty 并装置 Chrome stable 插件:

.travis.yml

language: node_js
node_js:
- "7"
dist: trusty # needs Ubuntu Trusty
sudo: false # no need for virtualization.
addons:
chrome: stable # have Travis install chrome stable.
cache:
yarn: true
directories:
- node_modules
install:
- yarn
script:
- yarn test

: 这个堆栈(example repo)有可供参考的代码。


推荐阅读
  • 这篇“Webpack是怎么工作的”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大 ... [详细]
  • node.jsrequire和ES6导入导出的区别原 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • 如何用JNI技术调用Java接口以及提高Java性能的详解
    本文介绍了如何使用JNI技术调用Java接口,并详细解析了如何通过JNI技术提高Java的性能。同时还讨论了JNI调用Java的private方法、Java开发中使用JNI技术的情况以及使用Java的JNI技术调用C++时的运行效率问题。文章还介绍了JNIEnv类型的使用方法,包括创建Java对象、调用Java对象的方法、获取Java对象的属性等操作。 ... [详细]
  • 本文概述了JNI的原理以及常用方法。JNI提供了一种Java字节码调用C/C++的解决方案,但引用类型不能直接在Native层使用,需要进行类型转化。多维数组(包括二维数组)都是引用类型,需要使用jobjectArray类型来存取其值。此外,由于Java支持函数重载,根据函数名无法找到对应的JNI函数,因此介绍了JNI函数签名信息的解决方案。 ... [详细]
  • 本文讨论了将HashRouter改为Router后,页面全部变为空白页且没有报错的问题。作者提到了在实际部署中需要在服务端进行配置以避免刷新404的问题,并分享了route/index.js中hash模式的配置。文章还提到了在vueJs项目中遇到过类似的问题。 ... [详细]
  • 前段时间做一个项目,需求是对每个视频添加预览图,这个问题最终选择方案是:用canvas.toDataYRL();来做转换获取视频的一个截图,添加到页面中,达到自动添加预览图的目的。 ... [详细]
  • 前言:原本纠结于Web模板,选了Handlebars。后来发现页面都是弱逻辑的,不支持复杂逻辑表达式。几乎要放弃之际,想起了Javascript中ev ... [详细]
  • 前言:原本纠结于Web 模板,选了Handlebars。后来发现页面都是弱逻辑的,不支持复杂逻辑表达式。几乎要放弃之际,想起了Javascript中eval函数。虽然eval函 ... [详细]
  • Node.js详细安装及环境配置
    1、下载安装根据自己电脑系统及位数选择,我这里选择windows64位.msi格式安装包(官网:https:odejs.orgzh-cndownload).msi和.zip格式区别 ... [详细]
author-avatar
纯洁的老宁同志
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有