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)) |