在测试用例类中重写__init__方法
在unittest框架的基础使用中,创建测试用例类的时候,其中的每条测试用例都为其编写了一个方法
但其实每个方法下面的运行逻辑都是一样的:即准备数据、传参获取实际结果、实际结果与预期结果比对
这样,当测试用例较多时,工作就会陷入大量重复和冗余,下面通过重写测试用例类所继承的unittest.TestCase类中的__init__方法,来实现只需定义一次测试用例方法
下面例子中使用的功能函数依旧为前一篇中的login_check,重写__init__方法时,通过super使其保持有父类中的功能:
#创建测试用例类
import unittest
from exercise02_unittest基本使用.funcdemo_unittest import login_check
class LoginTestCase(unittest.TestCase):
def __init__(self, methodName, case_data):
super().__init__(methodName)
self.case_data = case_data
def test_login(self):
expected = self.case_data["expected"]
data = self.case_data["data"]
res = login_check(*data)
self.assertEqual(expected, res)
然后在创建测试套件并加载用例时,通过for循环结合“一条一条加载用例”的方式实现参数的传入:
#创建测试套件并加载用例
import unittest
from exercise03_重写测试用例类__init__方法.testcases_unittest import LoginTestCase
cases = [{"expected": {"code": 0, "msg": "登陆成功"}, "data": ["python", "123456"]},
{"expected": {"code": 1, "msg": "账号或密码不正确"}, "data": ["python", "12345"]},
{"expected": {"code": 1, "msg": "账号或密码不正确"}, "data": ["pyth", "123456"]},
{"expected": {"code": 1, "msg": "所有参数不能为空"}, "data": [None, "123456"]},
{"expected": {"code": 1, "msg": "所有参数不能为空"}, "data": ["python", None]},
]
suite = unittest.TestSuite()
for case_data in cases:
case = LoginTestCase("test_login", case_data)
suite.addTest(case)
runner = unittest.TextTestRunner()
runner.run(suite)