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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM