0. 背景
- 单元测试:对构成程序的每个单元进行测试。工程上的一个共识是,如果程序的每个模块都是正确的、模块与模块的连接是正确的、那么程序基本上就会是正确的。以上是抄的,我也不懂。我的理解分两块,什么是单元?可以是函数、接口、组件、事务(what?)。什么是测试?就是验证功能,给予相同的输入(可以是数据、行为),会有相同的输出。
- TDD(Test-Driven Development):测试驱动开发。现写测试,后写业务,或者并行。对写测试的开发要求较高。
- vue、react等组件化框架天生易于被测试,如element对alert组件测试的例子。理论上项目中的vue、react等组件都可以写测试,但前提是组件封装优良,模块间松耦合,对代码编写规范有要求。
- 下面要吹的是一套针对与UI测试的套件。
1. 相关工具
- 测试框架: Mocha(可以参考阮一峰的文章)
- 断言库: Chai 详情看文章介绍
- 测试工具: nightmare(git:https://github.com/segmentio/nightmare)。这是一个基于electron的自动化框架,相比起PhantomJS的语法更加简单。
2. 使用
全局安装mocha:npm install -g mocha
12345678# Linux & Mac$ env ELECTRON_MIRROR=https://npm.taobao.org/mirrors/electron/$ npm install# Windows$ set ELECTRON_MIRROR=https://npm.taobao.org/mirrors/electron/$ npm install运行一个测试
1mocha ./testDemo/demo3.useChai.fn1.test.js运行一系列测试
1mocha ./testDemo
3. nightmare的使用
|
|
4. mocha结合nightmare进行测试
|
|
5. 使用mochawesome生成测试报告
|
|
6. 其他东西
nightmare的截屏
1.screenshot([path][, clip])mocha的钩子函数
123456789101112131415before(function() {// 在本区块的所有测试用例之前执行});after(function() {// 在本区块的所有测试用例之后执行});beforeEach(function() {// 在本区块的每个测试用例之前执行});afterEach(function() {// 在本区块的每个测试用例之后执行});通过node脚本定时巡航页面,并上报测试结果
1234567891011121314151617181920212223<!-- index.js -->setInterval(() => {// 当然定时任务不会用setInterval。。。shell.exec('mocha ./testDemo/demo8.other.test.js --reporter mochawesome', function(err) {if( err ) {throw err;} else}});}, 10 * 1000);<!-- 测试脚本 -->after(async function() {// 统一上报测试结果var options = {method: 'POST',url: 'http://localhost:3000/api/test/report',body: reportObj, //reportObj对象收集图片url,错误信息等等json: true};var res = await request(options);});