重写ddt的mk_test_name方法

一. 测试用例名字的问题

我们使用ddt做测试,得到的测试报告中,测试用例的名字默认以_01, _02, _03...递增的形式结尾,这时候我希望测试用例名能够以_api_name结尾,比如我是注册模块,希望看到的形式是test_send_requests_01_register...

这时候需要怎么办呢?

二. 方法重写

这个方法是从 python ddt 重写 看到的,ddt.mk_test_name重写前的方法为

# Add zeros before index to keep order
    index = "{0:0{1}}".format(index + 1, index_len)
    if not is_trivial(value):
        return "{0}_{1}".format(name, index)
    try:
        value = str(value)
    except UnicodeEncodeError:
        # fallback for python2
        value = value.encode('ascii', 'backslashreplace')
    test_name = "{0}_{1}_{2}".format(name, index, value)
    return re.sub(r'\W|^(?=\d)', '_', test_name)

重写后的方法为

# Add zeros before index to keep order
    index = "{0:0{1}}".format(index + 1, index_len)
    if not is_trivial(value):
        if type(value) is dict and "api_name" in value.keys():
            value = value["api_name"]
        else:
            return "{0}_{1}".format(name, index)
    try:
        value = str(value)
    except UnicodeEncodeError:
        # fallback for python2
        value = value.encode('ascii', 'backslashreplace')
    test_name = "{0}_{1}_{2}".format(name, index, value)
    return re.sub(r'\W|^(?=\d)', '_', test_name)

三. 是否改动源码

这种方法不知道是否可以不改动源码,我对装饰器的了解少之又少。所以,直接在ddt的mk_test_name方法下注释了源码,粘贴了重新后的方法。但又隐隐觉得直接修改源码,恐怕不妥,这个问题尚待解决

四. 运行效果

参考文章

http://www.cnblogs.com/za0909/p/9129745.html

猜你喜欢

转载自www.cnblogs.com/cnhkzyy/p/9219403.html
ddt