接口和协议组成 [开源分享] 异常接口参数组合-Excel 维护用例

测试小书童 · 2018年06月09日 · 最后由 测试小书童 回复于 2018年06月12日 · 3163 次阅读

说明

  • 开源地址
  • python 3.4+ window7
  • excel 管理用例
  • 邮件发送测试结果
  • 基于 pict 模糊测试

用法

不使用模糊测试

  • 首先电脑需要配置 python3.4 的环境
  • 点击 lib 目录下的 install.bat 安装依赖文件
  • 维护 Report 目录下的 api.xlsx 写入接口测试
  • 点击 Runner.py 的 start.bat,或者 python runner.py
  • 查看测试报告 Report 目录下的 report.xlsx

使用模糊测试

  • 点击 lib 目录下的 install_pict.bat 进行依赖文件安装,会自动关闭 explorer
  • 打开 Setting 目录下的 Config.ini 设置为 True
  • 模糊测试现在只支持对每个参数的错误,删除的场景,可以自行扩展
  • 模糊测试暂不支持检查点

报告

  • 维护用例
  • 正常测试
  • 启用 pict 后的异常场景

其他

需要登录

  • 接口测试需要登录返回的一系列数据,如果 token,session 等等,打开 BaseRunner.py
  • 经过 setUpClass 传递给各个接口
def get_session():
    req = requests.session()
    url = ""
    data = {}
    req.post(url, data, verify=False)
    return req


class ParametrizedTestCase(unittest.TestCase):


    def __init__(self, methodName='runTest', param=None):
        super(ParametrizedTestCase, self).__init__(methodName)

    @classmethod
    def setUpClass(cls):
        cls.rq = get_session() # 登录后的session
        pass
  • 在 TestCases 目录中的 Api.py 中接受登录后的 session,并传给 BaseReq.py 中进行修改

class ApiTest(ParametrizedTestCase):
    def test_api(self):
        ls = read_excel(Element.API_FILE)
        # self.req 就是得到了登录后的信息session 
        Config().config_req(ls,self.req)

    @classmethod
    def setUpClass(cls):
        super(ApiTest, cls).setUpClass()


pict 生成的异常场景

  • 在 BaseParams.py 中的__param_format 函数生成异常场景,根据需要自行扩展
def __param_format(self, key):
       param_type = {
           str: lambda: str(uuid.uuid1()),
           list: lambda: [],
           dict: lambda: {}
       }
       return param_type[type(key)]()

检查点说明

  • 在启用 pict 的模糊测试后,不会对检查点进行检查
  • 现在支持的检查点为:
    • {"id":11,"code":2222} 检查点可以设置为:{"code":22}
    • {"code":1,data:[{"id": "123"}, {}]} 检查点可以设置为:{"id":123}
  • 如果检查点不够用可以自行扩展,打开 BaseReq.py 中的__check 函数:
def __check(self, hope, res):
    hope = json.loads(hope)
    fact = json.loads(res)
    for items in fact:
        if type(fact[items]) == list:
            for item in fact[items]:
                for k in hope:
                    if item.get(k, "") == hope[k]:
                        return "通过"
        if type(fact[items]) == dict:
            for k in hope:
                if fact[items].get(k, "") == hope[k]:
                    return "通过"
        for k in hope:
            if fact.get(k, "") == hope[k]:
                return "通过"
    return "失败"
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 2 条回复 时间 点赞

新人弱弱问下模糊测试一般是解决了日常测试的什么问题或痛点?

回复

对每个接口参数的异常场景检测 如:

  • 超长数据
  • 必填校验
  • 特殊字符
  • sql 注入
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册