欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Mock接口数据 = mock服务 + iptable配置

程序员文章站 2022-07-04 17:51:47
一、mock接口数据应用场景: 1、测试接口A,A接口代码中调用其他服务的B接口,由于开发排期、测试环境不通等原因,依赖接口不可用 2、测试异常情况,依赖接口B返回的数据格式不对、返回None、超时等,A接口的错误处理是否合理 二、 搭建mock服务 (python3.6 搭建,index.py), ......

一、mock接口数据应用场景:

  1、测试接口a,a接口代码中调用其他服务的b接口,由于开发排期、测试环境不通等原因,依赖接口不可用

  2、测试异常情况,依赖接口b返回的数据格式不对、返回none、超时等,a接口的错误处理是否合理

二、 搭建mock服务 (python3.6 搭建,index.py),详细的flask使用,请另行百度。

  1、代码示例

# -*- coding: utf-8 -*-
from flask import flask,render_template,request
import json,sys,flask
sys.path.append("..")

app = flask(__name__)
# get方法 1
@app.route('/mockinterface/get_msg/<para>',methods=['get'])
def get_mes(para):
if para:
return {"result":"succ"}
else:
return {"result":"fail"}

# get方法 2
@app.route('/mockinterface/testget',methods=['get'])
def testget():
para1 = flask.request.args.get('para1')
para2 = flask.request.args.get('para2')
para3 = flask.request.args.get('para3')
result = {
"para1":para1,
"para2":para2,
"para3":para3
}
return result

# 设置用户的【用户等级】
@app.route('/mockinterface/set_userinfo_level',methods=['post'])
def set_userinfo_level():
try:
uid = str(flask.request.values.get('uid'))
        level = int(flask.request.values.get('level'))
except exception as e:
datas = json.loads(flask.request.get_data())
uid = str(datas['uid'])
level = int(datas['level'])

result = preadmin_op().set_yh_evel(uid,level)  # 实际业务方法,可根据实际需求如何改
return(str(result))

if __name__ == '__main__':
app.run(host='0.0.0.0',port=5000,debug=true)
 

  2、启动mock服务 

  注:mock部署的服务器,须与开发代码所在的服务器 网络互通。mock部署的位置信息用于以下iptable配置。

 

三、iptable配置 (在开发代码部署的机器上,root权限操作)

  1、查看iptables配置:iptables -t nat -l --line-number 
  2、代码在a机器上,代码里需要访问192.169.4.17:80(依赖方),测试时候依赖方的接口没有准备好,就可以mock这个接口,让代码请求依赖方时,转到自己mock的服务上(192.169.4.18:8099),也方便构造各种场景
  iptables -t nat -a output -d 192.169.4.17 -p tcp --dport 80 -j dnat --to 192.169.4.18:8099
  3、参数含义:-t 表名 -a 增加规则名 -d 发往目的地ip -p 协议 -d端口号 -j 跳转目标 --to 目标ip:端口号
  4、测试完后,需要删除a机器上的这条转发规则。行号可根据第一步种查出
  iptables -t nat -d output 行号