unittest测试框架+ddt数据驱动

2023-11-01

unittest测试框架

在编写接口自动化测试用例时,如果不采用unittest单元测试框架,那么就需要针对每一个接口创建一个.py文件,然后在其中将该接口的一个测试用例封装为一个函数,在批量执行的过程中,若有一条出错,则后面的测试用例无法执行。
为了更加方便的加载执行控制测试用例,python语言提供了unittest单元测试框架,测试用例编写在unittest框架下,可以使测试用例单个或者批量运行而互相不影响,从而更加灵活的管理。
数据驱动ddt可以实现测试数据与测试脚本的分离,通过ddt来将测试数据加载到脚本中。采用数据驱动设计模式使一组数据对应一个测试用例,用例自动加载生成。

四个核心组件

  1. TestCase:测试用例类。编写测试用例脚本时继承该类,测试用例方法都是以test开头
  2. TestSuite:测试用例集。
  3. testRunner:用来执行测试用例,并返回测试用例的执行结果,可以用图形或者文本将测试结果形象地展现出来,HTMLTestRunner用来生成图形化的报告,TextTestRunner用来生成简单的文本测试结果。
  4. testfixure:测试夹件。用于测试用例前置初始化以及执行后的销毁。

TestCase

  1. .py测试用例文件必须是以test开头的。用来识别测试用例文件编写测试用例的类,必须继承unittest.TestCase,做为测试类
  2. 测试类中用例的方法名称必须以test开头,用于识别测试用例数
  3. 测试类中的用例执行顺序,按照以test开头的方法后的Ascill码顺序执行(09,AZ,a~z)

Testfixure

  1. 测试夹具,主要是用例前置的初始化以及执行后的销毁
  2. 类级别:setup()和teardown()
  3. 方法级别:setUpClass() 和tearDownClass()
  4. 类级别,每一条测试用例执行之前与之后都要运行一次setup()和teardown();方法级别,所有测试用例执行之前到执行完成只运行一次setUpClass()和tearDownClass()

TestSuite

unittest框架下提供了unittest.TestSuite()和unittest.TestLoader()类,这两个类下封装了加载用例的方法,用于加载测试用例到测试集中
12. unittest.TestSuite()提供单个用例加载方法
addTest():单个用例加载,当然也可以将多个用例的方法名放入列表中添加到addTest()中,加载多条测试用例
13. unittest.TestLoader()提供批量加载或发现用例的方法
loadTestsFromTestCase(测试类名):添加一个测试类
loadTestsFromModule(模块名):添加一个模块
discover(测试用例的所在目录):指定目录去加载,会自动寻找这个目录下所有符合命名规则的测试用例

unittest.TestSuite()
addTest():添加单个测试用例方法
addTest([…]):添加多个测试用例方法,方法名存在一个列表
unittest.TestLoader()
loadTestsFromTestCase(测试类名):添加一个测试类
loadTestsFromModule(模块名):添加一个模块
discover(测试用例的所在目录):指定目录去加载,会自动寻找这个目录下所有符合命名规则的测试用例

testRunner

testrunner就是用来执行测试用例的,并且可以生成相应的测试报告。
测试报告有两种展示形式,一种是text文本,一种是html格式。
HTMLTestRunner是Python标准库的unittest框架的一个扩展,它可以生成一个直观清晰的HTML测试报告。使用的前提就是要下载HTMLTestRunner.py,下载完后放在python的安装目录下的Lib目录下即可。

assert

unittest提供了丰富的断言方法
在这里插入图片描述

impront

unittest由四大核心部分组成,分别是testcase、testsuite、testfixure、testrunner
对于testcase,通过一个基本类unittest.testcase来创建测试用例,有一个规则就是方法名称必须以test开头,用来识别测试用例数
对于testsuite,表示一个测试用例集,将需要执行的测试用例的类存放到一起来执行
对于testfixure,用于用例执行前的初始化以及执行后的销毁,有两种使用方式,一种是以测试方法为维度的setUp()和tearDown()
另一种是以测试类为维度的setupClass()和teardownClass()
对于testRunner,是用来执行测试用例,生成测试报告。将HTMLTestRunner放入python安装目录的scripts目录下,运行生成测试报告

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

unittest测试框架+ddt数据驱动 的相关文章

  • 使用请求验证 SSL 证书

    我正在尝试验证 SSL 但它不起作用 我在浏览器上访问了我想要访问的机密网站 在 Chrome 上 我单击了储物柜 gt 证书 gt 详细信息 gt 复制到文件 gt base64 gt cert cer 我的代码是 test reques
  • 如何使用 cython 编译扩展?

    我正在尝试从示例页面编译一个简单的 cython 扩展here http docs cython org src userguide tutorial html在我安装了 Python 2 6 64 位版本的 Windows 7 64 位计
  • 在 Python 中使用 Selenium 处理“接受 Cookie”弹出窗口

    我一直在尝试用硒抓取这个房地产网站的一些信息 但是 当我访问该网站时 我需要接受 cookie 才能继续 这仅在机器人访问网站时发生 而不是在我手动执行时发生 当我尝试通过 xpath 或 id 查找相应的元素时 正如我在手动检查页面时找到
  • Django:如何测试“HttpResponsePermanentRedirect”

    我正在为我的 django 应用程序编写一些测试 在我看来 它使用 HttpResponseRedirect 重定向到其他一些网址 那么我该如何测试呢 姜戈TestCase类有一个方法assertRedirects https docs d
  • 为什么 .setGeometry() 不改变 QWidget 实例的大小?

    我想使用 QWidget 更改 QPushButton 的大小 setGeometry https doc qt io qtforpython 5 PySide2 QtWidgets QWidget html PySide2 QtWidge
  • 一次将Python dict的内容分配给多个变量?

    我想做这样的事情 def f return a 1 b 2 c 3 a b f or a b f IE 这样 a 被分配为 1 b 被分配为 2 并且 c 是未定义的 这与此类似 def f return 1 2 a b f 依赖于变量名称
  • Tensorflow 可变图像输入大小(自动编码器、放大......)

    Edit WARNING不建议使用不同图像大小的图像 因为张量需要具有相同的大小才能实现并行化 我一直在寻找解决方案 了解如何使用不同大小的图像作为神经网络的输入 Numpy 第一个想法是使用numpy 然而 由于每个图像的大小不同 我无法
  • 如何使用Python将WebP图像转换为Gif?

    我已经尝试过这个 from PIL import Image im Image open this webp im save that gif gif save all True 这给了我这个错误 类型错误 不支持的操作数类型 tuple
  • 可以在 TensorFlow 中使用排名相关作为成本函数吗?

    我正在处理偶尔充满异常值的极其嘈杂的数据 因此我主要依靠相关性来衡量我的神经网络的准确性 是否可以明确使用诸如等级相关性 斯皮尔曼相关系数 之类的东西作为我的成本函数 到目前为止 我主要依赖 MSE 作为相关性的代理 我现在面临三个主要障碍
  • Python igraph:从图中删除顶点

    我正在使用安然电子邮件数据集 并尝试删除没有 enron com 的电子邮件地址 即我只想拥有安然电子邮件 当我尝试删除那些没有 enron com 的地址时 一些电子邮件由于某些原因被跳过 下面显示了一个小图 其中顶点是电子邮件地址 这是
  • 定义函数后对其进行修饰?

    I think答案是否定的 但我似乎找不到明确的说法 我有以下情况 def decorated function function functools wraps function def my function print Hello s
  • 如何使用 python urllib 在 HTTP/1.1 中保持活力

    现在我正在这样做 Python3 urllib url someurl headers HOST somehost Connection keep alive Accept Encoding gzip deflate opener urll
  • 如何通过双击在浏览器中打开 ipynb 文件

    以前 我安装了 Canopy 当时 我只需双击 ipynb 文件并在浏览器中打开它们即可 但是 后来我需要Anaconda 一旦我安装了它 这个功能就没有了 现在我只希望能够简单地双击 ipynb 文件 然后该文件就会在 Firefox 中
  • Python:计算数据帧列中所有行中特定字符的实例数

    我有一个包含列 toaddress ccaddress body 的数据框 df 我想迭代数据帧的索引 以获取 toaddress 和 ccaddress 字段中电子邮件地址的最小 最大和平均数量 这是通过计算这两列中每个字段中的 和 的实
  • 在可编辑的QSqlQueryModel中实现setEditStrategy

    这是后续这个问题 https stackoverflow com questions 49752388 editable qtableview of complex sql query 在那里 我们创建了 QSqlQueryModel 的可
  • Django 在选择列表更改时创建毫无意义的迁移

    我正在尝试使用可调用创建一个带有选择字段的模型 以便 Django 在选择列表更改时不会创建迁移 如中所述this https stackoverflow com questions 31788450 stop django from cr
  • conda-env list / conda info --envs 如何查找环境?

    我一直在尝试 anaconda miniconda 因为我的用户使用随 miniconda 安装的结构生物学程序 并且作者都没有 A 考虑到可能存在其他 miniconda 应用程序 B 他们的程序将在多用户环境中使用 因此 使用 Arch
  • Pandas Dataframe:将包含列表的行扩展到多行,并为所有列提供所需的索引

    我在 pandas 数据框中有时间序列数据 索引为测量开始时的时间 列中包含以固定采样率记录的值列表 连续索引 列表中元素数量的差异 这是它的样子 Time A B Z 0 1 2 3 4 1 2 3 4 2 5 6 7 8 5 6 7 8
  • 将一个列表的元素除以另一个列表的元素

    我有两个清单 比如说 a 10 20 30 40 50 60 b 30 70 110 正如你所看到的 列表 b 由一个列表的元素总和组成 其中 window 2 b 0 a 0 a 1 10 20 30 etc 如何获得另一个列表 该列表由
  • Airflow Python 单元测试?

    我想为我们的 DAG 添加一些单元测试 但找不到任何单元测试 有 DAG 单元测试框架吗 有一个端到端的测试框架存在 但我猜它已经死了 https issues apache org jira browse AIRFLOW 79 https

随机推荐

  • POJ 1240 Pre Post erous

    给定一颗k叉树的前序和后序遍历序列 求这个k叉树一共可能有多少种 求每个节点孩子节点的个数n 然后从m个位置中选n个位置给这n个孩子 一共有c m n 中选法 把所有节点的这个值相乘即可 include
  • vue中template的三种写法

    第一种 字符串模板写法 直接写在vue构造器里 这种写法比较直观 适用于html代码不多的场景 但是如果模板里html代码太多 不便于维护 不建议这么写 第二种 直接写在template标签里 这种写法跟写html很像 第三种 写在scri
  • Mybatis的代码自动生成插件(Free Mybatis plugin)

    介绍 使用的是Free Mybatis plugin代码生成插件 在idea的plugins中可以搜索到 并且是免费的 唯一的不足就是 代码如果重新生成 会被覆盖掉 所以需要手动的进行合并源代码 不过通过git可以比较好的解决该问题 安装
  • 算法导论:钢条切割问题方法全解(递归+动态规划)

    public class Main public static void main String args Main main new Main int p 0 1 5 8 9 10 17 17 20 24 30 System out pr
  • python网络爬虫--基本概念(1)

    一 爬虫简介 1 1 爬虫的定义 网络爬虫 又被称为网页蜘蛛 网络机器人 在FOAF社区中间 更经常的称为网页追逐者 是一种按照一定的规则 自动批量化地抓取万维网信息的程序或者脚本 自动批量化的抓取既有数据 模拟客户端发送请求 接受数据 1
  • PMP题目与解题思路(第五天)

    PMP题目与解题思路 第五天 41 在一次社交集会中 一位团队成员无意中告诉一位相关方项目已经落后于进度计划 并且构成重大延迟 与项目经理沟通该问题时 该相关方非常激动 此时项目经理应该怎么做 A 同团队回顾风险管理计划 B 创建相关方影响
  • 使用JQgrid常用 (实战经常用)

    jqgrid参数 jqGrid参数 名称 类型 描述 默认值 可修改 url string 获取数据的地址 datatype string 从服务器端返回的数据类型 默认xml 可选类型 xml local json jsonnp scri
  • stm32智能小车设计

    提前说说 博主是用寄存器写的驱动 历时两周 总算把小车弄好了 总体上来说做的太慢了 自己在32的学习中还不够仔细深入 只是浅面的学习 当真正做一个项目时 暴露的问题就太多了 这次在小车的制作的过程中 遇到了各种各样的问题 软件 硬件 各式各
  • openwrt上opkg更新报错"opkg_download: Failed to download ............."

    開始搞op的时候 看到op居然能够直接安装一些插件 激动坏了 由于这东西对嵌入式的小系统来说简直不敢想 可是op就支持了 就是这么任性 好不easy编译了固件 依照网上的教程 telnet进去 首先opkg update 结果没有想象中的华
  • discuz密码找回:[1]忘记UCENTER创始人密码

    人们都是健忘的 何况每天的事情很多 有些站长更是兼职做 赚点外快而已 而ucenter更是不常用 所以忘记密码是在正常不过的事情 如果密码忘记怎么找回呢 方法有很多种 例如用comsenz tools工具 但是这个有版本问题 有些人怕装上出
  • LeetCode:4.寻找两个正序数组中的中位数(median-of-two-sorted-arrays)思路与题解

    LeetCode 4 寻找两个正序数组中的中位数 median of two sorted arrays 包含输入的完整代码LeetCode 4 寻找两个正序数组中的中位数 median of two sorted arrays Java完
  • 报错 java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 解决方案

    Android项目报错 java lang IndexOutOfBoundsException Index 0 Size 0 我忘记截图了哈哈哈 记录一下错误原因 找了老半天 ok 出现这种错误是数组值没有取到 我们可以在取值之前加一个判断
  • 微信人人商城云服务器,微信支付 · 微智人人商城使用文档 · 看云

    支付管理 添加新模板 https box kancloud cn a39c011c0de721adce0ebef9b95162d4 1151x763 png 公众号appid获取方法 登陆公众平台 左侧导航 开发 基本配置 开发者ID AP
  • C# 将时间戳 byte[] 转换成 datetime 的几个方法

    推荐方法 DateTime now DateTime Now byte bts BitConverter GetBytes now ToBinary DateTime rt DateTime FromBinary BitConverter
  • LLM的用法

    一 生成表格 推测以下评价内容的情绪 情绪只包括 客观 积极 消极 输出表格 格式 编号 段落前10个字摘要 情绪判断 1 这东西给用户最大的门槛就是 描述是否精准 你描述的越精准 他给你的答案也就越精准 所以那些根本不知道自己需求是什么的
  • Android面试必备的JVM虚拟机制详解,看完之后简历上多一个技能!

    掌握了本篇知识之后 简历上就可以多加一条个人技能了 熟悉 JVM 相关知识 包括内存区域 内存模型 GC 类加载机制 编译优化等 下面就是正文了 欢迎讨论 目录 内存区域 内存模型 内存分配回收策略 Java 对象的创建 内存布局和访问定位
  • 蓝桥杯 算法训练 拿金币(java)

    蓝桥杯 算法训练 拿金币 java 题 试题 算法训练 拿金币 资源限制 时间限制 1 0s 内存限制 256 0MB 问题描述 有一个N x N的方格 每一个格子都有一些金币 只要站在格子里就能拿到里面的金币 你站在最左上角的格子里 每次
  • 6.ES基础概念及术语详细解读

    一 Elasticsearch概述 ES是基于Lucene的搜索服务器 它提供了一个分布式多用户能力的全问搜索引擎 且ES支持RestFulweb风格的url访问 ES是基于Java开发的开源搜索引擎 设计用于云计算 能够达到实时搜索 稳定
  • js数组的顺序排序、完全随机打乱排序 总结

    一 顺序排序 1 按字符编码排序 sort var testArray 23 500 1000 300 34 2 testArray sort alert testArray 2 1000 23 300 34 500 2 将数组元素倒序排
  • unittest测试框架+ddt数据驱动

    unittest测试框架 unittest测试框架 四个核心组件 TestCase Testfixure TestSuite testRunner assert impront unittest测试框架 在编写接口自动化测试用例时 如果不采