在测试用例类中重写__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)

 

posted @ 2021-09-23 21:30  2orange  阅读(254)  评论(0编辑  收藏  举报