【二、自动化测试】unittest测试框架简介

你好啊!我是程序员山茶,你也可以称我为测试开发Guide。本文首发“unittest”

每个语言都包含有自己的测试框架,python中同样有很多测试框架,具体如下

  • unittest: unittest是Python自带的单元测试框架,它提供了类和方法来编写和组织测试用例,以及各种断言方法用于验证结果

  • pytest: 是一个第三方的Python测试框架,它具有简洁的语法和丰富的功能集。支持自动发现测试文件和函数,提供了强大的断言方法,以及插件生态系统,可以扩展测试功能

  • nose:是另一个流行的第三方测试框架,它建立在unittest之上,提供了更简洁的语法和额外的功能,如自动发现测试、测试生成器、测试覆盖率报告等

  • doctest: doctest是Python标准库中的一个模块,它允许在文档字符串中编写测试用例。doctest将文档中的示例代码提取出来,并自动运行并验证结果,以确保示例代码的正确性

  • Testify: 一个相对较新的Python单元测试框架,它提供了一套简洁而强大的工具和断言方法,用于编写单元测试和集成测试

  • behave:behave是一个行为驱动开发(BDD)框架,它使用自然语言来描述系统行为,并将这些描述转化为可执行的测试用例

本文主要介绍unittest框架。

unittest框架是一个功能强大的单元测试工具,不仅适用于单元测试,还可用于web自动化测试。它提供了丰富的断言方法,可组织和执行测试用例,并生成测试结果

unittest基础概念

  • TestCase测试用例,一个TestCase就是一条测试用例

  • TestSuite测试套件,多条TestCase测试用例集合。TestSuite可以嵌套TestSuite,即测试用例集合数据可以是测试用例集合

  • TestRunner执行测试,执行测试用例套件

  • TestFixture对一个测试环境的搭建和销毁,被称为一个Fixture,比如数据库连接关闭、测试环境数据清理、启动关闭服务进程

  • TestLoader是unittest框架中的一个类,用于将TestCase加载到TestSuite中。它提供了几个loadTestsFrom__()方法,这些方法用于从不同的源中寻找TestCase并创建它们的实例。它们会将这些TestCase实例添加到TestSuite中,并返回一个包含TestCase的TestSuite实例

unittest使用原则

使用原则

  • 测试模块引入 import unittest

  • 测试类必须继承 unittest.TestCase

  • 测试方法必须以“test开头”,执行顺序按照开头字符串ASCII码升序执行。

测试类和测试方法

断言方法

以下断言方法是unittest框架中的一部分,用于在测试过程中进行验证和断言

序号

方法

校验内容

1

assertEqual(a, b)

断言a等于b

2

assertNotEqual(a, b)

断言a不等于b

3

assertTrue(x)

断言x为True

4

assertFalse(x)

断言x为False

5

assertls(a, b)

断言a和b是同一个对象

6

assertlsNot(a, b)

断言a和b不是同一个对象

7

assertlsNone(x)

断言x为None

8

assertlsNotNone(x)

断言x不为None

9

assertln(a, b)

断言a包含在b中

10

assertNotln(a, b)

断言a不包含在b中

11

assertlslnstance(a, b)

断言a是b的实例

12

assertNotlsInstance(a, b)

断言a不是b的实例

执行测试

执行测试全局执行测试使用" unittest.main()"方法

一个简单的unittest示例

如下测试用例,用到了上文中的使用原则,继承了unittest.TestCase同时测试方法以test开头,且增加了测试类setUpClass、tearDownClass及测试方法setUp、tearDown

# 引入unittest模块
import unittest# 创建测试类,继承unittest.TestCase
class TestApi(unittest.TestCase):#   测试方法,每执行一次test的测试方法就会执行一次def setUp(self) -> None:print("setUp方法")def tearDown(self) -> None:print("tearDown方法")#   测试类,以@classmethod修饰测试类,且在过程中仅执行一次#   如果遇到问题请联系我,添v加x:test_shancha01 私信公众号:程序员山茶@classmethoddef setUpClass(cls) -> None:print("setUpClass每个类执行一次")@classmethoddef tearDownClass(cls) -> None:print("tearDownClass每个类执行一次")def test_01(self):a = 1b = 2c = a + b# 断言 判断c和3是否相同self.assertEqual(c, 3)def test_02(self):a = 2b = 3c = a * b#断言 判断c和6是否相同self.assertEqual(c, 6)if __name__ == '__main__':# 执行所有的以test为开头的测试用例unittest.main()

作者简介:

程序员山茶,一个工作5年,并坚持探索测试之路的测试开发工程师。曾混迹于互联网大厂、IOTA行业领航企业、安全行业、大数据行业领航企业,欢迎和我一起沟通交流。

欢迎关注我,  和我一起探索测试之路,终身成长

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/621745.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Umi-OCR:开源、免费、离线、多功能的 OCR 图片文字识别软件

两个版本 官方版本说明 不同版本仅OCR引擎插件不同,其它功能完全一致。 均支持 win7 x64 及以上的系统,附带多国语言识别库。 .7z.exe为自解压包,可以用压缩软件打开,也可以在没有安装压缩软件的电脑上直接双击解压。 Paddle 引…

Docker安装Elasticsearch8详细步骤

前面讲了Elasticsearch7的安装步骤,今天讲讲Elasticsearch8的安装,大同小异。 1、配置环境变量 .env 文件设置运行 docker-compose.yml 配置文件时使用的环境变量。 确保使用 ELASTIC_PASSWORD 和 KIBANA_PASSWORD 变量为 elastic 和 kibana_system 用…

基于机器学习的高考志愿高校及专业分析系统

本项目在“基于 Python 的高考志愿高校及专业分析系统”基础上补充添加了机器学习算法对高考总问进行预测; 项目采用了网络爬虫技术,从指定的高考信息网站上抓取了各大高校的历年录取分数线数据。 通过精细的数据清洗过程,这些数据被存储于…

前端开发vscode 常用插件记录

通用插件: 一、live Server 主要作用是提供一个本地开发服务器,以便实时预览和调试网页应用程序。 二、css peek 它的主要作用是帮助开发人员更轻松地查找和导航CSS样式表中的类、ID、选择器和样式定义(鼠标移动到css样式名即可查看样式&…

云计算任务调度仿真02

前面已经分享过一个仿真项目,但是基于policy gradient方法实现的,考虑到许多人从零到一实现DQN方法有点难度,所以这次分享一个基于DQN实现的仿真项目,非常简单。 这里之所以简单主要得益于它是用pytorch实现的,而pyto…

NLP论文阅读记录 - 2022 W0S | 基于Longformer和Transformer的提取摘要层次表示模型

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.相关工作三.本文方法四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结思考 前言 A Hierarchical Representation Model Based on Longformer and …

GPT-4技术报告的解读(一)

OpenAI在技术报告中介绍了GPT-4,这是一个大型多模态模型,能够接受图像和文本输入,并生成文本输出。GPT-4基于Transformer架构构建,在经过大规模预训练后能预测文档中的下一个令牌,并通过后期的强化学习从人类反馈&…

Cuda编程——使用share memory优化矩阵乘法

在上一篇文章:第一个Cuda程序,矩阵相乘代码,我们设计了一种并行的矩阵乘法程序,效果和使用CPU计算的一样,但时间有了很大的降低,然而,这只是最基本的一种方法,事实上我们完全可以让程…

服务器网络安全防护措施有哪些?

由于服务器发挥着至关重要的作用,因此存储在服务器上的机密数据和信息非常具有价值。如今有一种流行的说法,“数据就是新的石油”。 如果不确定如何保护服务器安全,或者不确定是否已涵盖所有基础知识,那么可以了解下面提供一些可…

Pandas实战100例 | 案例 10: 应用函数 - 使用 `apply`

案例 10: 应用函数 - 使用 apply 知识点讲解 Pandas 的 apply 函数是一个非常强大的工具,允许你对 DataFrame 中的行或列应用一个函数。这对于复杂的数据转换和计算非常有用。你可以使用 apply 来执行任意的函数,这些函数可以是自定义的,也…

Unity游戏图形学 Shader结构

shader结构 shader语言 openGL:SLG跨平台 >GLSL:openGL shaderlauguge DX:微软开发,性能很好,但是不能跨平台 >HLSL:high level shader language CG:微软和Nvidia公司联合开发&#xff…

open3d相关操作总结

open3d其实有很多交互式命令,在运行程序打开了open3d渲染的窗口后,鼠标点击窗口,按H就会弹出,交互命令的帮助,如下图所示: 其中比较常用的有: Q :退出当前窗口 H:打印帮…

5 - 异常处理

目录 1. 总览 1.1 Exception 与 Error 1.2 checked unchecked 异常 1)使用 try-catch 进行捕获 2)使用 throws 关键字抛出 1.3 throw 与 throws 1)throw 2)throws 3)区别 1.4 try-catch-finally 2. try wit…

Airflow大揭秘:如何让大数据任务调度变得简单高效?

介绍:Airflow是一个开源的、用于创建、调度和监控数据管道的工作流平台。这个平台使用Python编写,并通过有向无环图(Directed Acyclic Graph, DAG)来管理任务流程,使得用户不需要知道业务数据的具体内容,只…

Python爬虫学习笔记(一)---Python入门

一、pycharm的安装及使用二、python的基础使用1、字符串连接2、单双引号转义3、换行4、三引号跨行字符串5、命名规则6、注释7、 优先级not>and>or8、列表(list)9、字典(dictionary)10、元组(tuple)11…

SDRAM小项目——写模块

写模块跟着视频看了一个多星期,一开始始终有点弄不清楚,现在记录一下理解的过程。 阅读文档信息: 首先阅读文档信息,了解SDRAM写过程的状态转换和时序图 SDRAM整体状态流程如图所示: 在SDRAM整体系统中&#xff0c…

【算法小课堂】动态规划

动态规划 动态规划相信大家都知道,动态规划算法也是新手在刚接触算法设计时很苦恼的问题,有时候觉得难以理解,但是真正理解之后,就会觉得动态规划其实并没有想象中那么难。网上也有很多关于讲解动态规划的文章,大多都…

Java--业务场景:在Spring项目启动时加载Java枚举类到Redis中(补充)

文章目录 前言步骤测试结果 前言 通过Java–业务场景:在Spring项目启动时加载Java枚举类到Redis中,我们成功将Java项目里的枚举类加载到Redis中了,接下来我们只需要写接口获取需要的枚举值数据就可以了,下面一起来编写这个接口吧。 步骤 在…

mysql-bin日志清理,并设置expire_logs_days时间,mysql占用空间过大问题

mysql-bin日志清理,并设置expire_logs_days时间,mysql占用空间过大问题 文章目录 问题查看mysql配置参数解决全局修改参数清理日志规则手动清理my.cnf 外传 问题 最近发现生产环境的服务器磁盘空间吃紧,查下到底是哪里占用的空间比较大&…

leetcode238:除自身以外数组的乘积

文章目录 1.使用除法(违背题意)2.左右乘积列表3.空间复杂度为O(1)的方法 在leetcode上刷到了这一题,一开始并没有想到好的解题思路,写篇博客再来梳理一下吧。 题目要求: 不使用除法在O(n)时间复杂度内 1.使用除法&am…