1. 前言
unittest参数化是指对一个unittest中的测试方法采用多组数据引入进行测试;
常用的参数化方法有ddt、paramunittes

2. 传入的参数类型
传入的参数类型可以是元组,列表,字典,对象,函数

3.实现方法
需要导入unittest,paramunittest,通过@paramunittest.parametrized装饰器传给调用者
3.1. 实现方法1:通过继承paramunittest.ParametrizedTestCase类执行案例
传入元组数据

import unittest
import paramunittest

#传入的是元组数据
@paramunittest.parametrized(
    (3,3),
    (7,4)
) 

class TestDemo(paramunittest.ParametrizedTestCase):#通过继承paramunittest.ParametrizedTestCase类执行测试案例
    def setParameters(self,numa,numb): #通过setParameters方法接收装饰器传递过来的参数
        self.numa = numa
        self.numb = numb
    def test_case(self):
        print('%s和%s两个数进行比较'%(self.numa,self.numb))
        self.assertGreater(self.numa,self.numb)

if __name__ == '__main__':
    unittest.main()

传入列表数据

import unittest
import paramunittest

#参数类型是列表
@paramunittest.parametrized(
    [3,3],
    [7,4]
)

class TestDemo(paramunittest.ParametrizedTestCase):
    def setParameters(self,numa,numb):
        self.numa = numa
        self.numb = numb
    def test_case(self):
        print('%s和%s两个数进行比较'%(self.numa,self.numb))
        self.assertGreater(self.numa,self.numb)

if __name__ == '__main__':
    unittest.main()

传入字典数据

import unittest
import paramunittest

#参数类型字典
@paramunittest.parametrized(
    {'numa' : 4,'numb' : 3},
    {'numa' : 9,'numb' : 8}
)


class TestDemo(paramunittest.ParametrizedTestCase):
    '''前面定义的是字典,那参数就跟前面字典的key保持一致'''
    def setParameters(self,numa,numb):
        self.numa = numa
        self.numb = numb
    def test_case(self):
        print('%s和%s两个数进行比较'%(self.numa,self.numb))
        self.assertGreater(self.numa,self.numb)

if __name__ == '__main__':
    unittest.main()

传入对象,注意,装饰器传递参数的时候需要在对象前加个*

import unittest
import paramunittest

#参数类型是个对象
test_data = [{'numa' : 4,'numb' : 3},{'numa' : 9,'numb' : 8}]
@paramunittest.parametrized(
    *test_data #传递对象需要加个*
)

class TestDemo(paramunittest.ParametrizedTestCase):
    def setParameters(self,numa,numb):
        self.numa = numa
        self.numb = numb
    def test_case(self):
        print('%s和%s两个数进行比较'%(self.numa,self.numb))
        self.assertGreater(self.numa,self.numb)

if __name__ == '__main__':
    unittest.main()

传入函数,注意,装饰器传递参数的时候需要在方法前加个*

import unittest
import paramunittest

#通过函数传入测试参数
def testdata():
    return [{'numa' : 4,'numb' : 3},{'numa' : 9,'numb' : 8}]

@paramunittest.parametrized(
    *testdata()
)

class TestDemo(paramunittest.ParametrizedTestCase):
    '''前面定义的是字典,那参数就跟前面字典的key保持一致'''
    def setParameters(self,numa,numb):
        self.numa = numa
        self.numb = numb
    def test_case(self):
        print('%s和%s两个数进行比较'%(self.numa,self.numb))
        self.assertGreater(self.numa,self.numb)

if __name__ == '__main__':
    unittest.main()

3.2. 实现方法2:通过继承unittest.TestCase类执行案例

import unittest
import paramunittest

#通过函数传入测试参数
def testdata():
    return [{'numa' : 4,'numb' : 3},{'numa' : 9,'numb' : 8}]

@paramunittest.parametrized(
    *testdata()
)

class TestDemo(unittest.TestCase):
    def setParameters(self,numa,numb):
        self.numa = numa
        self.numb = numb
    def test_case(self):
        print('%s和%s两个数进行比较'%(self.numa,self.numb))
        self.assertGreater(self.numa,self.numb)

if __name__ == '__main__':
    unittest.main()