【Python单元测试】学习笔记3
文章目录
- 08.PyTest框架
- 什么是PyTest
- PyTest的优点
- PyTest的测试环境
- PyTest常用参数
- 跳过测试
- 09.PyTest fixture基础
- PyTest fixture定义和使用
- 引用多个Fixture
- 10. conftest.py
- conftest.py的用途
- 11. 参数化测试用例
- 为什么需要参数化测试用例
- 使用parameterizer插件实现
- 使用pytest实现
python单元测试学习笔记1: https://blog.csdn.net/qq_42761751/article/details/141144477?spm=1001.2014.3001.5501
python单元测试学习笔记2 :https://blog.csdn.net/qq_42761751/article/details/141202123?spm=1001.2014.3001.5501
python单元测试学习笔记3 : https://blog.csdn.net/qq_42761751/article/details/141233236?spm=1001.2014.3001.5501
08.PyTest框架
unittest是python内置的框架,pytest是第三方测试框架,在目前实际应用中比较流行
- 什么是PyTest
- PyTest的优点
- PyTest的测试环境
- PyTest的常用参数
- 跳过测试
什么是PyTest
PyTest是一个基于Python语言的第三方的测试框架
PyTest的优点
- 语法简单
- 自动检测测试代码
- 跳过指定测试
- 开源
PyTest的测试环境
安装PyTest
pip install pytest
运行PyTest
# -v 可以显示详细信息
pytest -vpytest -v test_xxx.py
- 自动查找test_*.py, *_test.py测试文件
- 自动查找测试文件中的test_开头的函数和Test开头的类中的test_开头的方法。如果不是test_开头的函数或者不是Test开头的类中的test_开头的方法是不会被执行的
- 之前unittest的代码不用改变,可以直接用pytest执行
代码示例:
class Student:def __init__(self, id, name) -> None:self.id = idself.name = name def test_student():student = Student(id=1, name="Jack")assert student.id ==1assert student.name == "Jack"class TestStudent:def test_student(self):student = Student(id=1, name="Jack")assert student.id ==1assert student.name == "Jack"
PyTest常用参数
-v : 输出详细的执行信息,比如文件及用例名称等
-s:输出调试信息,比如print的打印信息
-x:遇到错误用例立即停止
跳过测试
跳过测试的方式有两种
- @pytest.mark.skip 无论如何都跳过
- @pytest.mark.skipif
import sys
import pytest
def is_skip():# 判断是否为MacOS操作系统return sys.platform.casefold() == "darwin".casefold()# @pytest.mark.skip(reason="hahaha") # 无论如何都跳过
@pytest.mark.skipif(condition=is_skip(), reason="skip on macos") # 如果is_skip返回是True就跳过,is_skip不是True就不跳过
def test_student():student = Student(id=1, name="Jack")assert student.id ==1assert student.name == "Jack"
09.PyTest fixture基础
PyTest fixture定义和使用
使用@pytest.fixture定义
定义一个student.py
class Student:def __init__(self, id, name) -> None:self.id = idself.name = namedef rename(self, new_name: str) ->bool:if 3 < len(new_name) < 10:self.name = new_namereturn Truereturn False def vaild_student(self) ->bool:if self.name:return 3 < len(self.name) < 10
测试代码:
import pytest
from student import Studentclass TestStudent:@pytest.fixturedef vaild_student(self):"""使用yield很方便在测试用力之前做setup, 之后做cleanup"""student = Student(id=1, name = "Mary")# setup....yield student# cleanup...def test_rename_false(self, vaild_student):# setupnew_name = "dsadadddddddddasssssssssssss"excepted_result = False# Actionactural_result = vaild_student.rename(new_name)# assertassert actural_result == excepted_result
引用多个Fixture
- 一个unit test或fixture可以使用多个其他的fixture:
import pytest@pytest.fixture
def student():yield Student()@pytest.fixture
def course():yield Course()def test_regisiter_course(student, course):...
- 一个fixture可以被一个test引用多次
@pytest.fixture
def student():return Student()@pytest.fixture
def course():return Course()@pytest.fixture
def course_student(course, student):course.add_student(student)return coursedef test_regisiter_course(course_student, course):...
10. conftest.py
conftest.py的用途
使得fixture可以被多个文件中的测试用例复用
在项目目录下直接新建conftest.py:
import pytest@pytest.ficture
def male_student_fixture():student = Student(id =1, name = "Jack")
在测试代码中可直接使用,pytest会自动找到这个文件:
def test_vaild_gender_true(self, male_student_fixture):expected_result = Trueactural_result = male_student_fixture.vaild_gender()assert actual_result == expected_result
方式2:在conftest.py中引入fixture(建议使用这种方式)
# conftest.py
import pytest
from student_fixture import male_student_fixture
11. 参数化测试用例
为什么需要参数化测试用例
针对同一个被测试函数需要进行多组数据的测试,比如测试一个奇偶性判断的函数,我们一个可以n个数一起测试写到一个测试函数中,而不是每个数单独写一个测试函数
使用parameterizer插件实现
安装parameterizer
pip install parameterized
测试代码:(为了方便将代码与测试代码放在一个py文件下)
class Calculator:def add(self, *args):result = 0for n in args:result += nif n==2:result += 5return resultdef is_odd(self, num:int)->bool:return num%2 !=0import unittest
import parameterized
class TestCalculator(unittest.TestCase):@parameterized.expend([[1,True], [2, False]])def test_is_odd(self,num, excepted_out):# SetUpcal = Calculator()# Actionactural_result = cal.is_odd(num)# assertassert actural_result == excepted_out
使用pytest实现
import pytest
@pytest.mark.parametrize("num, excepted_result", [(1, True), (2,False)])
def test_is_odd(num, excepted_result):# setupcal = Calculator()# Actionresult = cal.is_odd(num)# assertassert result == excepted_result
本文参考:https://www.bilibili.com/video/BV1z64y177VF/?spm_id_from=pageDriver&vd_source=cf0b4c9c919d381324e8f3466e714d7a
相关文章:
【Python单元测试】学习笔记3
文章目录 08.PyTest框架什么是PyTestPyTest的优点PyTest的测试环境PyTest常用参数跳过测试 09.PyTest fixture基础PyTest fixture定义和使用引用多个Fixture 10. conftest.pyconftest.py的用途 11. 参数化测试用例为什么需要参数化测试用例使用parameterizer插件实现使用pytest…...
OpenSSL源码编译及Debug
** 1. 环境 Linux 5.19.0-14-generic 22.04.1-Ubuntu 2. 所需工具 gcc version 11.3.0 (Ubuntu 11.3.0-1ubuntu1~22.04) cmake version 3.22.1 3. 步骤 3.1 获取openssl源码 方法可以git clone获得源码,或者直接去GitHub上下载压缩包,GitHub网址…...
go之goburrow/modbus 学习
goburrow/modbus 是一个用Go语言实现的Modbus协议库,提供了Modbus主机(Master)和从机(Slave)的实现,支持两种主要的Modbus传输模式:Modbus TCP和Modbus RTU。 功能介绍 1. 支持的传输模式 Mod…...
开放词汇目标检测(Open-Vocabulary Object Detection, OVOD)算法是什么?
开放词汇目标检测(Open-Vocabulary Object Detection, OVOD)算法是什么? 随着计算机视觉技术的快速发展,目标检测(Object Detection)已经在各种应用场景中得到了广泛的应用。然而,传统的目标检…...
【教程】Ubuntu给pycharm添加侧边栏快捷方式
转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 以下教程不仅限于pycharm,其他软件也是一样操作 1、进入到pycharm的目录,先通过命令行打开pycharm: ./bin/pycharm…...
三个月外贸小白好迷茫,该何去何从?
最近看到一个共性的问题,也许对于大多数外贸新人来说,都有过这样的困扰和无力感,也许对于每一个没有强大背景的外贸小伙伴来说,可能都是这样一路成长起来的。 大家好,我是一名普通二本英专生,八月中旬入职…...
MySQL数据库——基本查询(Create)
CRUD:Create(创建)Retrieve(读取)Update(更新)Delete(删除) 1.Create ①单行数据全列插入 insert [into] table_name [(colume[,colume]……)] values (value_list) […...
spring-security-1-快速入门
1 功能 身份认证(authentication)授权(authorization)防御常见攻击 身份认证:常见账号密码登录,短信登录 授权:什么样的角色,能看见什么菜单,能访问哪些接口。 2 pom <dependency><groupId>org.springf…...
5 大场景上手通义灵码企业知识库 RAG
大家好,我是通义灵码,你的智能编程助手!最近我又升级啦,智能问答功能全面升级至 Qwen2,新版本在各个方面的性能和准确性都得到了显著提升。此外,行间代码补全效果也全面优化,多种编程语言生成性…...
免费远程控制电脑的软件有哪些?
什么是远程控制? 远程控制是一种通过网络从一台设备操作另一台设备的技术。连接后,用户可以直接远程操作那台电脑进行各种操作。随着科技的不断进步和用户需求的增加,远程控制市场日益蓬勃。远程控制不仅应用于远程办公和远程教学࿰…...
Linux软件包yum
目录 Linux软件包管理器 yum关于rzsz注意事项查看软件包如何安装软件卸载命令 Linux开发工具Linux编辑器-vim使用1. vim的基本概念2. vim的基本操作3. vim正常模式命令集4. vim末行模式命令集5. vim操作总结 小彩蛋 Linux软件包管理器 yum 软件包 在Linux下安装软件ÿ…...
网页的切换与嵌套
网页的切换与嵌套 网页的切换 在浏览器窗口中如果点击超链接标签会在当前的浏览器窗口中显示新的数据,但有些超链接标签点击后却会在一个新的窗口显示数据,这种情况下就无法对新的开的窗口页面进行操作了。 基于这种情况,我们就需要使用dri…...
基于飞桨框架的稀疏计算使用指南
本文作者-是 Yu 欸,华科在读博士生,定期记录并分享所学知识,博客关注者5w。本文将详细介绍如何在 PaddlePaddle 中利用稀疏计算应用稀疏 ResNet,涵盖稀疏数据格式的础知识、如何创建和操作稀疏张量,以及如何开发和训练…...
启明云端WT32C3-S6物联网模块,乐鑫ESP32-C3芯片技术应用
随着物联网技术的飞速发展,智能设备在我们生活中的应用越来越广泛。从智能电网到远程医疗,从楼宇自动化到智能家居,这些技术正在改变我们的生活方式。 在这样的背景下,启明云端推出的WT32C3-S6 WiFi模块以其低功耗、高性价比的特…...
超越流水线,企业研发规范落地新思路
作者:子丑 内容大纲: 1、研发规范≠流程约束 2、自动化工具→研发规范载体 3、研发规范在工具上的落地示例 4、研发规范的选型方法与常见实践 研发规范≠流程约束 这个故事特别适合研发规范的场景,我们要避免成为把猫绑在柱子上的信众…...
财务会计与管理会计(四)
文章目录 月度数据统计分析OFFSET函数在图表分析中的应用 多种费用组合分析图SUMPRODUCT函数 省公司全年数据分析模板INDIRECT、OFFSET函数 多公司分季度数据筛选VLOOKUP、IFERROR函数的应用 淘宝后台数据分析OFFSET函数在跨表取数中的应用 燃气消耗台账数据统计分析图SUMPRODU…...
回归分析系列1-多元线性回归
03 多元线性回归 3.1 简介 多元线性回归是简单线性回归的扩展,允许我们同时研究多个自变量对因变量的影响。多元回归模型可以表示为: 其中,x1,x2,…,xp是 p 个自变量,β0 是截距,β1,β2,…,βp是对应的回归系数&…...
web小游戏开发:拼图——蜂巢拼图
web小游戏开发:拼图——蜂巢拼图 蜂巢拼图游戏规则调整选项切图计算六边形的宽和高铺上背景画出蜂巢制作图块游戏方法打乱排列拖拽图块开始拖拽拖拽移动放置图块小结蜂巢拼图 之前我们已经完成了长方形的拼图代码,包括了三个游戏方式,并讨论了带咬合齿的游戏代码该如何制作…...
springCloud集成activiti5.22.0流程引擎(分支)
springCloud集成activiti5.22.0流程引擎 点关注不迷路,欢迎再访! 精简博客内容,尽量已行业术语来分享。 努力做到对每一位认可自己的读者负责。 帮助别人的同时更是丰富自己的良机。 文章目录 springCloud集成activiti5.22.0流程引擎一.Sprin…...
ppt模板免费网站有哪些?自动美化工具推荐
新的8月,是时候以全新面貌迎接高效办公挑战了! 想要你的PPT演示脱颖而出,却苦于找不到精美又免费的模板? 别担心,今天我来告诉你们:哪个软件有精美免费ppt模板? 今天我为你们精心汇总了6款PPT…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
ThreadLocal 源码
ThreadLocal 源码 此类提供线程局部变量。这些变量不同于它们的普通对应物,因为每个访问一个线程局部变量的线程(通过其 get 或 set 方法)都有自己独立初始化的变量副本。ThreadLocal 实例通常是类中的私有静态字段,这些类希望将…...
深入理解 React 样式方案
React 的样式方案较多,在应用开发初期,开发者需要根据项目业务具体情况选择对应样式方案。React 样式方案主要有: 1. 内联样式 2. module css 3. css in js 4. tailwind css 这些方案中,均有各自的优势和缺点。 1. 方案优劣势 1. 内联样式: 简单直观,适合动态样式和…...
基于django+vue的健身房管理系统-vue
开发语言:Python框架:djangoPython版本:python3.8数据库:mysql 5.7数据库工具:Navicat12开发软件:PyCharm 系统展示 会员信息管理 员工信息管理 会员卡类型管理 健身项目管理 会员卡管理 摘要 健身房管理…...
持续交付的进化:从DevOps到AI驱动的IT新动能
文章目录 一、持续交付的本质:从手动到自动的交付飞跃关键特性案例:电商平台的高效部署 二、持续交付的演进:从CI到AI驱动的未来发展历程 中国…...
GitHub 常见高频问题与解决方案(实用手册)
1.Push 提示权限错误(Permission denied) 问题: Bash Permission denied (publickey) fatal: Could not read from remote repository. 原因: 没有配置 SSH key 或使用了 HTTPS 而没有权限…...
2025年全国I卷数学压轴题解答
第19题第3问: b b b 使得存在 t t t, 对于任意的 x x x, 5 cos x − cos ( 5 x t ) < b 5\cos x-\cos(5xt)<b 5cosx−cos(5xt)<b, 求 b b b 的最小值. 解: b b b 的最小值 b m i n min t max x g ( x , t ) b_{min}\min_{t} \max_{x} g(x,t) bmi…...
