Unittest 参数化

参数化简介

前面我们编写unittest用例是一条用例一个方法def test_xxx(),当用例数量少的时候这样写无所谓,但是当用例数量达到上百条甚至上千条时,这样写起来就非常费劲了,而且也不便于后期的用例维护。那么当测试用例有固定的参数和断言结果时其实我们可以使用参数化来管理用例,这样一个方法循环遍历用例参数,这样实现就非常便捷。

nose-parameterized

unittest单元测试框架本身不支持参数化,我们可以使用nose-parameterized这个这个扩展模块来实现。安装命令如下:

1
pip install nose-parameterized

实践案例

安装完成之后,我们可以使用参数化了,详见如下代码展示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import unittest
from nose_parameterized import parameterized

params=([
(1,1,2),
(2,2,4),
(3,5,8),
])

class TestAdd(unittest.TestCase):
@parameterized.expand(params)
def test_add(self,a,b,c):
print("a=%s,b=%s,c=%s" %(a,b,c))
self.assertEqual(a + b, c)

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

执行完成之后结果入下

1
2
3
4
5
6
7
8
9
10
11
Ran 3 tests in 0.002s

OK

a=1,b=1,c=2

a=2,b=2,c=4

a=3,b=5,c=8

Process finished with exit code 0

这样我们就只需要写一个方法,循环遍历参数来提高效率。

参考资料