【二、自动化测试】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,一经查实,立即删除!

相关文章

Docker安装Elasticsearch8详细步骤

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

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

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

云计算任务调度仿真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 …

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中了,接下来我们只需要写接口获取需要的枚举值数据就可以了,下面一起来编写这个接口吧。 步骤 在…

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

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

新一代数字原住民:市场痛点与“繁”思维应对之道

随着科技的迅速发展,尤其是互联网的普及,新一代数字原住民经营者已经逐渐成为市场的主力军。不同于传统的消费者,有着独特的消费习惯和心理需求。企业要在这激烈的市场竞争中获得优势,深入了解这一群体的特征和心理、行为&#xf…

有趣的事,讲给有趣的人听

哈哈哈,今天不写技术了,今天分享一下生活,技术我们什么时候都可以学,但是生活更值得我们现在就去更好的体验! 两年多的涤生大数据,认识了形形色色的小伙伴,陆续沟通下来6000多人,彼时…

数据库锁表原因、排查、解决

一.场景 场景1场景2二.原因三.排查四.解决方案 一.场景 场景1 锁表通常发生在DML( insert 、update 、delete ) A操作进行全量数据同步,对整个表的粒度进行上锁,导致B操作只能等待A操作完成才能进入插入数据。此时就出现了锁表…

Elasticsearch windows开箱即用【记录】

一、准备工作 安装ES之前要在本机安装好JDK,对应的兼容性见官网链接:https://www.elastic.co/cn/support/matrix ES官网链接:https://www.elastic.co/cn/, 我本机安装的是JDK8,测试使用的是7.3.0版本的ES和Kibana。 1、首先去…

PyTorch项目源码学习(3)——Module类初步学习

torch.nn.Module Module类是用户使用torch来自定义网络模型的基础,Module的设计要求包括低耦合性,高模块化等等。一般来说,计算图上所有的子图都可以是Module的子类,包括卷积,激活函数,损失函数节点以及相…

完成源示例

本主题演示如何创作和使用自己的完成源类&#xff0c;类似于 .NET 的 TaskCompletionSource。 completion_source 示例的源代码 下面的列表中的代码作为示例提供。 其目的是说明如何编写自己的版本。 例如&#xff0c;支持取消和错误传播不在此示例的范围内。 #include <w…

VR全景技术如何应用在城市发展,助力城市宣传展示

引言&#xff1a; 随着科技的不断发展&#xff0c;VR全景技术正逐渐渗透到各行各业&#xff0c;其中较为广泛的应用之一便是城市展示。那么VR全景技术如何运用在城市展示领域&#xff0c;这项技术给城市发展带来了哪些好处&#xff1f; 一. VR全景技术简介 1.什么是VR全景技术…