Mock服务

1,定义:mock是在测试过程中,对于一些不容易构造/获取的对象,创建一个mock对象来模拟对象的行为

2:使用:当单元测试/接口测试中测试对象依赖其他对象,这些对象的构造复杂、耗时或者根本无法构造(未交付),而我们只测试对象内部逻辑的质量,不关心依赖对象的逻辑正确性和稳定性时,我们使用mock

3,原则:

  1. 不需要对所有的依赖对象/服务进行mock,只对那些构造步骤复杂、构造耗时较长、不稳定的依赖对象/服务进行mock。

  2. 如果做分层测试(比如分层自动化),高层的测试设计可以基于以下假设:低层的测试已保证低层对象的质量,高层对低层的依赖可以mock,无需关心所依赖的低层对象的质量。

转自:https://www.jianshu.com/p/3944c0b82f30

4,对于前端来说,mock是一个模拟数据生成器,能帮助前端独立于后端进行开发,帮助编写单元测试。mock有如下功能:

  • 根据数据模板生成模板数据

  • 模拟ajax请求,生成请求数据

  • 基于html模板生成模拟数据

5,工具:前端js端拦截mock.js,web端的mock工具apiary、swagger、alibaba-rap等,web端的mock以http请求拦截为主,进行请求的数据的返回

6,Mock.js   生成随机数据,拦截 Ajax 请求

安装和示例:

# 安装
npm install mockjs
// 使用 Mock
var Mock = require('mockjs')
var data = Mock.mock({
    // 属性 list 的值是一个数组,其中含有 1 到 10 个元素
    'list|1-10': [{
        // 属性 id 是一个自增数,起始值为 1,每次增 1
        'id|+1': 1
    }]
})
// 输出结果
console.log(JSON.stringify(data, null, 4))

7,常见的前端Mock方案分为4种:

  1. 在代码层硬编码
    比如有一个函数负责请求某个接口,获得的回返数据,并对该回返数据进行操作。那么可以通过硬编码的方式,直接定义一个数据变量在代码中,该变量保存了回返的Mock数据。这种Mock方法操作比较简单,但缺点也很明显,就是Mock更改了代码逻辑,和代码耦合性太强。而且并不能模拟真实的网络请求的过程,局限性强,覆盖面窄。

  2. 在前端JS中拦截
    典型的解决方案就是Mock.js,通过在业务代码前挂载该JS文件,就可以无痛拦截Ajax请求。这种Mock方式相较于硬编码,虽然实现了Mock与代码的部分解耦,但无法完全和业务代码解耦(因为必须挂载一个JS并进行Mock配置)。虽然提供了大量的Mock API,但是也仍然无法发出真实的网络请求,模拟真实度不够。另外这种方式还存在一些不足,因为是对XHR对象的改写,有些情况下兼容性并不好,比如IE8等低版本浏览器,还有较新的Fetch API也拦截不到。

  3. 代理软件(Fiddler、Charles)拦截
    Fiddler和Charles可以对网络请求进行拦截,将其替换为我们需要的Mock数据,这也不失为一种Mock方式。其优点主要是真实性强,但这种方式操作步骤比较繁琐,不方便统一配置,Mock成本较高。

  4. Mock-Server
    最合适的方案无外乎搭建独立的Mock-Server,开发的前期阶段,所有的接口都会指向该Mock-Server。因为可能存在跨域的情况,所以一般都需要在开发环境搭配一套接口代理做搭配。这种方案对业务代码完全不具有侵入性,并且通用性强。缺点也很明显,成本高(还需要另起一个Mock-Server服务,并对其进行管理)。

转自:https://www.jianshu.com/p/720b12b5d120  作者:可木Changer
 

猜你喜欢

转载自blog.csdn.net/qq_30422457/article/details/85843674