zoukankan      html  css  js  c++  java
  • python之ddt模式随记三,ddt模式用例标题过长解决

    背景:

      使用python+unittest+ddt+excel模式做接口测试时,ddt数据驱动时出现了一个尴尬的问题,大概就是在用ddt数据时,会驱动不同的数据去调用被装饰的函数,然后出现了标题也附带上了value。

    直接上问题图

    直接上问题原因代码:

    import ddt
    import unittest
    
    ## 数据源
    data = {
        'api1':
            [
                ['2', ['checkcode', '{
     "a":"1",
     "b":"2"
    }', '', 'fail', '{"status": 3}']],
                ['3', ['checkcode', '{
     "a":"2",
     "b":"3"
    }', '', 'fail', '{"status": 0}']],
            ],
        'api2':
            [
                ['5', ['yyy','{
     "a":"3",
     "b":"4"
    }', '', 'fail', '{"status": 2}','', '', '{"code":0}']],
                ['6', ['yyy','{
     "a":"3",
     "b":"4"
    }', '', 'fail', '{"status": 2}','', '', '{"code":0}']]
            ]
    
    }
    
    @ddt.ddt
    class Test(unittest.TestCase):
        ## 随便写一个
    
        # [
        #     ['2', ['checkcode', '{
     "a":"1",
     "b":"2"
    }', '', 'fail', '{"status": 3}']],
        #     ['3', ['checkcode', '{
     "a":"2",
     "b":"3"
    }', '', 'fail', '{"status": 0}']],
        # ]
        @ddt.data(*data['api1']) 
        def test001(self,data):
            self.assertEqual('1',data)
    
    if __name__ == '__main__':
        unittest.main()

    运行解决:

    对,没错,标题就是这么长。标题为什么会突然这么长呢?猜想可能是因为在ddt装饰的时候,@ddt.data(*data['api1']) ,取得部分的数据。加到了标题里。

    话不多说,修改一下试试看,

    import ddt
    import unittest
    
    ## 数据源
    data = {
        'api1':
            [
                ['2', ['checkcode', '{
     "a":"1",
     "b":"2"
    }', '', 'fail', '{"status": 3}']],
                ['3', ['checkcode', '{
     "a":"2",
     "b":"3"
    }', '', 'fail', '{"status": 0}']],
            ],
        'api2':
            [
                ['5', ['yyy','{
     "a":"3",
     "b":"4"
    }', '', 'fail', '{"status": 2}','', '', '{"code":0}']],
                ['6', ['yyy','{
     "a":"3",
     "b":"4"
    }', '', 'fail', '{"status": 2}','', '', '{"code":0}']]
            ]
    
    }
    
    @ddt.ddt
    class Test(unittest.TestCase):
        ## 随便写一个
    
        # [
        #     ['2', ['checkcode', '{
     "a":"1",
     "b":"2"
    }', '', 'fail', '{"status": 3}']],
        #     ['3', ['checkcode', '{
     "a":"2",
     "b":"3"
    }', '', 'fail', '{"status": 0}']],
        # ]
        @ddt.data(*data)
        def test001(self,data):
            self.assertEqual('1',data)
    
    if __name__ == '__main__':
        unittest.main()

    结果如下

    果然如此,那么就好办了,去找一下源码,发现是标题生成的时候加上了value,所以导致名称辣么长。

     最后,修改成如上图,再次运行首次代码,解决

    以为这么就完了????不可能!!!

    既然可以修改这个,那么是不是可以在后面加上用例的说明咧,说干就干!

    首先加上用例说明,这个说明加在哪里、怎么加,随自己心情哈,我这里是加到如图位置,则需要更改一下源码:

     ddt的源码修改一下,如图

    运行一下最终代码:

    import ddt
    import unittest
    
    ## 数据源
    data = {
        'api1':
            [
                ['2', ['checkcode', '{
     "a":"1",
     "b":"2"
    }', '', 'fail', '{"status": 3}','登陆成功测试']],
                ['3', ['checkcode', '{
     "a":"2",
     "b":"3"
    }', '', 'fail', '{"status": 0}','登陆失败测试']],
            ],
        'api2':
            [
                ['5', ['yyy','{
     "a":"3",
     "b":"4"
    }', '', 'fail', '{"status": 2}','', '', '{"code":0}','新增人员成功测试']],
                ['6', ['yyy','{
     "a":"3",
     "b":"4"
    }', '', 'fail', '{"status": 2}','', '', '{"code":0}','新增人员失败测试']]
            ]
    
    }
    
    @ddt.ddt
    class Test(unittest.TestCase):
        ## 随便写一个
    
        # [
        #     ['2', ['checkcode', '{
     "a":"1",
     "b":"2"
    }', '', 'fail', '{"status": 3}']],
        #     ['3', ['checkcode', '{
     "a":"2",
     "b":"3"
    }', '', 'fail', '{"status": 0}']],
        # ]
        @ddt.data(*data['api1'])
        def test001(self,data):
            self.assertEqual('1',data)
    
    if __name__ == '__main__':
        unittest.main()

    结果如下:

     ok,加上了,最后体现在报告上面,看一眼效果。

     嗯嗯,不错不错,忽略错误,标题还是可以的。总结还是挺香的

  • 相关阅读:
    appium学习【五】【转】appium实现屏幕向左滑动
    ConfigParser模块用法
    python中的join()函数的用法
    python from import与import as 的含义
    python的termcolor模块
    python标准输入,标准输出,标准错误
    lambda匿名函数
    【二代示波器教程】第13章 RTX操作系统版本二代示波器实现
    【二代示波器教程】第12章 示波器设计—DAC信号发生器的实现
    【二代示波器教程】第11章 示波器设计—功能模块划分
  • 原文地址:https://www.cnblogs.com/dflblog/p/12030569.html
Copyright © 2011-2022 走看看