Mock

作者: cxp_c8bc | 来源:发表于2020-03-18 17:30 被阅读0次

    这里介绍2种mock方法 ,1.使用别人开发好的工具 2. 利用flask建立mock api

    1. moco

    mock除了用在单元测试过程中,还有一个用途,当前端开发在开发页面的时候,需要服务端提供API接口

    此时服务端没开发完成,或者说没搭建测试环境,这个时候前端开发会自己mock一个api服务端,自己给自己提供调用接口的返回数据

    mock-server用途就是开发在开发的过程中,需要依赖一部分的接口,但是对方没有提供或者环境等等情况

    moco环境搭建

    1.moco是开源的java软件,所以需要预先安装好java环境,我的是JDK1.8

    2. 下载moco程序 ,可从github 上下载 https://github.com/dreamhead/moco

    下载后放在本地目录,并在同一目录新建一个json文件

    image
    [ 
        {
        "response" : {
                "text" : "Hello World! "
            } 
        } 
    ]
    
    

    打开cmd ,cd到该目录下 ,运行

    java -jar moco-runner-0.12.0-standalone.jar http -p 6666 -c test.json

    image

    这时候打开火狐浏览器或IE浏览器等 (Chrome浏览器打不开),即可看到返回数据。修改返回数据不用重启服务,修改json文件后,保存即可

    image

    官方说明

    image

    2. Flask 搭建接口

    新建一个flask project

    image image

    用最简单的flask 实现 mock 。而且还可以自定义。

    @app.route('/') 表示 请求的路径,/ 表示域名下,一般可以改成和对应的接口一样的路径 例如获取人员接口为

    http://127.0.0.1/api/back/user?page=1&offset=0&limit=10

    域名为本机地址或服务器地址 ,路径改为@app.route('/api/back/user')

    预计返回的格式为

    { "total": 1, "offset": 0,
    "data": [ { "id": 1323, 
                "name": "张三", 
                "company": "Alibaba", 
                "tel": 18689985541, 
                "created_at": 1575388800,
                "num": 36.8, 
                "type": 0, 
                "sn": "IM04WY00301320180403",
                "user_no": 13568,
                "id_num": 4304126559996511,
                "face_image": "https://pics3.baidu.com/feed/8644ebf81a4c510f83dd9ce53ab56b2bd52aa522.jpeg" }]
    }
    

    那么mock 数据设定如下:

    from flask import Flask,jsonify
    import random
    
    app = Flask(__name__)
    
    token=random.randint(1,100)
    headers={
        "Content-Type": "application/json; charset=utf-8" ,
        "token":  token
    }
    rsp={
      "total": 1,
      "offset": 0,
      "data": [
        {
          "id": 1323,
          "name": "张三",
          "company": "腾讯",
          "tel": 18689985541,
          "created_at": 1575388800,
          "num": 36.8,
          "type": 0,
          "sn": "IM04WY00301320180403",
          "user_no": 13568,
          "id_num": 4304126559996511,
          "face_image": "https://pics3.baidu.com/feed/8644ebf81a4c510f83dd9ce53ab56b2bd52aa522.jpeg"
        },
        {
          "id": 1323,
          "name": "李思",
          "company": "阿里",
          "tel": 18689985541,
          "created_at": 1575388800,
          "num": 36.8,
          "type": 0,
          "sn": "IM04WY00301320180403",
          "user_no": 13568,
          "id_num": 4304126559996511,
          "face_image": "https://pics3.baidu.com/feed/8644ebf81a4c510f83dd9ce53ab56b2bd52aa522.jpeg"
        }
      ]
    }
    
    @app.route('/api/back/user')
    def getUsers():
        return jsonify(rsp),200,headers
    # 如果返回的是一个元组,元组的类型是(response, status, headers).
    # status值会覆盖默认的200状态码,headers可以是一个列表或者字典,作为额外的消息头。
    #jsonify 把字典转换成json
    
    if __name__ == '__main__':
        app.run()
    
    

    如果返回的是一个元组,元组的类型是(response, status, headers)

    image.png

    返回的信息可以根据需要,用函数做相关的操作 ,例如生成一段随机的字符串,或者按照某些规则生成的数据,只需要按照python的函数那样写,即可生成自定义的mock数据 。headers ,状态码 ,返回的json串都很容易实现。前端请求的时候只需要改一下域名即可使用。

    相关文章

      网友评论

          本文标题:Mock

          本文链接:https://www.haomeiwen.com/subject/oqscyhtx.html