1、由于最近需要做一些和第三方对接的功能测试,部分第三方的返回结果无法模拟或者模拟效率低,导致部分场景无法测试。
2、所在部门前后端分离,但 web 进度常年领先后端,而 web 开发自己又懒得写 UT。导致最后经常在 SIT 缓解暴露问题,提供一个平台方便他们自己进行 UT。
3、部分自动化测试需要依赖 mock 进行,传统的 mock 数据修改和管理又不是那么集中以及友好。
google 了一些工具,没找到什么太适合的,于是还是决定自己写个(重复造个轮子)吧。
1、采用的是 python+flask,根据请求的内容进行解析结果,然后在数据库中进行数据的校验和匹配,返回预期结果。
2、mock_server 进行请求的接收和响应,mock_web 提供和 web 端交互的接口。
3、目前功能:提供增删改查、复制、excel 导入、禁用/启用等功能。
下边直接上图和 git 地址
DEMO
部分核心代码
def checkpath(domain,varsvalue,method):
method=method.lower()
varsvalue.sort()
checksize(domain,method)#判断请求方法和模式是否匹配
if len(varsvalue) == 0:
conn = pymysql.connect(**config)
cur = conn.cursor()
cur.execute('select resparams from mock_config where status=0 and domain=%s and methods=%s', (domain, method))
resparams = cur.fetchone()
conn.close()
if resparams[0] == '':
return jsonify({"msg": "对应请求没有配置预期返回值"})
else:
return resparams[0].encode("utf-8")
else:
varsvalue1=getvar(varsvalue)#实际请求
conn = pymysql.connect(**config)
cur = conn.cursor()
cur.execute('select reqparams,resparams,methods,ischeck from mock_config where status=0 and domain=%s and methods=%s',(domain, method))
reqparams = cur.fetchall()
if reqparams == ():
return jsonify({"msg": u"请求方法和参数不匹配"})
elif reqparams[0][3]==1:
return reqparams[0][1]
else:
rdata=checkparams(reqparams,varsvalue1)
return rdata
def checkparams(reqparams,varsvalue1):
varsvalue2 = reqparams[0][0] # 数据库中的预期请求参数
if reqparams[0][2].lower()=='get' or (reqparams[0][2].lower()=='post' and varsvalue1[0] != '}' and varsvalue1[-2] != '}'):
arr = varsvalue2.split('&')
for i in range(len(arr)):
arr[i] = arr[i] + '&'
arr.sort(reverse=True)
str = ''.join(arr)[0:-1]
if str==varsvalue1:
return reqparams[0][1].encode("utf-8")
if reqparams[0][0] == '':
return jsonify({"msg": u"对应请求没有配置预期返回值"})
else:
return jsonify({"msg": u"请求方法和参数不匹配"})
elif reqparams[0][2].lower()=='post':
varsvalue1 = varsvalue1.replace("\t", "").replace("\r", "").strip()[:-1]
varsvalue2 = varsvalue2.replace("\t", "").replace("\r", "").strip()
if varsvalue1 == varsvalue2:
return reqparams[0][1].encode("utf-8")
else:
return jsonify({"msg": u"暂不支持该类型请求方法"})
1、使用前需安装依赖库。
2、20170824.xlsx 为导入模板。
3、数据库信息配置在 db.config 文件。
4、mock_config.sql 为数据库建表语句。
5、web 端配置地址在 mock/js/config.js 文件中。
1、如果使用过程中存在问题或者 bug 建议提 issue,最近 996 了可能无法第一时间回复。
2、其实写好了有一段时间了,like 通配符那有个 sql 注入的漏洞一直没时间修复。
3、还是希望能帮助到有需要的同学们,如果有更好的 idea 也欢迎提出来。
4、另虽然 mock 的话更加注重的是 mock 本身的思想已经运用场景,但是有个贴合实际场景的平台的话还是会事半功倍的。