浅谈Mock测试

浅谈Mock测试一、Mock测试的定义 Mock就是在测试过程中,对于一些不容易构造/获取的对象,创建一个Mock对象来模拟对象的行为 二、Mock测试的作用 1、为什么要做Mock: 在对代码进行单元测试过程中,经常会有以下的情况发生: classA依赖classB和classC classD依赖classC和classE classB依赖…..

大家好,又见面了,我是你们的朋友全栈君。

一、Mock测试的定义


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

 

二、Mock测试的作用

1、 为什么要做Mock:

在对代码进行单元测试过程中,经常会有以下的情况发生:

 


class A 依赖 class B 和 class C

class D 依赖 class C 和 class E

class B 依赖 …

class E 依赖 …

浅谈Mock测试

1.被测对象依赖的对象构造复杂

我们想对class A进行单元测试,需要构造大量的class B、C、D等依赖对象他们的构造步骤多、耗时较长) ,这时我们可以利用mock去构造虚拟的class B、C、D 对象用于class A的测试,因为我们只是想测试class A的行为是否符合预期,我们并不需要测试依赖对象,如下图所示:

浅谈Mock测试

2.被测单元依赖的模块尚未开发完成,而被测对象需要依赖模块的返回值进行测试:

— 比如service层的代码中,包含对dao层的调用,但dao层代码尚未实现

— 比如web的前端依赖后端接口获取数据进行联调测试,但后端接口并未开发完成(主要针对前后端联调)

 

 

 

2、 Mock的好处

 

  • 团队并行工作
    团队间不需互相等待对方进度,只需约定好相互之间的数据规范(接口文档),即可使用 mock 构建出可用接口,然后尽快进行开发和自测,提前发现缺陷
  • 测试驱动开发 TDD (Test-Driven Development)
    单元测试是 TDD 实现的基石,而 TDD 经常会碰到协同模块尚未开发完成的情况,但有了 mock,当接口定义好后,测试人员就可以创建一个 Mock,把接口添加到自动化测试环境,提前创建测试。
  • 测试覆盖率
    若一个接口在不同的状态下要返回不同的值,常见做法是复现这种状态然后再去请求接口,而这种方法很可能因操作时机或方式不当导致失败,甚至污染后端存储如数据库等, 但用 mock 则不用担心
  • 隔离系统
    使用某些接口时,为避免系统数据库被污染,可以将接口调整为 Mock 模式,以保证数据库纯净。
  • 方便演示

 

 

 

 

三、Mock测试的手段

1、工具

1、使用Yapi进行Mock

YApi是去哪儿网移动架构组开发的一个开源项目,YApi的 Mock 功能可以根据用户的输入接口信息如协议、URL、接口名、请求头、请求参数、返回数据、生成 Mock 接口,这些接口会自动生成模拟数据,创建者可以自由构造需要的数据。mock模拟数据基于mock.js。

Mock.js 是一款模拟数据生成器,旨在帮助前端独立于后端进行开发,帮助编写单元测试。提供了以下模拟功能:
  • 根据数据模板生成模拟数据
  • 模拟 Ajax 请求,生成并返回模拟数据
  • 基于 HTML 模板生成模拟数据

开发在初期定义好接口规范之后,录入Yapi,这时我们就可以使用Yapi提供的“高级Mock”功能进行接口Mock,以“获取方案详情”接口为例,我们可以对接口的不同返回状态进行数据Mock,配置如下:

Normal:

模拟正常返回

 

1、 配置Yapi

浅谈Mock测试

 

 

浅谈Mock测试

2、找到Mock地址

浅谈Mock测试

 

3、使用Postman等接口工具进行模拟请求

浅谈Mock测试

 

  •  

模拟正常返回-方案不存在

1、配置Yapi

浅谈Mock测试

 

2、使用Postman等接口工具进行模拟请求

浅谈Mock测试

 

模拟服务器异常-500

 

1、配置Yapi

浅谈Mock测试

2、使用Postman等接口工具进行模拟请求

浅谈Mock测试

 

 

 

 

公司也有自己的Mock平台,操作和Yapi类似,这边就不展开陈述

2、使用RAP进行Mock

RAP是阿里团队出的一款接口管理工具,帮助开发人员有效的管理接口文档。包括阿里集团在内的三百五十多个企业都在使用RAP管理重要的接口文档。

  • Web接口管理工具,接口自动化,MOCK数据自动生成,自动化测试

  • 能够通过分析接口结构自动生成Mock数据、校验真实接口的正确性

  • 阿里产品,功能完善、结合了文档、Mock.js、可视化、Rest、接口过渡、文档修改提醒、支持本地部署

3、使用Moco进行Mock

Moco 是一个简单搭建 stub 的框架,主要用于测试和集成。

Moco本身支持API和独立运行两种方式。通过使用API,开发人员可以在JUnit、JBehave等测试测试框架里使用Moco,极大程度地降低了集成点测试的复杂度

Moco可以提供以下服务:

  • HTTP APIs

  • Socket APIs

  • REST API

这个在下面的服务端Mock中会讲到

4、工具对比

接口测试Mock工具对比

 

Yapi

Rap

Moco

方便集成 ×
Mock简便性
文档管理 × ×
开源程度
部署难度
可视化界面 ×

 

 

2、服务端Mock

服务端mock:

  • 1. 提供真正mock-http服务
  • 2. 拦截request请求,判断请求的分支(通过程序或配置文件)
  • 3. 返回response,由mock-http服务提供响应数据
  • 4. 或者forward,跳到其他服务url

浅谈Mock测试

服务端提供的Mock方式有很多种,主要分为单测级别(如easymock、jMock、Mockito、Unitils Mock、PowerMock等),接口测试级别(如Mockserver、Moco等),本次分享主要以Moco为例,讲解服务端Mock的基本使用:

Moco技术文档:https://github.com/dreamhead/moco/blob/master/moco-doc/apis.md

1、通过Moco模拟接口测试mock数据

moco的优点:

1.只需要简单的配置request、response等即可满足要求,支持http、https、socket。可以说是非常的灵活性。
2.支持在request 中设置 Headers , Cookies , StatusCode等。
3.对GET、POST、PUT、DELETE等请求方式均支持,很适合web开发。
4.无需环境配置,有java环境即可。
5.修改配置后,立刻生效。只需要维护接口,也就是契约即可。
6.对可能用到的数据格式都支持,如json、text、xml、file等。
7.还能与其他工具集成,如Junit、Maven、Gradle等。

获取Moco

 

配置Moco

  1. 配置json文件;
  2. 通过配置文件 mocoTest.json 运行Moco HTTP服务
[
  {
    "description": "mockDemo",
    "request": {
      "uri": "/demo"
    },
    "response": {
      "headers":{
        "Content-Type":"application/json;charset=UTF-8"
      },
      "text": "mocoresponse"
    }
  }
]

执行Moco

java -jar moco-runner-1.2.0-standalone.jar http -p 8888 -c mocoDemo.json

 

 

 

moco还有一个好处,就是json配置是热加载的,可以通过更改json文件进行实时的数据配置更新。

mock一个“获取方案详情”的例子

代码如下:

[
    {
        "request": {
            "uri": "/saas-design/api/design/plan/test/detail",
            "method": "get",
            "headers": {
                "content-type": "application/json;charset=UTF-8"
            }
        },
        "response": {
            "json": {
                "c": "enim dolore ut elit Ut",
                "m": "consequat elit ve",
                "d": {
                    "designId": "test",
                    "planId": "test",
                    "designName": "test",
                    "planType": "tempor irure Excepteur non",
                    "planCity": "ut occaecat commodo et ex",
                    "communityName": "amet ",
                    "coverPicId": "in",
                    "userId": "consequat id aute",
                    "area": -98167778.83367354,
                    "srcArea": 78365468.30601966,
                    "desc": "consequat in",
                    "formatModifiedTime": null,
                    "privateStatus": true,
                    "floorPlanAddress": "dolor eu",
                    "isHouse": false,
                    "isPlanOwner": false,
                    "isReplicable": false,
                    "tags": [
                        "proid"
                    ],
                    "brandPackage": {
                        "packageName": "laboris Excepteur"
                    },
                    "coverPic": "anim laboris est",
                    "modifiedTime": -46789762.621906884,
                    "privateAttributeStatus": -10654500.438538507
                }
            }
        }
    },{
        "request": {
            "uri": "/saas-design/api/design/plan/test1/detail",
            "method": "get",

            "headers": {
                "content-type": "application/json;charset=UTF-8"
            }
        },
        "response": {
            "json": {
                "c": "-1",
                "m": "amet",
                "d": "design not exist!"
            }
        }
    },{
             "request": {
                 "uri": "/saas-design/api/design/plan/test2/detail",
                 "method": "get",
                 "headers": {
                     "content-type": "application/json;charset=UTF-8"
                 }
             },
             "response": {
                 "status": 500,
                 "text":"<html>servier error</html>"
             }
         }
]

模拟正常返回-方案存在

浅谈Mock测试

 

模拟服务端错误

浅谈Mock测试

此外,moco还有很多功能,如重定向,延时,接收异步请求等,请移步技术文档进行查阅~

 

3、客户端Mock

客户端mock:

  • 1. 浏览器客户端Js-URL拦截
  • 2. 模拟数据

浅谈Mock测试

 

客户端mock常用的是axios类,使用方法与客户端mock类似,请移步技术文档:http://www.axios-js.com/zh-cn/docs/ 查看参阅

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/151398.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm ssh_云终端机安装方法

    pycharm ssh_云终端机安装方法1、主题  如何使用Pycahrm内置终端以及远程SSH工具。  2、准备工作  Pycharm版本为3.0或更高  连接SSH服务器  3、使用SSH客户端  4、开启连接  选择Tools|StartSSHSession…的主菜单命令,单击Editcredentials:  5、提供连接信息  在Sessio

    2022年8月28日
    4
  • python打开并读取csv文件_Python中读取csv文件内容方法

    python打开并读取csv文件_Python中读取csv文件内容方法原博文2015-05-1318:22−gg224@126.com85男dd123@126.com52女fgf125@126.com23女csv文件内容如上图,首先导入csv包,调用csv中的方法reader()创建一个对象,由于使用printdata打印出来的内容是集合…相关推荐2016-10-0810:00−python中有一个读写csv…

    2022年7月20日
    16
  • vs tfs使用_win10安装vs2010不兼容

    vs tfs使用_win10安装vs2010不兼容一直是用vss的,最近突然看到,原来已经流行用vsts了(版本管理等服务用tfs)。太落伍了。故决定自己在个人电脑上安装vsts。首先在MSDN上看到,tfs2008以前要装在service系统上面,我没有,也不想去装。后来看到tfs2010几乎支持所有windows系统。故决定用现有的vs2008+tfs2010搭配。            ok,vs2008已有,打补丁sp1,下

    2022年9月23日
    4
  • mac在变化mysql-rootpassword-各种解决问题的能力

    mac在变化mysql-rootpassword-各种解决问题的能力

    2022年1月15日
    165
  • 几种开源分词工具的比較

    几种开源分词工具的比較

    2021年11月16日
    42
  • mt4下载_mt4电脑下载

    mt4下载_mt4电脑下载目前,mt4软件已其特有的优势吸引了众多投资者,成为了这些年比较受欢迎的外汇交易平台。对于经常用手机进行交易的人员来说,就需要下载安卓版或者苹果版。那么分别以2个版为例,讲解一下如何下载。下面介绍第一方式:从网上下载,这个是通用方法,各个版本都可以下,例如:mt4download。cnMT4移动端优势特别多,随时随地使用,并且上面的一些功能也是其他软件没法比的。第二种方式:用googleplay下载安卓版。通过googleplay打开和浏览手机。搜索mt4软件,点击管理系统安装按钮,同意

    2022年8月15日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号