python笔记32-ddt框架报告优化

前言

至于什么是ddt这个可以参考我之前写的博客内容,使用ddt框架的时候,有个问题困扰我很久了,一直没得到解决(也有很大小伙伴问过我,没解决抱歉了!) 这个问题就是:如何使用ddt框架时,生成的html报告里面注释能对每个用例传入不同的说明?默认是固定写死的内容。 最近刚好看到关于python的docstring【python笔记30-docstring注释添加变量】(https://www.cnblogs.com/yoyoketang/p/9719147.html)相关知识,ddt源码也读了几次,也思考了很多办法去给docstring传入变量内容,甚至使用装饰器(decorator)都未能成功。一次偶然机会,代码删了一半,运行成功了,算是机缘巧合吧,然后灵光一闪打通了任督二脉!

遇到问题

首先说下之前使用ddt框架遗留的老问题

  • 第一个问题是当测试用例数量大于10的时候,排序会是test_1,test_10, test_11,test_12, test_2, test_3, test_4这种 这个问题最近的ddt版本已经解决了
  • 第二个问题是使用最新版本(Version: 1.2.0)生成html报告的时候出现dict() -> new empty dictionary dict(mapping) 这个问题是最新版的一个bug,解决办法安装1.1.2版本即可【python笔记31-使用ddt报告出现dict() -> new empty dictionary dict(mapping) 问题解决】
  • 第三个问题是生成的html报告的注释内容是写死的,不能根据用例动态传入

我们希望每个用例能动态传入一个参数到html报告里

报告注释传变量

给docstring传一个变量进去,代码很简单,但是不容易想到,格式参考:”””上海-悠悠:{0}””” 注意是三个双引号,变量用{0}表示参数内容

import unittest
import ddt

# 测试数据
datas = [ {"user": "admin", "psw": "123", "result": "true"},
        {"user": "admin1", "psw": "1234", "result": "true"},
        {"user": "admin2", "psw": "1234", "result": "true"},
        {"user": "admin3", "psw": "1234", "result": "true"},
        {"user": "admin4", "psw": "1234", "result": "true"},
        {"user": "admin5", "psw": "1234", "result": "true"},
        {"user": "admin6", "psw": "1234", "result": "true"},
        {"user": "admin7", "psw": "1234", "result": "true"},
        {"user": "admin8", "psw": "1234", "result": "true"},
        {"user": "admin9", "psw": "1234", "result": "true"},
        {"user": "admin10", "psw": "1234", "result": "true"},
        {"user": "admin11", "psw": "1234", "result": "true"}]

@ddt.ddt
class Test(unittest.TestCase):

    @ddt.data(*datas)
    def test_(self, d):
        """上海-悠悠:{0}"""
        print("测试数据:%s" % d)

if __name__ == "__main__":
    unittest.main()

这样就能把测试数据传入过来了

用例多个参数

上面那个案例是把测试数据放到字典里,用例里面穿一个d参数,需要的数据从字典里面去取 实际上也可以给用例传多个参数,每组数据写到一个元祖里,用装饰器@ddt.upack解析出来

import unittest
import ddt

# 测试数据

# datas = [ {"user": "admin", "psw": "123", "result": "true"},
#         {"user": "admin1", "psw": "1234", "result": "true"},
#         {"user": "admin2", "psw": "1234", "result": "true"},
#         {"user": "admin3", "psw": "1234", "result": "true"},
#         {"user": "admin4", "psw": "1234", "result": "true"},
#         {"user": "admin5", "psw": "1234", "result": "true"},
#         {"user": "admin6", "psw": "1234", "result": "true"},
#         {"user": "admin7", "psw": "1234", "result": "true"},
#         {"user": "admin8", "psw": "1234", "result": "true"},
#         {"user": "admin9", "psw": "1234", "result": "true"},
#         {"user": "admin10", "psw": "1234", "result": "true"},
#         {"user": "admin11", "psw": "1234", "result": "true"}]

datas =[("admin", "123", "true", "用例1描述"),
        ("admin1", "123", "true", "用例2描述"),
        ("admin2", "123", "true", "用例3描述"),
        ("admin3", "123", "true", "用例4描述"),
        ("admin4", "123", "true", "用例5描述"),
        ("admin5", "123", "true", "用例6描述"),
        ]

@ddt.ddt
class Test(unittest.TestCase):

    @ddt.data(*datas)
    @ddt.unpack
    def test_(self, d1, d2, d3, d4):
        """上海-悠悠:{3}"""
        print("测试数据:%s" % d1)
        print("测试数据:%s" % d2)
        print("测试数据:%s" % d3)
        print("测试数据:%s" % d4)

if __name__ == "__main__":
    unittest.main()

原文发布于微信公众号 - 从零开始学自动化测试(yoyoketang)

原文发表时间:2018-10-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大前端开发

从编程小白到全栈开发:理解异步

作为以JavaScript为主要开发语言的JS全栈开发者,是一定会碰上“异步(Asynchronous)”这个重要概念的,尽早的理解这个概念,会对你的JS编程生...

9630
来自专栏Golang语言社区

channel机理及调度理解

《Go语言编程》一书介绍了libtask库,可以认为这个库等同于go的底层goroutine实现。

11930
来自专栏余林丰

0.Java并发包系列开篇

  在我们想要谈论Java并发包(java.util.concurrent)的时候,这是一个头疼的问题,却又是每个Java工程师不得不掌握的一项技能。一直以来都...

23150
来自专栏ytkah

群用户通过微信小程序可以更好地协作了

  今天,小程序向开发者开放了群ID的接口能力。简单地说,就是当你把小程序分享在群聊中,被点击后开发者可获取群ID和群名称,也方便更好地针对群场景提供个性化服务...

55550
来自专栏码字搬砖

spark内存模型概论

背景: 自从开始接触spark之后就一直很奇怪spark on yarn到底是怎么样跑起来了,具体的内存占用是怎么分配的?如果container的内存小于–e...

32320
来自专栏Java技术分享圈

杨老师课堂_Java教程第一篇之认识计算机

*接下来就是确定、确定、确定就ok! *检验环境变量是否成功在DOS命令行里输入javac或java,如果正常显示一些内容,说明安装成功并且配...

12520
来自专栏deed博客

day01笔记

17850
来自专栏.NET开发者社区

什么是ORM?为什么用ORM?浅析ORM的使用及利弊

什么是ORM ORM(Object-relational mapping),中文翻译为对象关系映射,是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术...

223100
来自专栏Python爱好者

Java基础笔记01

34060
来自专栏大闲人柴毛毛

使用Eclipse插件提高Java编码质量

代码质量概述 ? 怎样辨别一个项目代码写得好还是坏?优秀的代码和腐化的代码区别在哪里?怎么让自己写的代码既漂亮又有生命力?接下来将对代码质量的问题进行...

39170

扫码关注云+社区

领取腾讯云代金券