unittest笔记+用ddt后找不到用例的坑

2023-11-08

unittest notes

what is unittest?

unittest 是python单元测试框架,类似于JUnit框架

4 important concepts

test fixture(测试脚手架):对一个测试用例环境的搭建和销毁,是一个fixture,通过覆盖 TestCase的setUp()和tearDown()方法来实现。比如说在这个测试用例中需要访问数据库,那么可以在setUp() 中建立数据库连接以及进行一些初始化,在tearDown()中清除在数据库中产生的数据,然后关闭连接。为以后的 TestCase留下一个干净的环境。

test case(测试用例):一个TestCase的实例就是一个测试用例。是一个完整的测试流程,包括测试前准备环境的搭建(setUp),执行测试代码 (run),以及测试后环境的还原(tearDown)

test suite(测试集):就是一组测试用例

test runner(测试运行器):test runner 是一个用于执行和输出测试结果的组件。这个运行器可能使用图形接口、文本接口,或返回一个特定的值表示运行测试的结果。

easy demo

在这里插入图片描述
在这里插入图片描述

1.用import unittest导入unittest模块

2.定义一个继承自unittest.TestCase的测试用例类,如class xxx(unittest.TestCase):

3.定义setUp和tearDown,即如果定义了则会在每个测试case执行前先执行setUp方法,执行完毕后执行tearDown方法。

4.定义测试用例,名字以test开头,unittest会自动将test开头的方法放入测试用例集中。注意:定义的用例只能用test开头,否则无法识别,而且用例执行的顺序按照字母和数字大小顺序排序,如test_99 在test_100之前执行

pycharm中也可以通过点击单个用例边上的绿色三角形按钮执行单个用例
在这里插入图片描述

assert

实际使用经常用断言(assert)判断用例执行结果和预期的是否相符,如果不符合就给出错误提示
在这里插入图片描述

常用断言

1.assertEqual(self, first, second, msg=None)

–判断两个参数相等:first == second

2.assertNotEqual(self, first, second, msg=None)

–判断两个参数不相等:first != second

3.assertIn(self, member, container, msg=None)

–判断是字符串是否包含:member in container

4.assertNotIn(self, member, container, msg=None)

–判断是字符串是否不包含:member not in container

5.assertTrue(self, expr, msg=None)

–判断是否为真:expr is True

6.assertFalse(self, expr, msg=None)

–判断是否为假:expr is False

7.assertIsNone(self, obj, msg=None)

–判断是否为None:obj is None

8.assertIsNotNone(self, obj, msg=None)
–判断是否不为None:obj is not None

DDT

DDT(data drive test)即数据驱动测试,ddt有什么用?我们为什么要ddt?数据驱动简单说就是对用例进行参数化,试想一下,我们在测试输入框时,要输入多个数据,难道要创建多个用例吗?然后在每个用例中设置不同数据?这样做不仅费时而且代码重复低效,unittest中提供了DDT模块,用一组数据对应一个测试用例,自动执行生成所有用例

install

pip install ddt

easy demo

1.从ddt中导入ddt和data

2.在类前加修饰@ddt

3.在用例前加修饰@data() ------括号中为数据
在这里插入图片描述
示例中给出了3个数据,然后用例中判断是否和a相等

结果:生成了3个测试用例,第一个相等,其他两个不相等
在这里插入图片描述
如果想传入多个参数,可以用@unpack对数据进行解包
在这里插入图片描述
如上图,实现了将(‘b’,‘b’)中第一个传给a,第二个传给b,执行第一个用例,相等通过;将(‘b’,‘bb’)中第一个传给a,第二个传给b,执行第二个用例,不相等

如果不进行解包,第一次执行则将(‘b’,‘b’)作为整体传递给a,没有对b进行传参

如果数据很多,建议以字典索引方式取值
在这里插入图片描述
在这里插入图片描述
如图,*以实参方式传递,作用是将可迭代序列拆开,本代码中是将元组中列表拆开传给a。如果不加 * 则将整个元组传给a

choose designative test case

unittest的四个重要概念中,上文提及了两个,还有test suite 和test runner有什么用?他们可以用来指定要运行的用例

在前面我们都是通过unittest.main()运行程序,实现运行所有的用例,但如果我们想指定运行哪些用例,就可以用suite和runner

添加了test_2:
在这里插入图片描述
未添加test_2:
在这里插入图片描述

trap notice

用suite这个地方有好几个坑

1.如果用pycharm,运行时不要点左边的按钮,要注意运行整个py文件,否则可能会执行全部用例
在这里插入图片描述
2.当用ddt方法时,运行文件可能会报找不到该用例的错误,原因是用ddt方法后,用例的名字改变了
在这里插入图片描述
在这里插入图片描述
需要将用例名称改成新的名称

unittest.TestLoader().getTestCaseNames()  可以查看所有用例名
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

unittest笔记+用ddt后找不到用例的坑 的相关文章

随机推荐

  • 华为OD机试 C++ 去除多余空格

    题目 你需要写一个功能 它能处理一段文本 去除其中不必要的空格 但是如果这些空格被一对单引号包围起来 就保留它们不变 同时 你还要调整一些特定词汇的位置 这些词汇的位置会以坐标的方式给出 坐标要基于新的文本 特别注意 关键词的位置一定不是空
  • Unity 入门 Input 类

    1 获得键盘 Input GetKey KeyCode A Input GetKeyDown KeyCode A Input GetKeyUp KeyCode A 2 获得鼠标信息 Input mousePosition 鼠标位置 Inpu
  • 关系型数据库是如何运作的

    一说到关系型数据库 我总感觉缺了点什么 如果你尝试透过 关系型数据库是如何运作的 的关键词句来进行搜索 其搜索结果是少量的而且内容是简短的 难道说是由于它已经太老旧而已经不再流行吗 作为一名开发者 我讨厌使用我不明白的技术 此外 关系型数据
  • s、x、t -learner

  • DICOM之Transfer Syntax

    Transfer Syntax A Transfer Syntax is a set of encoding rules able to unambiguously represent one or more Abstract Syntax
  • ChatGPT在线个人小助手应用搭建

    ChatGPT在线个人小助手应用搭建 在线体验 点我在线体验 因为openAI账户申请后会默认有18美元的账户 openAI每次调用大概会花掉0 01美元 所以为了防止恶意刷api 无意义聊天 页面做了密码限制 如果密码不对 是不会启用op
  • mysql存储引擎层和服务器层,MySQL底层架构原理,工作流程和存储引擎的数据结构讲解...

    数据库 DataBase 是存放用户数据的地方 当用户访问 操作数据库中的数据时 需要数据库管理系统的帮助 数据管理系统的全称是DataBase Management System 简称DBMS 通常情况下我们会把数据库和数据库管理系统笼统
  • 网页端无法复制粘贴的解决方案

    由于瑞格系统无法复制粘贴 写java代码比较难受 所以就找了一些方法来解决网页端无法复制粘贴的问题 1 打开浏览器的设置界面 并打开拓展程序 2 在拓展程序中选择左上角的拓展程序 并打开Chrome网上应用商店 3 在Chrome网上应用商
  • 多线程JUC并发篇常见面试详解

    文章目录 1 JUC 简介 2 线程和进程 3 并非与并行 4 线程的状态 5 wait sleep的区别 6 Lock 锁 重点 1 Lock锁 2 公平非公平 3 ReentrantLock 构造器 4 Lock 锁实现步骤 7 syn
  • 百炼成钢;JavaScript逆向九大专题详解

    JavaScript是一种脚本语言 通常用于在Web浏览器中编写交互式前端应用程序 它是一种解释性语言 可以在客户端 浏览器 和服务器端 Node js 上运行 JavaScript可以用于创建动态网页 Web应用程序 游戏 移动应用程序等
  • unity 获取鼠标键盘

    unity 获取鼠标键盘 在做项目中我们经常会用到鼠标键盘 那么怎么去获取鼠标键盘呢 接下里我带大家了解一下 首先是获取鼠标 大家记住无论是获取鼠标还是获取键盘都要用到unity中的一个小小的组件首先在unity上方的选项卡中选择edit
  • RocketMQ(三) broker启动

    RocketMQ源码版本V5 0 0 可兼容之前的版本 因为整理资料的时候 之前的版本 和V5版本有所出入 核心流程基本还是大同小异的 此前已经总结了NameServer的启动流程源码 现在来了解Broker的启动流程 在RocketMQ启
  • 第一章 基础算法(一)ACwing 快速,归并,二分

    第一章 基础算法 一 一 内容概述 主要思想掌握 深刻的理解 代码模板理解以及背过 掌握思想 模板题目练习 理解 记忆 1 排序 快排 归并排序 2 二分 整数二分 浮点数二分 二 快速排序 快速排序的主要思想是基于分治的 第一步就是是确定
  • gd32F450单片机 ADC+DMA

    接触国产单片机不久 好多配置的东西记不住 写下来分享然后也方便自己以后拿来看看 欢迎大家把踩坑的部分分享一下 本次是ADC配置和DMA采集的配置部分 某些参数错误会导致内存溢出 影响到其他变量或者参数表的值 引脚为PB0和PB1两个 一 相
  • 三款强大的 AI 编程工具,可以轻松替换 Github Copilot

    大家好 提起Github Copilot 相信很多读者朋友们都听说过甚至使用过 作为Github研发的一款先进的编程辅助插件 它可以在我们日常编写代码的过程中 根据代码的上下文内容 注释等信息自动推断生成高质量的代码 很大程度上提升我们的代
  • Linux中一个网络包的发送/接收流程

    如果你对Linux是如何实现 对用户原始的网络包进行协议头封装与解析 为什么会粘包拆包 期间网络包经历了哪些缓冲区 经历了几次拷贝 CPU DMA TCP又是如何实现滑动 拥塞窗口 这几个话题感兴趣的话 不妨看下去吧 1 Linux发送HT
  • linux系统下重启网络服务的两种方法

    linux系统下重启网络服务的两种方法 发布时间 2020 04 02 11 25 25 来源 亿速云 阅读 207 作者 小新 今天小编给大家分享的是linux系统下重启网络服务的两种方法 很多人都不太了解 今天小编为了让大家更加了解li
  • 【android系统】android系统升级流程分析(二)---update升级包分析

    接下来我们将通过几篇文章来分析update zip包在具体Android系统升级的过程 来理解Android系统中Recovery模式服务的工作原理 今天让我先来分析下升级包update zip 一 目录结构 update zip包的目录结
  • Linux 线程创建

    如何创建线程 看来多线程还是有很多好处的 接下来我们来看一下 如何使用线程来干一件大事 假如说 现在我们有 N 个非常大的视频需要下载 一个个下载需要的时间太长了 按照刚才的思路 我们可以拆分成 N 个任务 分给 N 个线程各自去下载 我们
  • unittest笔记+用ddt后找不到用例的坑

    unittest notes what is unittest unittest 是python单元测试框架 类似于JUnit框架 4 important concepts test fixture 测试脚手架 对一个测试用例环境的搭建和销