测试基础

虚树苔藓
• 阅读 2023

使用mocha测试

概念

测试类型

  • 单元测试: 以软件的单元为单位,对软件进行测试

    • 避免依赖性问题,例如不存取数据库、不访问网络,而是使用工具虚拟出运行环境
    • 步骤

      • 准备所有的测试条件
      • 调用(触发)所要测试的函数
      • 验证运行结果是否正确
      • 还原被修改的记录
  • 集成测试: 多个部分在一起测试, 例如数据库连接模块测试
  • 功能测试: 自动测试整个程序的某个功能,使用Selenium工具自动打开浏览器测试
  • 端对端测试: 全链路测试,从开始端到结束端的测试

    • 确保整个系统能正常运行,各个子系统依赖关系正常,数据在子系统、模块之间传递正常
  • 冒烟测试: 正式的全面测试开始之前,对主要功能进行的预测试

    • 目的: 确认主要功能十分满足需要, 软件是否能运行

开发模式

  • TDD(Test-Driven Development): 测试驱动开发

    • 步骤

      • 写一个测试
      • 写出最小代码,使其能通过测试
      • 优化代码
      • 重复前三步
    • 提供4个方法

      • suite()
      • test()
      • setup()
      • teardown()
  • BDD(Behavior-Driven Development): 行为驱动开发

    • 概念:针对行为写测试, 不应针对代码实现细节
    • 提供6个方法

      • describle()
      • it()
      • before()
      • after()
      • beforeEach()
      • afterEach()

命令

mocha

  • 默认会运行test目录下第一层的脚本
  • --recursive会运行当前目录以及子目录的脚本

通配符

  • shell通配符

    mocha spec/{one,two}.js
    mocha test/unit/*.js
    mocha test/{,**/}*.{js,jsx}
  • node通配符

    mocha 'test/**/*.@(js|jsx)'

命令行

  • --help, -h: 查看所有命令参数
  • --reporter, -R: 指定测试报告格式,官方详细介绍

    • spec: 默认格式
    • tap: ``
    • mochawesome: 以HTML格式报告
    • 生成不同格式的报告

      • 生成markdown格式的报告

        mocha --recursive -R markdown > spec.md
      • 生成html格式的报告

        mocha -recursive -R doc > spec.html
  • --growl, -G: 测试结果在桌面显示
  • --watch, -w: 监视指定测试脚本,有变化会自动运行mocha
  • --bail, -b: 指定只要有一个测试没有通过,就停止执行后面的测试用例
  • --grep, -g: 用于搜索测试用例的名称
  • --invert, -i: 只运行不符合条件的测试脚本, 必须与--grep配合使用

    mocha --grep "1 加 1" --invert

mocha.opts

  • 命令行

    mocha --recursive --reporter tap --growl
  • 配置项mocha.opts文件

    --reporter tap
    --recursive
    --growl
  • 指定测试目录mocha.opts文件

    server-tests
    --recursive

语言转换

  • ES6

    • 依赖包安装

      npm i babel-polyfill --save
      npm i @babel/core @babel/preset-env -D
    • .babelrc配置

      {
        "presets": [
          ["@babel/env", {
            "modules": false,
            "useBuiltIns": "usage",
            "corejs": 2,
            "shippedProposals": true
          }]
        ]
      }
    • 指定转换器

      • ES6

        npx mocha --compilers js:@babel/core/register
  • CoffeScript

    npx mocha --compilers coffee:coffee-script/register

延时测试

  • 延时执行done

    it('延时1000毫秒', function(done) {
        setTimeout(() => {
            done()
        }, 1e3)
    })
    it('请求之后执行', function() {
        request
            .get('https://api.github.com')
            .end(function(err, res) {
                expect(res).to.be.an('object')
                done()
            })
    })
  • 返回一个promise

    it('请求之后执行', function() {
        return request
            .get('https://api.github.com')
            .end(function(err, res) {
                expect(res).to.be.an('object')
            })
    })
  • 通过命令行

    • mocha -t 1000: 设置超时时间未1000毫秒
    • mocha -s 1000: 设置测试延时1000毫秒执行

钩子函数

  • before
  • after
  • beforeEach
  • afterEach

用例管理

  • only只运行某个用例

在浏览器中查看用例运行结果

  • 执行命令: mocha init test
  • 新建add.js

    function add(x, y) {
      return x + y;
    }
  • add.jschai.js加入index.html

    <script>
      mocha.setup('bdd');
    </script>
    <script src="add.js"></script>
    <script src="http://chaijs.com/chai.js"></script>
    <script src="tests.js"></script>
    <script>
      mocha.run();
    </script>
    
  • 新建tests.js

    var expect = chai.expect;
    
    describe('加法函数的测试', function() {
      it('1 加 1 应该等于 2', function() {
        expect(add(1, 1)).to.be.equal(2);
      });
    
      it('任何数加0等于自身', function() {
        expect(add(1, 0)).to.be.equal(1);
        expect(add(0, 0)).to.be.equal(0);
      });
    });

参考资料

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
java单元测试
Java单元测试1.概述java单元测试是最小的功能单元测试代码,单元测试就是针对单个java方法的测试。java程序的最小功能单元是方法。main方法进行测试的缺点:只能有一个main()方法,不能把测试代码分离出来无法打印出测试结果和期望结果.例如:expected:
Stella981 Stella981
3年前
Demo002 IDEA中Junit单元测试的使用(初级篇)
推荐JUnit视频教程:JUnit—Java单元测试必备工具(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.imooc.com%2Flearn%2F356)。1.基本理论1.1单元测试单元测试又称模块测试,属于白盒测试,是最小单位的测试。模
Stella981 Stella981
3年前
Mock工具之Mockito实战
在实际项目中写单元测试的过程中我们会发现需要测试的类有很多依赖,这些依赖项又会有依赖,导致在单元测试代码里几乎无法完成构建,尤其是当依赖项尚未构建完成时会导致单元测试无法进行。为了解决这类问题我们引入了Mock的概念,简单的说就是模拟这些需要构建的类或者资源,提供给需要测试的对象使用。业内的Mock工具有很多,也已经很成熟了,这里我们将直接使用最流行的Moc
可莉 可莉
3年前
19.unittest原理
单元测试单元测试(unittesting)是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。unittest运行原理
Wesley13 Wesley13
3年前
C# 单元测试(入门)
注:本文示例环境VS2017XUnit2.2.0单元测试框架xunit.runner.visualstudio2.2.0测试运行工具Moq4.7.10模拟框架什么是单元测试?确保软件应用程序按作者的期望执行操作,其中最好的一种方法是拥有自动化测试套件。可以对软件应用程序进行各种不同的测试,
Stella981 Stella981
3年前
Android Studio单元测试
啄木鸟软件测试培训网:www.3testing.com今天简单介绍下Android Studio使用代码进行单元测试。  AndroidStudio默认是支持JUnit和Android单元测试的,市面上大多主要讲解的是JUnit的单元测试,而没有侧重的讲解AndroidStudio针对Android的测试,今天主要介绍A
Stella981 Stella981
3年前
JUnit
一、会用Spring测试套件的好处在开发基于Spring的应用时,如果你还直接使用Junit进行单元测试,那你就错过了Spring为我们所提供的饕餮大餐了。使用Junit直接进行单元测试有以下四大不足:1)导致多次Spring容器初始化问题根据JUnit测试方法的调用流程,每执行一个测试方法都会创建一个测试用例的实例并调用setUp()方法。由于
Wesley13 Wesley13
3年前
C#单元测试
什么叫单元测试(unittesting)?是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软
Stella981 Stella981
3年前
OAuth 2.0 单元测试解决方案
为什么需要单元测试单元测试拥有保证代码质量、尽早发现软件Bug、简化调试过程、促进变化并简化集成、使流程更灵活等优势。单元测试是针对代码单元的独立测试,核心是“独立”,优势来源也是这种独立性,而所面临的不足也正是因为其独立性:既然是“独立”,就难以测试与其他代码和依赖环境的相互关系。单元测试与系统测试是互补而非代替关系。单元测试的优
新支点小星 新支点小星
1年前
CNAS中兴新支点——软件测试中的非功能测试包含哪些测试内容
软件测试中的非功能测试是指对软件产品在功能之外的其他特性进行测试,包括性能测试、可靠性测试、安全性测试、易用性测试、可维护性测试等。1、性能测试:性能测试是对软件产品在特定条件下的性能进行测试和评估。包括负载测试、强度测试、数据库容量测试等。通过模拟不同的
新支点小玉 新支点小玉
1年前
软件测试中的非功能测试包括什么?
软件测试中的非功能测试是指对软件产品在功能之外的其他特性进行测试,包括性能测试、可靠性测试、安全性测试、易用性测试、可维护性测试等。1、性能测试:性能测试是对软件产品在特定条件下的性能进行测试和评估。包括负载测试、强度测试、数据库容量测试等。通过模拟不同的