- 背景

1、由于最近需要做一些和第三方对接的功能测试,部分第三方的返回结果无法模拟或者模拟效率低,导致部分场景无法测试。
2、所在部门前后端分离,但 web 进度常年领先后端,而 web 开发自己又懒得写 UT。导致最后经常在 SIT 缓解暴露问题,提供一个平台方便他们自己进行 UT。
3、部分自动化测试需要依赖 mock 进行,传统的 mock 数据修改和管理又不是那么集中以及友好。

- 调研

google 了一些工具,没找到什么太适合的,于是还是决定自己写个(重复造个轮子)吧。

- 整体思路

1、采用的是 python+flask,根据请求的内容进行解析结果,然后在数据库中进行数据的校验和匹配,返回预期结果。
2、mock_server 进行请求的接收和响应,mock_web 提供和 web 端交互的接口。
3、目前功能:提供增删改查、复制、excel 导入、禁用/启用等功能。

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"暂不支持该类型请求方法"})

- 又到一年入学季,同时也为自己远走他乡第十个年头 Mark 一下,不忘初心方得始终!


↙↙↙阅读原文可查看相关链接,并与作者交流