zoukankan      html  css  js  c++  java
  • python + unittest + request + parameterized 参数化遇到中文名称testcase不显示的问题

    最近使用python+unittest+request+parameterized做接口测试,然后在利用parameterized做参数化时,发现测试用例的中文名称,感觉很奇怪,于是跟踪了parameterized的源码。

    花了2小时之久,终于找到,是parameterized.expand函数中,使用了name_func对测试用例的名称进行定义。然后继续追踪发现

    在我们不传入name_func的值时,系统会使用默认的函数去赋值

            name_func = name_func or default_name_func
    

     然后跟踪到default_name_func查看,发现调用了to_safe_name方法对字符串进行格式化

    def default_name_func(func, num, p):
        base_name = func.__name__
        name_suffix = "_%s" %(num, )
        if len(p.args) > 0 and isinstance(p.args[0], string_types):
            name_suffix += "_" + parameterized.to_safe_name(p.args[0])
        return base_name + name_suffix
    

     进一步查看to_safe_name,发现to_safe_name中,格式化的pattern,过滤了中文

        def to_safe_name(cls, s):
            return str(re.sub("[^a-zA-Z0-9_]+", "_", s))
    

     所以问题找到了,是因为t_safe_name过滤了中文。

    那么怎么解决呢,我们一般最好不要修改源代码吧,所以我们可以按照default_name_func自定义一个函数,然后调用自定义的to_safe_name方法

    def to_safe_name(s):
        # 对所有非英文,数字,下划线和中文的字符都替换为"_"
        return str(re.sub("[^a-zA-Z0-9_u4e00-u9fa5]+", "_", s))
    
    def test_name_func(func, num, p):
        base_name = func.__name__
        name_suffix = "_%s" %(num, )
        if len(p.args) > 0 and isinstance(p.args[0], string_types):
            name_suffix += "_" + to_safe_name(p.args[0])
        return base_name + name_suffix

     然后parameterized.expand的参数中写上自定义的方法名:test_name_func

    class Test(unittest.TestCase):
    
    ....
        @parameterized.expand(iterator_data, test_name_func)
        def test01_xxx(self):
            ....
    

     注意:以上代码只是为了演示思想,没有经过实际验证。 

    正则表达式来源:https://blog.csdn.net/weixin_42614447/article/details/89876335

  • 相关阅读:
    spark 随意笔记
    c#读取输入字符串,从数据源中查找以该字符串开头的所有字符串(使用正则表达式)
    我的收藏链接地址
    SQL查询时,遇到用到关键词作的字段。将该字段用一对中括号括起来[]
    SQL数据类型相互转换
    Javascript获取系统当前时间
    节点类型nodeType的取值
    混合布局编程挑战
    Webstorm破解方法
    二列布局
  • 原文地址:https://www.cnblogs.com/stanmao/p/11507264.html
Copyright © 2011-2022 走看看