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,加上了,最后体现在报告上面,看一眼效果。

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

原文地址:https://www.cnblogs.com/dflblog/p/12030569.html

时间: 2024-11-01 12:09:52

python之ddt模式随记三,ddt模式用例标题过长解决的相关文章

谈谈对于vmware Workstation 网络连接三种模式的认识.

大家好,我是黄药师,从今天开始坚持写博客. 简介: VM(VMware Workstation简称VM,后面都将用VM代替阐述)是一款功能强大的虚拟化软件.VM支持在 单一的桌面上同时运行多款不同的操作系统,能够模拟完整的网络环境,支持pxe功能.实时快照,等等多种强 大的功能.能够测试软件和部署新的业务测试.同时节约了很多资源.节约了企业成本.所以对于广大的互联 网从业者是不可多得的好工具. 本文中作者使用的软件以及操作系统版本: VM 11.1.2版本 win10 专业版 由于本文只讨论VM

linux中vim编辑器三种模式及常用命令的使用

Linux命令经常使用才会烂熟于心 命令行模式: 移动光标: 向下左右箭头可以移动光标: 将光标移动到行尾:$; 将光标移动到行头:^: 将光标移动到页尾:shift+g; 将光标移动到页头:1+shift+g; 移动到目标行:n+shift+g; 快速向左右移动光标:ctrl+←/→键: 向左或者向右移动n个字符:n+←/→键: ----------------------- 删除: 删除光标所在行:dd; 删除光标所在行及之后的n-1行:dnd: 删除一个字母:x (相当于是del): 删除

DNS 服务器三种模式搭建和常见问题解答

DNS 服务器三种模式搭建和常见问题解答                               作者浩浩哥来了   主DNS服务器搭建   DNS是域名服务器(DomainNameServer)的缩写,在TCP/IP网络中是一种很重要的网络服务,它用于将易于记忆的域名和不易记忆的IP地址进行转化   Vim /etc/hosts 修改主机名 127.0.0.1  localhost localhost.localdomain localhost4 localhost4.localdomai

文件打开的三种模式

文件打开的三种模式 文件操作的基础模式有三种(默认的操作模式为r模式): r模式为read w模式为write a模式为append 文件读写内容的格式有两种(默认的读写内容的模式为b模式): t模式为text b模式为bytes 需要注意的是:t.b这两种模式均不能单独使用,都需要与r/w/a之一连用. 一.文件打开模式之r模式 f = open('32.txt', mode='r') # 报错 f.write() f.close() # rt: read by text # windows的

httpd的三种模式比较

查看你的httpd使用了哪种模式: /usr/local/apache2/bin/httpd -V |grep 'Server MPM' 使用哪种模式,需要在编译的时候指定 --with-mpm=prefork|worker|event 当然也可以编译的时候,让三者都支持: --enable-mpms-shared=all 然后在配置文件中,修改 LoadModule mpm_worker_module modules/mpd_mpm_worker.so 2.2版本默认为worker,2.4版本

[转]VMware虚拟机上网络连接(network type)的三种模式--bridged、host-only、NAT

转自:http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/03/15/1985084.html VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络地址转换模式)和host-only(主机模式).要想在网络管理和维护中合理应用它们,你就应该先了解一下这三种工作模式. 1.bridged(桥接模式) 在这种模式下,VMWare虚拟出来的操作系统就像是局域网中的一台独立的主机,它可以访问网内任何一台机器.在桥接模式下

VMware虚拟机上网络连接(network type)的三种模式--bridged、host-only、NAT

VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络地址转换模式)和host-only(主机模式).要想在网络管理和维护中合理应用它们,你就应该先了解一下这三种工作模式. 1.bridged(桥接模式) 在这种模式下,VMWare虚拟出来的操作系统就像是局域网中的一台独立的主机,它可以访问网内任何一台机器.在桥接模式下,你需要手工为虚拟 系统配置IP地址.子网掩码,而且还要和宿主机器处于同一网段,这样虚拟系统才能和宿主机器进行通信.同时,由于这个虚拟系统是局域网中的一个

设计模式(三) : 创建型模式--工厂方法模式

工厂方法模式区别与简单工厂模式主要在于,factory中对对象的实例化延迟到了子类的factory中, 这也是优于简单工厂的地方.下面看这个模式的类图(截自<java与模式>): 示意性代码: ? 1 2 3 4 5 6 7 package com.javadesignpattern.factorymethod; public interface Creator {          public Product fatcory(); } package com.javadesignpatte

Python全栈开发【基础三】

Python全栈开发[基础三]  本节内容: 函数(全局与局部变量) 递归 函数 一.定义和使用 函数最重要的是减少代码的重用性和增强代码可读性 1 def 函数名(参数): 2 3 ... 4 函数体 5 ... 6 返回值 函数的定义主要有如下要点: def:表示函数的关键字 函数名:函数的名称,日后根据函数名调用函数 函数体:函数中进行一系列的逻辑计算 参数:为函数体提供数据 返回值:当函数执行完毕后,可以给调用者返回数据. 总结使用函数的好处: 1.减少代码重用 2.保持一致性,易维护