zoukankan      html  css  js  c++  java
  • python单元测试unittest中添加测试集合报错:TypeError: addTest() missing 1 required positional argument: 'test'

     这个错误,每次都犯这种低级错误,我怎么这么菜!

    # 创建测试集合
    suite=unittest.TestSuite # 报错就是因为这个没有加括号
    正确代码:
    suite=unittest.TestSuite()

    再贴一下unittest框架做单元测试的步骤吧

    一、要测试的功能:比如说注册,函数名register,写在lianxi文件夹里面哦
    users = [{'user': 'python', 'password': '123456'}]


    def register(username, password1, password2):
    # 注册功能
    for user in users: # 遍历出所有账号,判断账号是否存在
    if username == user['user']:
    # 账号存在
    return {"code": 0, "msg": "该账户已存在"}
    else:
    if password1 != password2:
    # 两次密码不一致
    return {"code": 0, "msg": "两次密码不一致"}
    else:
    # 账号不存在 密码重复,判断账号密码长度是否在 6-18位之间
    if 6 <= len(username) >= 6 and 6 <= len(password1) <= 18:
    # 注册账号
    users.append({'user': username, 'password': password2})
    return {"code": 1, "msg": "注册成功"}
    else:
    # 账号密码长度不对,注册失败
    return {"code": 0, "msg": "账号和密码必须在6-18位之间"}

    二、写测试用例:testcase.py
    import unittest
    #从lianxi文件夹里导入register模块里的register函数
    from lianxi.register import register

    class RegisterTestCase(unittest.TestCase):

    def __init__(self, methodName, excpeted, data):
    self.excepted = excpeted
    self.data = data
    super().__init__(methodName)

    def test_register(self):
    res = register(*self.data)
    try:
    self.assertEqual(self.excepted, res)
    except AssertionError as e:
    print('该用例测试未通过')
    raise e
    else:
    print('该用例测试通过')


    if __name__ == '__main__':
    unittest.main()

    测试数据写在excel表 cases.xlsx 中,以后用代码去读取表中数据,请看下面的(三)


    三、写读取excel表的类:read_excel.py

    """
    封装一个读取用例的excel类

    # 实现读取用例数据

    # 实现写入数据的功能
    """
    import openpyxl


    class Case:
    # 这个类用来存储用例
    def __init__(self, attrs):
    """
    初始化用例
    :param attrs: zip类型-->[(key,value),(key1,value1)....]
    """
    for item in attrs:
    setattr(self, item[0], item[1])


    class ReadExcel(object):
    """
    读取excel数据
    """
    def __init__(self, file_name, sheet_name):
    """
    这个是用例初始化读取对象的
    :param file_name: 文件名字 --> str
    :param sheet_name: 表单名字 --> str
    """
    self.file_name = file_name
    # 打开工作簿
    self.wb = openpyxl.load_workbook(file_name)
    # 选择表单
    self.sheet = self.wb[sheet_name]

    def __del__(self):
    # 特殊的方法,在对象销毁的之后执行
    # 关闭文件
    self.wb.close()


    def read_data_obj(self, list1):
    # list1 参数为一个列表,传入的是指定读取数据的列,比如[1,2,3]
    # 每一行[1,3,5]列的数据,读取出来就作为一条测试用例,放在对象的属性中
    # 所有的用例对象放在列表中并且进行返回
    max_r = self.sheet.max_row
    # 定义一个空列表,用来存放所有用例
    cases = []
    titles = [] # 定义一个空列表,用来存放表头
    # 遍历出所有的行
    for row in range(1, max_r + 1):
    # 判断是否是第一行
    if row != 1:
    case_data = [] # 定义一个空列表,用来存放该行的数据
    for column in list1:
    info = self.sheet.cell(row, column).value
    case_data.append(info)
    # 将该条数据和表头进行打包组合,
    case = list(zip(titles, case_data))
    # 将一条用例存入一个对象中(每一列对应对象的一个属性)
    # case_obj=Case()
    # for i in case:
    # setattr(case_obj,i[0],i[1]) # 这一部分已经写到类定义的地方去了
    # 不用上面注释的,直接像下面这样传入就可以了
    case_obj = Case(case)
    cases.append(case_obj)
    else:
    for column in list1:
    title = self.sheet.cell(row, column).value
    titles.append(title)
    return cases # 所有的用例对象放在列表中并且进行返回
    四、创建测试集合并执行: suite.py
    import unittest
    from lianxi.testcase import RegisterTestCase
    from HTMLTestRunnerNew import HTMLTestRunner #测试报告模块
    from lianxi.read_excel import ReadExcel

    # 创建测试集合
    suite=unittest.TestSuite() # 报错就是因为这个没有加括号
    # 读取excel中的数据
    r = ReadExcel('cases.xlsx','Sheet1')
    cases = r.r_data_obj_new([2,3])
    # print(cases)
    # 把每条用例遍历出来
    for case in cases:
    # suite.addTest(RegisterTestCase('test_register'))
    suite.addTest(RegisterTestCase("test_register", eval(case.excepted),eval(case.data)))

    # 执行测试集合
    with open('old_reports.html', 'wb') as f:
    runner = HTMLTestRunner(
    stream=f,
    verbosity=2,
    title='old_report',
    description='旧的测试报告',
    tester='Layla_zyh')
    runner.run(suite)
  • 相关阅读:
    【Unity】第10章 Mecanim动画系统
    【Unity】9.3 粒子系统生成器详解
    只用一招,让你Maven依赖下载速度快如闪电
    原来实现项目多环境打包部署是如此的简单
    手写Maven的archetype项目脚手架
    通俗易懂详解Java代理及代码实战
    谈谈分布式版本管理工具Git
    拥抱了IDEA却发现再也回不去Eclipse...
    解决Redisson出现Failed to instantiate [org.redisson.api.RedissonClient]: Factory method 'create' threw exception; nested exception is java.lang.ArrayIndexOutOfBoundsException: 0的问题
    解决org.apache.shiro.session.UnknownSessionException: There is no session with id的问题
  • 原文地址:https://www.cnblogs.com/hongyufei/p/12622533.html
Copyright © 2011-2022 走看看