python之ddt模式随记三,ddt模式用例标题过长解决

Posted 我曾把春天丢了

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python之ddt模式随记三,ddt模式用例标题过长解决相关的知识,希望对你有一定的参考价值。

背景:

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

直接上问题图

 

直接上问题原因代码:

import ddt
import unittest

## 数据源
data = {
    \'api1\':
        [
            [\'2\', [\'checkcode\', \'{\\n "a":"1",\\n "b":"2"\\n}\', \'\', \'fail\', \'{"status": 3}\']],
            [\'3\', [\'checkcode\', \'{\\n "a":"2",\\n "b":"3"\\n}\', \'\', \'fail\', \'{"status": 0}\']],
        ],
    \'api2\':
        [
            [\'5\', [\'yyy\',\'{\\n "a":"3",\\n "b":"4"\\n}\', \'\', \'fail\', \'{"status": 2}\',\'\', \'\', \'{"code":0}\']],
            [\'6\', [\'yyy\',\'{\\n "a":"3",\\n "b":"4"\\n}\', \'\', \'fail\', \'{"status": 2}\',\'\', \'\', \'{"code":0}\']]
        ]

}

@ddt.ddt
class Test(unittest.TestCase):
    ## 随便写一个

    # [
    #     [\'2\', [\'checkcode\', \'{\\n "a":"1",\\n "b":"2"\\n}\', \'\', \'fail\', \'{"status": 3}\']],
    #     [\'3\', [\'checkcode\', \'{\\n "a":"2",\\n "b":"3"\\n}\', \'\', \'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\', \'{\\n "a":"1",\\n "b":"2"\\n}\', \'\', \'fail\', \'{"status": 3}\']],
            [\'3\', [\'checkcode\', \'{\\n "a":"2",\\n "b":"3"\\n}\', \'\', \'fail\', \'{"status": 0}\']],
        ],
    \'api2\':
        [
            [\'5\', [\'yyy\',\'{\\n "a":"3",\\n "b":"4"\\n}\', \'\', \'fail\', \'{"status": 2}\',\'\', \'\', \'{"code":0}\']],
            [\'6\', [\'yyy\',\'{\\n "a":"3",\\n "b":"4"\\n}\', \'\', \'fail\', \'{"status": 2}\',\'\', \'\', \'{"code":0}\']]
        ]

}

@ddt.ddt
class Test(unittest.TestCase):
    ## 随便写一个

    # [
    #     [\'2\', [\'checkcode\', \'{\\n "a":"1",\\n "b":"2"\\n}\', \'\', \'fail\', \'{"status": 3}\']],
    #     [\'3\', [\'checkcode\', \'{\\n "a":"2",\\n "b":"3"\\n}\', \'\', \'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\', \'{\\n "a":"1",\\n "b":"2"\\n}\', \'\', \'fail\', \'{"status": 3}\',\'登陆成功测试\']],
            [\'3\', [\'checkcode\', \'{\\n "a":"2",\\n "b":"3"\\n}\', \'\', \'fail\', \'{"status": 0}\',\'登陆失败测试\']],
        ],
    \'api2\':
        [
            [\'5\', [\'yyy\',\'{\\n "a":"3",\\n "b":"4"\\n}\', \'\', \'fail\', \'{"status": 2}\',\'\', \'\', \'{"code":0}\',\'新增人员成功测试\']],
            [\'6\', [\'yyy\',\'{\\n "a":"3",\\n "b":"4"\\n}\', \'\', \'fail\', \'{"status": 2}\',\'\', \'\', \'{"code":0}\',\'新增人员失败测试\']]
        ]

}

@ddt.ddt
class Test(unittest.TestCase):
    ## 随便写一个

    # [
    #     [\'2\', [\'checkcode\', \'{\\n "a":"1",\\n "b":"2"\\n}\', \'\', \'fail\', \'{"status": 3}\']],
    #     [\'3\', [\'checkcode\', \'{\\n "a":"2",\\n "b":"3"\\n}\', \'\', \'fail\', \'{"status": 0}\']],
    # ]
    @ddt.data(*data[\'api1\'])
    def test001(self,data):
        self.assertEqual(\'1\',data)

if __name__ == \'__main__\':
    unittest.main()

结果如下:

 

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

 

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

 

 

 

以上是关于python之ddt模式随记三,ddt模式用例标题过长解决的主要内容,如果未能解决你的问题,请参考以下文章

Selenium2+python自动化59-数据驱动(ddt)

接口测试(Python)之DDT

Selenium2+python自动化59-数据驱动(ddt)转载

Selenium2+python自动化59-数据驱动(ddt)转载

数据驱动ddt

python之数据驱动ddt操作(方法三)