zoukankan      html  css  js  c++  java
  • Python单元测试框架之unittest参数化(paramunittest)

    一、unittest参数化介绍

    • 参数化测试用于当需要使用多组不同的测试数据测试同一个方法的时候
    • paramunittest是unittest实现参数化的一个专门的模块,可以传入多组参数,自动生成多个用例
    • 实现unittest参数化的方式有多种,如ddt、paramunittest等

    二、paramunittest模块安装

    pip install paramunittest

    三、基础示例

    3.1 示例1--元祖数据实现参数化

    import unittest
    import paramunittest
    
    # 参数化两组元祖类型数据
    @paramunittest.parametrized(
        (8,5),
        (34,20)
    )
    
    class UTestDemo(paramunittest.ParametrizedTestCase):
        def setParameters(self, numa,numb): # 把参数化数据传递到测试类中
            self.numa=numa
            self.numb=numb
    
        def test_num(self):
            print('numa=%d,numb=%d'%(self.numa,self.numb))
            self.assertGreater(self.numa, self.numb)
    
    if __name__ == '__main__':
        unittest.main()

    执行以上代码,测试结果如下

    3.2  示例2-- 列表数据实现参数化

    import unittest
    import paramunittest
    
    # 参数化两组列表类型数据
    @paramunittest.parametrized(
        [8,5],
        [34,20]
    )
    
    class UTestDemo(paramunittest.ParametrizedTestCase):
        def setParameters(self, numa,numb): # 把参数化数据传递到测试类中
            self.numa=numa
            self.numb=numb
    
        def test_num(self):
            print('numa=%d,numb=%d'%(self.numa,self.numb))
            self.assertGreater(self.numa, self.numb)
    
    if __name__ == '__main__':
        unittest.main()

    测试结果如下

    3.3  示例3-- 字典数据实现参数化

    import unittest
    import paramunittest
    
    # 参数化两组字典类型数据
    @paramunittest.parametrized(
        {'numa':8,'numb':5},
        {'numa':34,'numb':20}
    )
    
    class UTestDemo(paramunittest.ParametrizedTestCase):
        def setParameters(self, numa,numb): # 把参数化数据传递到测试类中
            self.numa=numa
            self.numb=numb
    
        def test_num(self):
            print('numa=%d,numb=%d'%(self.numa,self.numb))
            self.assertGreater(self.numa, self.numb)
    
    if __name__ == '__main__':
        unittest.main()

    执行结果

     通过以上示例可以看出,元祖、字典、列表等都可以实现参数化,参数还可通过函数或者数据对象传入

    ***3.4  示例4-- 参数通过函数或者数据对象传入

    #参数通过数据对象传入进去
    testdata=[{'numa':8,'numb':5},{'numa':34,'numb':20}]
    
    @paramunittest.parametrized(
        *testdata
    )
    # 参数通过函数传入进去
    def get_data():
        return [{'numa':8,'numb':5},{'numa':34,'numb':20}]
    
    @paramunittest.parametrized(
        *get_data()
    )
  • 相关阅读:
    关于lockkeyword
    关于多层for循环迭代的效率优化问题
    Android 面试精华题目总结
    Linux基础回想(1)——Linux系统概述
    linux源代码编译安装OpenCV
    校赛热身 Problem C. Sometimes Naive (状压dp)
    校赛热身 Problem C. Sometimes Naive (状压dp)
    校赛热身 Problem B. Matrix Fast Power
    校赛热身 Problem B. Matrix Fast Power
    集合的划分(递推)
  • 原文地址:https://www.cnblogs.com/lvhuayan/p/15257096.html
Copyright © 2011-2022 走看看