parameterized之unittest参数化

unittest没有想testNG那么方便,可以进行参数化,但是有一个第三方库可是实现参数化

安装 pip install parameterized

该库可以在python的所有单元测试框架中使用

具体的使用方法及使用方法可参考官网

https://pypi.python.org/pypi/parameterized

 

使用方法

对于unittest测试框架,需要使用 @parameterized.expand装饰器

对于nose和py.test测试框架,需要使用 @parameterized装饰器

装饰器可以接受的类型( a list or iterable of tuples or param(...), or a callable which returns a list or iterable

from parameterized import parameterized, param

 

# A list of tuples

@parameterized([

    (2, 3, 5),

    (3, 5, 8),

])

def test_add(a, b, expected):

    assert_equal(a + b, expected)

 

# A list of params

@parameterized([

    param("10", 10),

    param("10", 16, base=16),

])

def test_int(str_val, expected, base=10):

    assert_equal(int(str_val, base=base), expected)

 

# An iterable of params

@parameterized(

    param.explicit(*json.loads(line))

    for line in open("testcases.jsons")

)

def test_from_json_file(...):

    ...

 

# A callable which returns a list of tuples

def load_test_cases():

    return [

        ("test1", ),

        ("test2", ),

    ]

@parameterized(load_test_cases)

def test_from_function(name):

 

@parameterized.expand 可以根据运行情况,自动生成测试方法名,如

 

import unittest

from parameterized import parameterized

 

class AddTestCase(unittest.TestCase):

    @parameterized.expand([

        ("2 and 3", 2, 3, 5),

        ("3 and 5", 2, 3, 5),

    ])

    def test_add(self, _, a, b, expected):

        assert_equal(a + b, expected)

运行之后的测试方法名为test_add_0_2_and_3,他将参数中的第一个值添加在测试方法名的后面

测试方法名也可以通过testcase_func_name 参数来自定义,它的值是一个函数,该函数接受三个参数:testcase_funcparam_num, and params, testcase_func表示测试的函数,param_num表示参数列表的索引,params是参数值

import unittest
from parameterized import parameterized
 
def custom_name_func(testcase_func, param_num, param):
    return "%s_%s" %(
        testcase_func.__name__,
        parameterized.to_safe_name("_".join(str(x) for x in param.args)),
    )
 
class AddTestCase(unittest.TestCase):
    @parameterized.expand([
        (2, 3, 5),
        (3, 5, 8),
    ], testcase_func_name=custom_name_func)
    def test_add(self, a, b, expected):
        assert_equal(a + b, expected)

运行之后测试方法名为test_add_1_2_3

posted @ 2017-08-24 11:47  hellowcf  阅读(1908)  评论(0编辑  收藏  举报