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

  

posted @ 2022-04-02 15:36  MLing  阅读(138)  评论(0编辑  收藏  举报