背景:
使用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,加上了,最后体现在报告上面,看一眼效果。
嗯嗯,不错不错,忽略错误,标题还是可以的。总结还是挺香的
---疲惫的我,只想在街上找辆法拉利或者兰博基尼去试试头够不够铁