zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    CodeForces-786B Legacy (线段树优化建图,单源最短路)
    CodeForces-528C Data Center Drama
    CodeForces-723E One-Way Reform
    2-SAT入门
    POJ-3683 Priest John's Busiest Day (2-SAT 求任意可行方案)
    转载: 8天学通MongoDB——第一天 基础入门
    C# 非EF注册登录与EF注册登录
    Asp.Net入门(三)
    非EF分页
    sql语句错误大集合
  • 原文地址:https://www.cnblogs.com/hellowcf/p/7422278.html
Copyright © 2011-2022 走看看