Python中unittest的数据驱动详解

目录
  • 前言
  • 一.ddt简单介绍
  • 二.ddt处理各种类型数据
    • 1.分析ddt工作原理
    • 2.ddt测试元祖数据
      • 2.1测试单组元素
      • 2.2测试多组未分解元素
      • 2.3测试多组分解元素
    • 3.ddt测试列表数据
      • 3.1多组列表拆分数据
      • 3.2复杂列表(含字典)拆分数据
    • 4.ddt测试字典数据
      • 4.1多组字典数据拆分
    • 5.ddt测试字典列表数据结合
    • 6.ddt测试读取文件数据

前言

在设计用例的时候,有些用例只是参数数据的输入不一样,比如登录这个功能,操作过程是一样的.如果重复去写操作过程会增加代码量,对应这种多组数据的测试用例,可以用数据驱动设计模式,一组数据对应一个测试用例,用例自动加载生成.

一.ddt简单介绍

1.ddt是什么

ddt:data driver tests ,数据驱动测试,是一种单元测试框架

2.使用ddt\的好处

如"前言"所说

3.导入ddt模块

ddt属于第三方模块,需要安装,安装方法:

  • 方法一:在cmd命令中输入:pip install ddt
  • 方法二:pycharm中打开终端,输入:pip install ddt

4.四种模式

ddt要与unittest单元测试框架一块结合使用

  • @ddt:引入ddt模块
  • @data:导入数据
  • @unpack:拆分数据
  • @file_data:导入外部数据

二.ddt处理各种类型数据

注意:

  • 1.使用ddt模块要在测试类前用@ddt进行修饰
  • 2.要导入测试数据需在测试用例(以test_开头的方法)前用@data修饰
  • 3.若需对测试数据进行拆分需用@unpack修饰
  • 4.若需导入外部数据需用@file_data修饰

1.分析ddt工作原理

代码中@data(1,2,“jack”)传入了三个元素,故ddt自动生成了3个测试用用例。分别打印传入的数据

注意:

对于没有使用ddt的测试用例来说,一个test_开头的测试方法一次只能生成一个测试用例,但是有了ddt之后,可以一次向测试方法中传入多个测试数据,而生成测试用例的个数是根据@data中传入的测试数据的元素而定的.

2.ddt测试元祖数据

2.1测试单组元素

2.2测试多组未分解元素

2.3测试多组分解元素

3.ddt测试列表数据

3.1多组列表拆分数据

3.2复杂列表(含字典)拆分数据

4.ddt测试字典数据

4.1多组字典数据拆分

5.ddt测试字典列表数据结合

在实际应用中会存在数据比较多的情况,如果都直接把数据传入@data中会显得代码非常冗杂,以包含多个字典的列表数据为例,可将包含多个字典的元素存放在一个列表变量中,在@data中传入列表变量即可

6.ddt测试读取文件数据

数据格式必须为json,且必须为双引号的键值对形式

到此这篇关于Python中unittest的数据驱动详解的文章就介绍到这了,更多相关Python unittest 数据驱动内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 基于Python的接口自动化unittest测试框架和ddt数据驱动详解

    引言 在编写接口自动化用例时,我们一般针对一个接口建立一个.py文件,一条接口测试用例封装为一个函数(方法),但是在批量执行的过程中,如果其中一条出错,后面的用例就无法执行,还有在运行大量的接口测试用例时测试数据如何管理和加载.针对测试用例加载以及执行控制,python语言提供了unittest单元测试框架,将测试用例编写在unittest框架下,使用该框架可以单个或者批量加载互不影响的用例执行及更灵活的执行控制,对于更好的进行测试数据的管理和加载,这里我们引入数据驱动的模块:ddt,测试数据和

  • 一篇文章搞懂Python Unittest测试方法的执行顺序

    目录 Unittest 回到主题 源码初窥 回到问题的本质 1. 以字典序的方式编写test方法 2. 回归本质,从根本解决问题 总结 Unittest unittest大家应该都不陌生.它作为一款博主在5-6年前最常用的单元测试框架,现在正被pytest,nose慢慢蚕食. 渐渐地,看到大家更多的讨论的内容从unittest+HTMLTestRunner变为pytest+allure2等后起之秀. 不禁感慨,终究是自己落伍了,跟不上时代的大潮了. 回到主题 感慨完了,回到正文.虽然unitte

  • python中使用 unittest.TestCase单元测试的用例详解

    目录 单元测试和测试用例 各种断言方法 函数测试 1.准备测试函数 2.编写一个能使用它的程序 3.对函数进行单元测试 类测试 1.准备测试的类 2.编写一个能使用它的程序 3.对类进行单元测试 注意 单元测试和测试用例 python标准库中的模块unittest提供了代码测试工具.单元测试用于核实函数的莫个方面没有问题:测试用例是一组单元测试,这些单元测试一起核实函数在各种情形下的行为都符合要求.良好的测试用例考虑到了函数可能收到的各种输入,包含针对所有这些情形的测试.全覆盖测试用例包含一整套

  • Python+unittest+DDT实现数据驱动测试

    前言 数据驱动测试: 避免编写重复代码 数据与测试脚本分离 通过使用数据驱动测试,来验证多组数据测试场景 通常来说,多用于单元测试和接口测试 ddt介绍 Data-Driven Tests(DDT)即数据驱动测试,可以实现不同数据运行同一个测试用例.ddt本质其实就是装饰器,一组数据一个场景. ddt模块包含了一个类的装饰器ddt和三个个方法的装饰器: data:包含多个你想要传给测试用例的参数,可以为列表.元组.字典等: file_data:会从json或yaml中加载数据: unpack:分

  • Python中的Unittest基本使用

    前言: Unittest又名单元测试,主要用于测试自己写的代码的正确性和完备性,也方便自己和他人对代码的维护.在软件开发过程中,测试驱动开发的理念是一种好的开发习惯. 例如现在我们写了一个求绝对值的函数my_abs,存放在myAbs.py中 def my_abs(number): if not (isinstance(number, int) or isinstance(number, float)): raise ValueError("invalid value %s" % num

  • Python中unittest的断言方法详解

    目录 断言方法: 方法有: 下面是做的例子,后边是运行结果: 总结 断言方法: 是unittest提供的一组方法,可以通过这些方法完成期望结果和实际结果的对比 方法有: assert+空格+要判断的语句+逗号+'报错语句'        python提供 assertEqual(a,b,msg='报错语句')        若a==b不报错,否则报错内容为msg assertNotEqual(a,b,msg='报错语句')        若a!=b不报错,否则报错内容为msg assertIn(

  • python中unittest框架应用详解

    目录 1.Unittest为Python内嵌的测试框架,不需要特殊配置 2.编写规范 总结 1.Unittest为Python内嵌的测试框架,不需要特殊配置 2.编写规范 需要导入 import unittest 测试类必须继承unittest.TestCase 测试方法以 test_开头 模块和类名没有要求 TestCase 理解为写测试用例 TestSuite 理解为测试用例的集合 TestLoader 理解为的测试用例加载 TestRunner 执行测试用例,并输出报告 import un

  • Python中unittest的数据驱动详解

    目录 前言 一.ddt简单介绍 二.ddt处理各种类型数据 1.分析ddt工作原理 2.ddt测试元祖数据 2.1测试单组元素 2.2测试多组未分解元素 2.3测试多组分解元素 3.ddt测试列表数据 3.1多组列表拆分数据 3.2复杂列表(含字典)拆分数据 4.ddt测试字典数据 4.1多组字典数据拆分 5.ddt测试字典列表数据结合 6.ddt测试读取文件数据 前言 在设计用例的时候,有些用例只是参数数据的输入不一样,比如登录这个功能,操作过程是一样的.如果重复去写操作过程会增加代码量,对应

  • python中 logging的使用详解

    日志是用来记录程序在运行过程中发生的状况,在程序开发过程中添加日志模块能够帮助我们了解程序运行过程中发生了哪些事件,这些事件也有轻重之分. 根据事件的轻重可分为以下几个级别: DEBUG: 详细信息,通常仅在诊断问题时才受到关注.整数level=10 INFO: 确认程序按预期工作.整数level=20 WARNING:出现了异常,但是不影响正常工作.整数level=30 ERROR:由于某些原因,程序 不能执行某些功能.整数level=40 CRITICAL:严重的错误,导致程序不能运行.整数

  • Python中格式化format()方法详解

     Python中格式化format()方法详解 Python中格式化输出字符串使用format()函数, 字符串即类, 可以使用方法; Python是完全面向对象的语言, 任何东西都是对象; 字符串的参数使用{NUM}进行表示,0, 表示第一个参数,1, 表示第二个参数, 以后顺次递加; 使用":", 指定代表元素需要的操作, 如":.3"小数点三位, ":8"占8个字符空间等; 还可以添加特定的字母, 如: 'b' - 二进制. 将数字以2为基

  • Python中的asyncio代码详解

    asyncio介绍 熟悉c#的同学可能知道,在c#中可以很方便的使用 async 和 await 来实现异步编程,那么在python中应该怎么做呢,其实python也支持异步编程,一般使用 asyncio 这个库,下面介绍下什么是 asyncio : asyncio 是用来编写 并发 代码的库,使用 async/await 语法. asyncio 被用作多个提供高性能 Python 异步框架的基础,包括网络和网站服务,数据库连接库,分布式任务队列等等. asyncio 往往是构建 IO 密集型和

  • python 中xpath爬虫实例详解

    案例一: 某套图网站,套图以封面形式展现在页面,需要依次点击套图,点击广告盘链接,最后到达百度网盘展示页面. 这一过程通过爬虫来实现,收集百度网盘地址和提取码,采用xpath爬虫技术 1.首先分析图片列表页,该页按照更新先后顺序暂时套图封面,查看HTML结构.每一组"li"对应一组套图.属性href后面即为套图的内页地址(即广告盘链接页).所以,我们先得获取列表页内所有的内页地址(即广告盘链接页) 代码如下: import requests 倒入requests库 from lxml

  • 对Python中的@classmethod用法详解

    在Python面向对象编程中的类构建中,有时候会遇到@classmethod的用法. 总感觉有这种特殊性说明的用法都是高级用法,在我这个层级的水平中一般是用不到的. 不过还是好奇去查了一下. 大致可以理解为:使用了@classmethod修饰的方法是类专属的,而且是可以通过类名进行调用的.为了能够展示其与一般方法的差异,写一段简单的代码如下: class DemoClass: @classmethod def classPrint(self): print("class method"

  • python中yield的用法详解——最简单,最清晰的解释

    首先我要吐槽一下,看程序的过程中遇见了yield这个关键字,然后百度的时候,发现没有一个能简单的让我懂的,讲起来真TM的都是头头是道,什么参数,什么传递的,还口口声声说自己的教程是最简单的,最浅显易懂的,我就想问没有有考虑过读者的感受. 接下来是正题: 首先,如果你还没有对yield有个初步分认识,那么你先把yield看做"return",这个是直观的,它首先是个return,普通的return是什么意思,就是在程序中返回某个值,返回之后程序就不再往下运行了.看做return之后再把它

  • Python中itertools的用法详解

    iterator 循环器(iterator)是对象的容器,包含有多个对象.通过调用循环器的next()方法 (next()方法,在Python 3.x中),循环器将依次返回一个对象.直到所有的对象遍历穷尽,循环器将举出StopIteration错误. 在for i in iterator结构中,循环器每次返回的对象将赋予给i,直到循环结束.使用iter()内置函数,我们可以将诸如表.字典等容器变为循环器.比如 for i in iter([2, 4, 5, 6]): print i 标准库中的i

  • python中的 zip函数详解及用法举例

    python中zip()函数用法举例 定义:zip([iterable, ...]) zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的list(列表).若传入参数的长度不等,则返回list的长度和参数中长度最短的对象相同.利用*号操作符,可以将list unzip(解压),看下面的例子就明白了: 示例1 x = [1, 2, 3] y = [4, 5, 6] z = [7, 8, 9] x

随机推荐