测试用例的那一回事

本文探讨了测试用例在前端开发中的重要性,并介绍了敏捷开发模式中的BDD方法。文章详细讲解了如何使用Mocha编写测试用例,并演示了如何结合ShouldJS和Nock进行断言及HTTP响应模拟。

测试用例的那一回事

本文作者:imweb coverguo 原文出处:imweb社区 未经同意,禁止转载

前言

最近,团队对测试用例十分的注重,因此,下面是我对测试用例的一些解析。

首先,我们需要知道:为什么需要测试用例?

理由很简单,就是为了在测试用例的辅助下,编写出高质量,可维护代码。


问题

正如因为地震的爆发,才会有地震仪的诞生。 测试用例的诞生,也必然有其需要解决的问题:

当我们在开发,我们往往会有以下的问题:

需求和开发脱节

当一份需求来了, 开发人员往往不能百分百的理解需求的内容(抛弃产品自己变更需求的可能性。。),这往往会让开发人员开发出的功能会有跟需求有所差别,这会带来额外的工作量

开发和测试脱节

什么是开发和测试脱节,说的是,当开发人员按照自己的想法开发完了一个需求。然后测试人员也按照自己的想法去测试这个需求,然后由于双方的分歧,导致测试认为开发有bug,开发认为测试是sb.

那么如何解决上面的问题呢?

答案就是 选择一种软件敏捷开发模式


敏捷开发模式

目前比较流行的开发模式有两种: TDD 和 BDD

TDD (Test Driven Development 测试驱动开发)
  • 测试来驱动开发
  • 其重点偏向开发
  • 测试用例是在约束开发者,使开发者的目标明确,设计出满足需求的系统
BDD (Behaviour Driven Development 行为驱动开发)
  • 基于TDD发展,保持测试先行的理念
  • 其重点偏向设计
  • 在测试代码中用一种自然通用语言的方式把系统的行为描述出来
  • 将系统的设计和测试用例结合起来,进而驱动开发工作

两种方式各有其特点,我们通常选择的是BDD的方式


测试工具

为了,方便我们编写测试用例,我们需要使用一些可靠工具,以下是我认为比较好的前端测试用例工具。

Mocha 摩卡

Mocha(发音"摩卡")诞生于2011年,是现在最流行的JavaScript测试框架之一,在浏览器和Node环境都可以使用。 通过Mocha, 我们可以安装基于mocha的规范,轻松的编写测试用例和管理测试用例。

Mocha测试脚本如何编写

对于mocha, 一个测试用例必定包含 describe和 it,来实现一个测试用例的具体模版 describe块 称为"测试套件"(test suite),表示一组相关的测试。 it块 称为"测试用例"(test case),表示一个单独的测试,是测试的最小单位

以上的是同步情况的测试用例

若我们需要测试异步代码时,只需要在每个it的回调中,增加done的参数,具体如下 

Should JS 苏德 断言库

所有的测试用例(it块)都应该含有断言。 断言功能由断言库来实现,Mocha本身不带断言库,所以必须先引入断言库。 因此,我们在上面的测试用例添加断言:如下 

Nock 诺克 HTTP响应mock工具

有时,我们可能需要模拟HTTP请求的响应数据 是否有工具可以简化呢?那就是Nock啦, Nock使用起来十分方便,API都十分简单名利


 var should = require('should');
 var nock = require('nock');
 var teacheModel = require('teacherModel');
 //定义模拟的http请求的响应结果
 var cgiData = {
        retcode:0,
        result: {
           num: 10,
        }
    };
    //测试方法updateTeacherData
    describe('测试Module.updateTeacherData()', function() {  
        it('请求接口,能够正确处理数据', function() {
          //这里定义,get请求XXX.qq.com域名下的/cgi-bin/teacher/get_about的数据能返回200
          //并且返回结果是cgiData
            nock('http://xxx.qq.com')
                .get('/cgi-bin/teacher/get_about')
                .reply(200, cgiData);

            testModule.getData({}, req, function(data){
                data.retcode.should.equal(0, 'teacher数据拿到, 不能正确处理');
            })
        });

    });

通过nock,直接模拟请求结果,这样我们就可以不考虑cgi的状态,而专注于model的逻辑测试

Istanbul 伊斯坦布尔 代码覆盖率检验工具

测试用例写好了, 怎么验证是否写得好? Istanbul是可以给出测试用例的代码覆盖率检验的工具

如下面我们使用istanbul,可以看到我们的util.test.js的覆盖率情况 

然后,如果想知道具体覆盖率情况,可以通过打开生成的报文去查看,如下面可以知道,哪些部分测试用例没有覆盖到 

mochawesome

万事俱备?NO NO NO! 我们还需要更好的视觉体验 通过使用mochawesome工具,在当命令行运行 mocha 是增加 “ --reporter mochawesome ”参数,将测试用例运行情况转成更为直观的测试报文,如下:

补充

懂得如何编写测试用例,但仍需要有一套比较明确的编写规范和,编写教程,才能让项目的测试用例生生不息,持之以恒带来功效、

虽然给定引用中未提及回片测试用例的编写方法,但可以结合通用测试用例编写方法来推测。 ### 正交试验法 正交试验法能有效地、合理地减少测试用例和工时,节约测试成本。对于回片测试,如果涉及多个因素和水平,可使用该方法。例如对于一个四因素且每个因素均为三水平的试验,全面试验需要进行 $3×3×3×3 = 81$ 次,而用正交试验法选择 $L9(3^4)$ 正交表,$n = 4×(3 - 1) + 1 = 9$ 次试验就可以覆盖 [^2]。 ```python # 简单示意正交试验法选择测试用例 import itertools # 假设四个因素,每个因素有三个水平 factors = [['A1', 'A2', 'A3'], ['B1', 'B2', 'B3'], ['C1', 'C2', 'C3'], ['D1', 'D2', 'D3']] # 全面试验组合 all_combinations = list(itertools.product(*factors)) print(f"全面试验组合数: {len(all_combinations)}") # 这里只是简单示意,并非真正的正交表选择 # 实际中需要根据正交表规则选择合适组合 orthogonal_combinations = all_combinations[:9] print(f"正交试验选择组合数: {len(orthogonal_combinations)}") ``` ### 等价类划分法 等价类法是将输入域分为多个等价类,同一等价类的输入产生相同的输出,测试时从等价类中选取一个代表作为测试用例。若该用例通过,即认为整个等价类测试通过,以此用较少的测试用例实现高效的功能覆盖,减少冗余用例,提高测试效率。在回片测试中,可根据回片的各种属性(如尺寸、材质等)划分等价类。例如回片尺寸有一个有效范围,小于或大于这个范围的可划分为无效等价类,测试时从不同等价类中选取代表进行测试 [^4]。 ```python # 简单示意等价类划分选择测试用例 # 假设回片尺寸有效范围是 1 - 10 valid_range = (1, 10) # 划分等价类 invalid_less_than = [0] invalid_greater_than = [11] valid = [5] # 从有效等价类选一个代表 test_cases = invalid_less_than + invalid_greater_than + valid print(f"等价类划分选择的测试用例: {test_cases}") ``` ### 测试用例粒度选择 测试用例可以写得简单或复杂,但过于简单可能失去意义,过于复杂会带来效率和维护成本问题。在编写回片测试用例时,要合理选择粒度。比如对于回片外观检查,简单的测试用例可以只指出要检查外观是否有损坏;复杂的则可详细列出检查的部位、检查方法等 [^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值