新建mock

新建mock接口,菜单路径为数据服务->HTTP MOCK->添加MOCK
图片 字段说明:

【基本信息】接口名称:要mock的即说简要说明。
【基本信息】业务线:一级分类。
【基本信息】模块:二级分类。
【基本信息】TagKey:Tag分类(纯英文),mock调用时TagKey不同的话返回的响应可不同。
【MOCK接口信息】请求方法:请求method, POST/GET/DELETE/PUT等。
【MOCK接口信息】服务:服务配置的http服务。
【MOCK接口信息】接口URL:要mock的接口url。
【MOCK接口信息】PARAM/HEADER/BODY:参数,请求头和请求体,若同服务同tag下url相同,会判断这些信息。
【MOCK响应信息】状态码:返回的状态码,200/404/302等。
【MOCK响应信息】状态原因:返回的状态原因,OK/NOT FOUND等。
【MOCK响应信息】响应体数据类型:返回的数据类型,HTML/XML/JSON等。
【MOCK响应信息】响应体数据编码:返回的数据编码,UTF8/GBK等。
【MOCK响应信息】响应体内容:返回的内容。
【MOCK响应信息】SetCookie:设置返回的cookie。
【MOCK响应信息】SetHeader:设置返回的header。
高级模式:进入高级模式,可以编写python代码来动态返回。

1、普通匹配模式:
【MOCK接口信息】中选择请求方式、服务、输入实际URL。
例如输入URL:/getuser,那么无论参数是什么,只要url是/getuser 都将返回此MOCK信息的响应内容。
图片

2、最大匹配模式:
【MOCK接口信息】中选择请求方式、服务、输入实际URL,并且可以输入PARAM、HEADER和BODY。
举例,如下图: 图片 图片 例如URL都是/getuser,假设MOCK_HTTP_2的PARAM为id=1,MOCK_HTTP_3的PARAM是id=2,请求进来时,如果id=1将返回MOCK_HTTP_1信息,如果id=2将返回MOCK_HTTP_2信息。

3、正则匹配模式:
【MOCK接口信息】中选择请求方式、服务、输入URL的正则表达式。
比如/recommend/100000,假设100000是变量,可以将url写为 ^/recommend/\d*$ (必须^/开头)
图片

4、高级模式:
勾选高级模式后,可以对请求的参数等进行校验和处理,并根据用户请求信息的不同,返回不同的响应。

相关变量:

  1. # 传入的变量,大家可以调用,做逻辑判断,返回等使用
  2. "reqMethod":request.method, # 实际请求的method,GET POST PUT DELTE 等等
  3. "reqUrl":reqUrl, # 事情请求的接口url
  4. "reqParam":reqParam, # 请求行中的参数字符串 k=1&m=2
  5. "reqBody": reqBody, # 请求体内容
  6. "reqHeader": processedReqHeader, # 请求header,key都是大写
  7. "GET": request.GET, # GET的参数dict
  8. "POST": request.POST, # POST的参数dict
  9. # 以下为要赋值的字段
  10. # 是否使用代码中的 resp相关的数据,不使用就使用默认的,只有为True的时候,赋值的resp相关的数据才会生效,如果isResp为False,
  11. # 或者为True但是没有对resp*相关的参数进行重新赋值,那么resp*相关的值取MOCK响应信息中的值
  12. "isResp": False,
  13. "respStatusCode":respStatusCode, #返回的状态码,默认 200
  14. "respStatusReason":respStatusReason, #返回的reason,默认 OK
  15. "respContentType":respContentType, #返回的数据类型,默认None
  16. "respCharset":respCharset, #返回的字符集,默认None
  17. "respContent":respContent, #返回的响应体
  18. "respCookie":respCookie, # json string 或者 ""空字符串
  19. "respHeader":respHeader, # json string 或者 ""空字符串


默认引入的包

  1. # 字符串处理相关的库
  2. import json,re,jsonpath,hashlib,ast
  3. from urllib import parse
  4. from functools import reduce
  5. from bs4 import BeautifulSoup
  6. # 时间处理相关的库
  7. import datetime,time,calendar
  8. # 数学处理
  9. import math,cmath,decimal
  10. #web请求相关
  11. import requests
  12. # 异常处理
  13. import traceback
  14. # 数据库相关
  15. import pymysql,redis
  16. from kafka import KafkaProducer
  17. from kafka import KafkaConsumer
  18. from kafka.errors import KafkaError

示例:
假设MOCK接口/getuser,高级模式代码如下:
图片 代码以及注释如下:

  1. isResp = True # 使用高级模式中的resp*相关的内容作为返回结果返回。
  2. #默认返回的dict,最终要转换为json字符串
  3. default_dict = {"code":10000, "msg":"ok", "body":[{"id":1,"username":"nobody"}]}
  4. id = GET.get("id","") # 获取请求参数中的id
  5. if id == "100001":
  6. #如果id是100001
  7. default_dict["body"][0]["id"] = 100001 # 设置返回的用户id是100001
  8. default_dict["body"][0]["username"] = "张三" # 设置返回的用户username是张三
  9. respContent = json.dumps(default_dict) # 将返回信息转为json
  10. elif id == "100002":
  11. # 如果id是100002,跟100001处理逻辑一致
  12. default_dict["body"][0]["id"] = 100002
  13. default_dict["body"][0]["username"] = "李四"
  14. respContent = json.dumps(default_dict)
  15. else:
  16. # 如果是其他的id,返回404 NOT FOUND.
  17. default_dict = {"code":10001, "msg":"No user found!", "body":[]}
  18. respStatusCode = 404
  19. respStatusReason = "NOT FOUND"
  20. respContent = json.dumps(default_dict)