unittest根据测试数据动态生成test_case


在以往的基于unittest测试框架中,测试用例是人为开发的以.py的脚本形式存在的,对应文件中的测试数据;但是在测试平台中,测试用例数据是存储在数据库中,

譬如你有10组数据,那么得到10个test case,用纯手工的方式写那么多个test_成员函数在测试平台中是不现实的,这样也就失去了平台的意义。

我们的思路是:

1.开发一个继承unittest的测试demo类(TestCase),类中有一个demo测试用例。

2.利用setattr来自动为已有的TestCase类添加成员函数。

3.为了使这个方法凑效,需要用类的static method来生成decorate类的成员函数,并使该函数返回一个test函数对象出去。

4.在某个地方注册这个添加test成员函数的调用(只需要在实际执行前就可以,可以放在模块中自动执行亦可以手动调用)

class Test(unittest.TestCase):       def setUp(self):         print("start")       def demo(self, request_data):         #测试用例demo         #一些测试步骤       @staticmethod     def getTestFunc(data):         def func(self):             self.demo(data)         return func       def tearDown(self):         print("end")     # 根据测试数据动态添加测试函数 def __generate_testcases(data_list):     for fun in dir(Test):         if 'test_case_' in fun:             delattr(Test, fun)     for data in data_list:         setattr(Test, "test_case_%s" % (data["case_name"]), Test.getTestFunc(data))