1、官网:https://pypi.org/project/parameterized/
2、parameterized:可以使用任何Python测试框架进行参数化测试。比如nose的参数化测试,py.test的参数化测试,unittest的参数化测试。
3、安装parameterized:pip install parameterized
4、安装nose:pip install nose
5、安装pytest:pip install pytest
6、官网例子:
导入相应的包:
from nose.tools import assert_equal
from parameterized import parameterized, parameterized_class
import unittest
import math
6.1、@parameterized 装饰符接受一个由tuples或param(...)组成的列表等:
@parameterized([
(2, 2, 4),
(2, 3, 8),
(1, 9, 1),
(0, 9, 0),
])
#参数化3个参数base,exponent,expected,4组参数,传入具体数值。
def test_pow(base, exponent, expected):#测试幂函数,传入3个参数值
assert_equal(math.pow(base, exponent), expected)
6.2、@parameterized.expand 装饰符接受一个由tuples或param(...)组成的列表等,unittest仅支持这种@parameterized.expand 的用法,@parameterized.expand 可以用来在无法使用测试生成器的情况下生成测试方法(例如,当测试类是unittest.TestCase的子类时:
class TestMathUnitTest(unittest.TestCase):#测试math的测试用例
@parameterized.expand([
("negative", -1.5, -2.0),
("integer", 1, 1.0),
("large fraction", 1.6, 1),
])#参数化3个参数,name, input, expected,3组参数。传入测试方法名字和具体数值
def test_floor(self, name, input, expected):##测试floor函数,传入3个参数值
assert_equal(math.floor(input), expected)
'''
floor函数:Return the floor of x as an Integral.This is the largest integer <= x.
'''
6.3、加法和乘法测试:
@parameterized_class(('a', 'b', 'expected_sum', 'expected_product'), [
(1, 2, 3, 2),
(5, 5, 10, 25),
])#参数化4个参数,'a', 'b', 'expected_sum', 'expected_product',2组参数。传入变量和具体数值
class TestMathClass(unittest.TestCase):
def test_add(self):#加法测试
assert_equal(self.a + self.b, self.expected_sum)
def test_multiply(self):#乘法测试
assert_equal(self.a * self.b, self.expected_product)
6.4、减法测试:
@parameterized_class([
{ "a": 3, "expected": 2 },#3-1=2
{ "b": 5, "expected": -4 },#1-5=-4
])#参数化2个参数,2组参数。传入变量和具体数值
class TestMathClassDict(unittest.TestCase):
a = 1
b = 1
def test_subtract(self):#减法测试
assert_equal(self.a - self.b, self.expected)
7、参数化参数
7.1、nose的参数化测试:nosetests -v test_math.py
7.2、py.test的参数化测试:py.test -v test_math.py()
7.3、unittest的参数化测试:python -m unittest -v test_math.py
备注: 因为unittest不支持测试装饰符,所以只有用@parameterized.expand创建的测试才会执行。
8、兼容性: