特征值mock工具

需求背景:

风控决策引擎中,根据用户的特征值来得出策略结果,用户特征值部分的产生较为负责,需要一系列数据符合一些规则才会产生需要的特征值,所以测试策略结果时,如果能跳过特征值产生而插入特定数据这一步,直接mock,分层测试,会让测试策略更有效率

最终效果图
“feature-mock工具”

服务端代码分析

  • part 1 : 使用flask框架产生接口路由部分
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from flask import Flask,jsonify,render_template,url_for,request
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def index():
#render_template渲染模版
return render_template("index.html")
@app.route("/changefeatureall",methods=["POST"])
def changefeatureall():
commitid = request.form.get('commitid')
wht_msg.generate(commitid)
if mydomain:
res = {"code": "0", "data":"成功" }
wht_msg.update_sql_all(commitid)
return jsonify(res)
  • part 2 :数据库连接部分
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
def connect(sql,flag,db="haixin"):
config = {
'host':'xxx',
'port':xxx,
'user':'xxx',
'password':'xxx',
'db':db,
'charset':'utf8mb4',
'cursorclass':pymysql.cursors.DictCursor,
}
connection = pymysql.connect(**config)
try:
with connection.cursor() as cursor:
# 执行sql语句,插入记录
cursor.execute(sql);
if flag ==1:
result = cursor.fetchone()
connection.commit()
else:
result = cursor.fetchall()
print len(result)
# 没有设置默认自动提交,需要主动提交,以保存所执行的语句
connection.commit()
return result
finally:
connection.close()
  • part 3 : 数据库逻辑处理部分

    1
    2
    3
    4
    5
    6
    #具体逻辑较复杂,展示最简单的插入与 u
    def insert_sql(domain,content):
    sql = "insert into mk_domain_value(domain_name,content)VALUES('%s','%s')" %(domain,content)
    print sql
    result = connect(sql,1)
    print result
  • part 4 :前端展示部分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#展示数据前后端交互部分
$(document).ready(function() {
$.ajax({
type: 'post',
url: "/changefeatureall",
dataType: 'json',
data: {
'mydomain': 'http://xxxxxxx',
'commitid': $('#commitid').val(),
},
error: function () {
alert('请求失败,原因可能是:' +'输入参数错误或请求失败' +'!');
},
success: function (data) {
alert("yes");
}
});
  • part 5:功能描述
1
2
3
4
1.初始化:根据策略,绘制参数输入框,输入参数后,请求制定参数对应的数据,产生初次mock数据
2.初次mock链接会替换系统中的feature请求链接
3.此时修改feature结果,就能动态修改mock数据,见截图
4.替换的请求链接可以还原