【python实操】python小程序之参数化以及Assert(断言)
引言
python小程序之参数化以及Assert(断言)
文章目录
- 引言
- 一、参数化
- 2.1 题目
- 2.2 代码
- 2.3 代码解释
- 二、Assert(断言)
- 2.1 概念
- 2.1.1 Assert语句的基本语法:
- 2.1.2 基本断言
- 2.1.3 断言函数参数
- 2.1.4 断言前后状态一致
- 2.2 题目
- 2.3 代码
- 2.3.1 tool模块代码
- 2.3.2 断言代码
- 2.4 代码解释
- 三、思考
- 3.1 参数化
- 3.2 Assert(断言)
一、参数化
2.1 题目
如何参数化
2.2 代码
import unittest
from parameterized import parameterized
from tools import logindata = [('admin', '123456', '登录成功'),('root', '123456', '登录失败'),('admin', '123123', '登录失败')
]class TestLogin2(unittest.TestCase):def test_login(self, username, passwprd, expect):self.assertEqual(expect,login(username, passwprd))
输出结果:
2.3 代码解释
这段python代码使用
unittest
框架和parameterized
扩展来编写参数化的单元测试用例,用于测试login
函数
import unittest
这行代码导入了Python标准库中的unittest
模块,它是一个用于编写和运行测试的框架
from parameterized import parameterized
这行代码从parameterized
模块中导入了parameterized
装饰器,它允许我们为测试用例提供多个参数集,从而可以重复运行同一个测试方法,每次使用不同的参数
from tools import login
这行代码从名为tools
的模块中导入了一个名为login
的函数,这个函数是测试的目标
data = [('admin', '123456', '登录成功'),('root', '123456', '登录失败'),('admin', '123123', '登录失败')
]
这里定义了一个名为data
的列表,其中包含了多个元组。每个元组代表一组测试数据,包含用户名、密码和期望的登录结果
class TestLogin2(unittest.TestCase):
这行代码定义了一个名为TestLogin2
的类,用于包含登录功能的测试用例,它继承自unittest.TestCase
def test_login(self, username, password, expect):self.assertEqual(expect, login(username, password))
这是一个测试方法,名为test_login
,它使用parameterized
装饰器来接受不同的参数集。该方法测试login
函数,传入用户名和密码,并使用assertEqual
断言来检查login
函数的返回值是否与期望的结果expect
相等
为了使test_login
方法能够接受参数,需要使用parameterized.expand
来装饰该方法,并提供参数列表
二、Assert(断言)
2.1 概念
在python中,断言(Assertion)是通过内置的
assert
语句实现的。assert
语句用于检查一个条件是否为真,如果条件不为真,则会引发一个AssertionError
异常。这通常用于开发和测试阶段,以验证代码中的假设和不变量
2.1.1 Assert语句的基本语法:
assert condition, [error_message]
condition
:一个表达式,如果该表达式为False
,则会引发异常。error_message
(可选):当condition
为False
时,assert
语句引发的AssertionError
异常的详细信息
2.1.2 基本断言
x = 1
assert x > 0, "x should be positive"
如果x
大于0,上面的代码什么也不会发生。但如果x
不大于0,将会引发一个AssertionError
,并且错误消息将是"x should be positive"
2.1.3 断言函数参数
def check_positive(number):assert number > 0, f"The number {number} is not positive"return number
check_positive(-5)
当调用check_positive(-5)
时,会引发一个AssertionError
,因为-5
不是正数。
2.1.4 断言前后状态一致
def update_data(data, key, value):old_value = data.get(key)assert old_value is not None, f"Key {key} not found in data"data[key] = valueassert data[key] == value, "Value was not updated correctly"return data
data = {'a': 1}
update_data(data, 'a', 2)
assert
用于检查在更新字典之前键是否存在,以及更新后值是否正确
2.2 题目
如何使用断言
2.3 代码
2.3.1 tool模块代码
def addc(a, b):return a+b
2.3.2 断言代码
import unittest
from tools import addcclass TestAdd(unittest.TestCase):def test_3_5(self):self.assertEqual(8, addc(3, 5))def test_15_89(self):self.assertEqual('sad a', addc(15, 89))
2.4 代码解释
这段代码是一个使用python的
unittest
框架编写的测试案例,它用于测试一个名为addc
的函数。这个函数应该是在另一个模块tools
中定义的
-
import unittest
: 导入了Python的标准单元测试框架unittest
,这个框架提供了创建和运行测试的工具 -
from tools import addc
: 假设tools
模块包含了一个名为addc
的函数,这里将其导入以便在测试类中使用 -
class TestAdd(unittest.TestCase)
: 定义了一个名为TestAdd
的测试类,它继承自unittest.TestCase
。这意味着它可以包含多个测试方法,每个方法都是对addc
函数的一次独立测试 -
def test_3_5(self)
: 这是一个测试方法,名字表明它正在测试addc(3, 5)
的情况。在这个方法内部,使用self.assertEqual()
来验证addc(3, 5)
的结果应该是8
-
def test_15_89(self)
: 另一个测试方法,这次测试的是addc(15, 89)
的情况。期望的结果是一个字符串'sad a'
第一个测试方法发期望
addc(3, 5)
返回8
,这是合理的;这是另一个测试方法,名为test_15_89,它测试addc函数在传入参数15和89时的行为。self.assertEqual(‘sad a’, addc(15, 89))这行代码断言addc(15, 89)的返回值是否等于字符串’sad a’。如果返回值不是’sad a’,测试将失败
三、思考
3.1 参数化
parameterized
模块不是Python标准库的一部分,需要单独安装。可以使用pip install parameterized
来安装- 在实际测试中,
login
函数应该返回一个值,该值与expect
进行比较,以验证登录功能是否按预期工作 - 如果
login
函数的返回值与expect
不匹配,测试将不会通过,并且unittest
会提供错误信息
3.2 Assert(断言)
- 断言可能会在生产环境中被禁用,因为它们可能会影响性能。python可以通过设置
-O
(优化)标志来禁用断言 - 断言不应该用于处理正常的运行时错误,它们主要用于开发和测试阶段
- 断言失败时,应该提供足够的信息来帮助调试问题,这就是为什么通常会包含一个错误消息
相关文章:
【python实操】python小程序之参数化以及Assert(断言)
引言 python小程序之参数化以及Assert(断言) 文章目录 引言一、参数化2.1 题目2.2 代码2.3 代码解释 二、Assert(断言)2.1 概念2.1.1 Assert语句的基本语法:2.1.2 基本断言2.1.3 断言函数参数2.1.4 断言前后状态一致 2…...
探索CSS动画下的按钮交互美学
效果演示 这段代码通过SVG和CSS动画创建了一个具有视觉吸引力的按钮,当用户与按钮交互时(如悬停、聚焦或按下),按钮会显示不同的动画效果。 HTML <button class"button"><div class"dots_border"…...
241024-Ragflow离线部署Docker-Rootless环境配置修改
A. 最终效果 B. 文件修改 docker-compose.yml include:- path: ./docker-compose-base.ymlenv_file: ./.envservices:ragflow:depends_on:mysql:condition: service_healthyes01:condition: service_healthyimage: ${RAGFLOW_IMAGE}container_name: ragflow-serverports:- ${…...
网络基础概念:广播域、冲突域与VLAN解析
一、网络基础概念 在现代计算机网络中,广播域、冲突域和虚拟局域网(VLAN)是网络架构和管理的核心概念。了解这些概念对网络性能优化、流量管理和安全性提升至关重要。 二、广播域 1. 定义 广播域是一个网络逻辑区域,在这个区域…...
【MySQL】C语言连接MySQL数据库3——事务操作和错误处理API
目录 1.MySQL事务处理机制 1.1.autocommit 1.2.autocommit的设置与查看 1.3.使用示例 2.事务操作API 2.1.设置事务提交模式——mysql_autocommit() 2.2.提交事务——mysql_commit() 2.3.事务回滚——mysql_rollback() 3.错误处理的API 3.1.返回错误的描述——mysql_er…...
ARM嵌入式学习--第六天(电子电路基础知识)
电子电路基础知识 -基本元器件 -电阻 电阻(Resistance,通常用“R”表示),表示导体对电流的阻碍作用的大小;电阻导体本身的一种特性;超导体没有电阻,作用是用来降压 上拉电阻:将状态…...
JAVA----单例模式
1.单例模式概念: 单例模式是一种设计模式,他的核心是确保一个类只有一个实例,单例模式主要有两种方式:饿汉式与懒汉式 2.饿汉式 饿汉就是一个迫切的意思,类加载就会导致该单实例被创建 饿汉式第一种方式:…...
基于递推式最小二乘法的PMSM参数辨识MATLAB仿真模型
微❤关注“电气仔推送”获得资料(专享优惠) 模型简介 最小二乘法是一种回归估计法,适用于被辨识的参数与系统输出为线性关 系的情况。它是在一定数据量下,基于系统输出误差的平方和最小的准则对参 数进行辨识的方法。此模型通过…...
记录一次部署 k8s 集群无法启动
情况是这样的,k8s 集群(v1.31)所需要的组件已安装完成,通过 kubeadm init 已经安装部署成功,但是等几分钟,集群组件就一直在重启,查看日志是连接 etcd 超时,所以查看了 etcd 的日志&…...
Linux下MySQL8.x的编译安装与使用
Linux下MySQL的安装与配置 1. 安装环境初始化 1.1 查看是否安装过MySQL 如果使用rpm安装, 检查一下RPM PACKAGE rpm -qa | grep -i mysql # -i 忽略大小写 # 或者 yum list installed | grep mysql如果存在mysql-libs的旧版本包,显示如下 #存在 [rootlocalhost ~]…...
cpuinfo实践记录
py-cpuinfo 是一个用于获取 CPU 信息的 Python 库。它可以帮助你获取 CPU 的详细信息,如 CPU 型号、核心数、频率、缓存大小等。以下是对 py-cpuinfo 模块的详细介绍: 安装 你可以使用 pip 来安装 py-cpuinfo 库: pip install py-cpuinfo …...
【Java】ArrayList相关操作及其案例
ArrayList相当于集合,作为一种容器存储数据,与数组类似。不同的是,ArrayList中长度可变,而数组长度不可变。 ArrayList相关API 构造器 public ArrayList() 创建一个空的集合对象 ArrayList<String>arrnew ArrayList<>…...
手机pdf阅读器,用手机也能够阅读、编辑pdf文件
在日常的学习或办公过程中,PDF格式的文件是我们最常遇见的文件格式之一,那么为了更高效、便捷地处理这些文件,选择一款合适的PDF阅读器至关重要,可以帮助我们在阅读文件的同时还可以对文件进行适当编辑处理。今天小编给大家带来几…...
通过 Twitter Token 实现授权与操作
通过 Twitter Token 实现授权与操作 一、Twitter API 概览 1.1 Twitter API 简介 Twitter API 是 Twitter 公司提供的一种编程接口,它允许开发者访问 Twitter 的海量数据,包括用户信息、推文内容、关系网络等。通过这些接口,开发者可以创建应用程序,实现自动化的社交媒体…...
100个SSM框架(Spring + Spring MVC + MyBatis)毕业设计选题
100个SSM框架(Spring Spring MVC MyBatis)毕业设计选题 电子商务 综合性电子商务平台跨境电商管理系统社区团购平台二手商品交易网站农产品直销平台奢侈品鉴定与交易系统电子优惠券管理平台闪购秒杀系统个性化商品推荐系统多商户店铺管理平台 教育培训 在线教育课程平台智…...
STM32F1+HAL库+FreeTOTS学习17——事件标志组
STM32F1HAL库FreeTOTS学习17——事件标志组 1. 事件标志组1.1 事件标志组的的引入1.2 事件标志组简介1.3 事件标志组与队列、信号量的区别 2. 事件标志组下相关API函数2. 1 xEventGroupCreate()2. 2 xEventGroupCreateStatic()2. 3 vEventGroupDelete()2. 4 xEventGroupWaitBit…...
ElasticSearch基本概念
本文内容参考了田雪松老师编著的《Elastic Stack应用宝典》 对比关系型数据库 索引(Index)相当于库映射类型(Mapping Type)相当于表文档(Document)相当于行文档字段(Field)相当于列…...
fluent-ffmpeg操作MP3文件深入解析
软考鸭微信小程序 学软考,来软考鸭! 提供软考免费软考讲解视频、题库、软考试题、软考模考、软考查分、软考咨询等服务 引言 fluent-ffmpeg是一个功能强大的Node.js库,它为FFmpeg提供了一个流畅的接口。FFmpeg是一个著名的多媒体框架,以处理音频、视频和…...
做信创项目需要什么资质、信创产品认证标准?
信创项目需要企业具备一些特定的资质和认证,以证明其合规性和专业性。以下是做信创项目可能用到的一些资质: 1. 信息安全管理体系认证(ISO27001):该认证可以证明企业已经建立了完善的信息安全管理体系,能够…...
Spring i18n国际化
从源码MessageSource的三个实现出发实战springi18n国际化 - 简熵 - 博客园 import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.MessageSource; import org.spri…...
基于stm32的楼宇照明控制系统设计
基于stm32的楼宇照明控制系统设计 项目说明一、绪论1.1 研究背景1.2 研究意义1.4 研究内容 二、系统方案设计2.1 微控制器方案选择2.2 信息检测模块方案选择2.3 WiFi模块选择2.4 终端显示2.5 WiFi无线通信实现方法 三、系统硬件电路图设计3.1 整体电路图设计3.2 主控制器设计3.…...
ESP32移植Openharmony外设篇(3)OLED屏
模块简介 产品介绍 OLED (Organic Light-Emitting Diode):有机发光二极管又称为有机电激光显示,OLED显示技术具有自发光的特性,采用薄的有机材料涂层和玻璃基板,当有电流通过时,这些有机材料就会发光,而且…...
人工智能:未来生活与工作的变革力量
人工智能(AI)作为21世纪最具变革性的技术之一,正以前所未有的速度改变着我们的生活和工作方式。从医疗行业的突破性进展到企业运营的智能化,以及日常生活中各种智能产品的普及,人工智能正在成为现代社会不可或缺的一部…...
AI自动生成PPT哪个软件好?智能生成PPT不再熬夜做课件
大概这世上,都是职场牛马对“PPT”这三个字母的头痛反应最大吧! 是的,就连各个年级段的老师也是很头痛——愁着怎样能在排版整齐的情况下,将必考知识点都呈现在PPT每一张幻灯片页面里...... 近期打听到用人工智能生成ppt课件&am…...
C# OOP面试题精选 面向新手/SOLID原则/设计模式++ 长期更新
1.整理目的 相当于0.1版本,旨在学习/提升/复习 关于面向对象模块的知识 目前,记录了一些比较容易混淆或者突然想不起的冷门内容 还有一些个人经过实战后总结的内容,其中还指明了很多实例和分析链接以更加方便地复习 【金山文档 | WPS云文…...
安全见闻(2)——开阔眼界,不做井底之蛙
内容预览 ≧∀≦ゞ 安全见闻二:Web程序构成与潜在漏洞声明导语前端语言及潜在漏洞前端语言前端框架与代码库代码库的概念和用途流行的JavaScript框架常见的代码库 前端潜在漏洞 后端语言及潜在漏洞常见后端语言协议问题后端潜在漏洞 数据库及潜在漏洞数据库分类数据…...
ProtoBuf 的含义和安装
ProtoBuf 是什么 Protocol Buffers 是 Google 的⼀种语⾔⽆关、平台⽆关、可扩展的序列化结构数据的⽅法,它可⽤ 于(数据)通信协议、数据存储等。 Protocol Buffers 类⽐于、 XML,是⼀种灵活,⾼效,⾃动化机…...
C++位操作实战:掩码、提取与组装
在C编程中,位操作是一项基础且强大的技术,它允许程序员在二进制级别上直接操作数据。这种能力对于性能优化、内存节省以及底层硬件控制至关重要。本文将深入探讨C中的掩码操作、字节提取与组装,并通过实例展示这些技术的实际应用。 一、位运算…...
PVE虚拟机强制重启
在Proxmox VE (PVE) 中,强制重启虚拟机的方法有几种,取决于具体场景和虚拟机的状态。以下是常用的两种方法: 1. 使用PVE Web UI强制重启虚拟机 如果虚拟机无法正常关闭或重启,可以使用PVE Web界面中的强制关机/重启选项…...
Adobe Acrobat DC 打印PDF文件,没有打印出注释的解决方法
adobe acrobat在打印的时候,打印不出来注释内容(之前一直可以,突然就不行),升级版本、嵌入字体等等都试过,也在Google找了半天和问了GPT也么找着办法。 无奈之下,自己通过印前检查,…...
wordpress教程视频/广州短视频代运营
最近再次用到的一段代码,在此记录一下。 网上找了一圈,实在是找不到原文了。 算法大概是:先定位最左边并且最上面的点,计算这个点与其他点的夹角,找出顺时针转角最小的。按此规则依次递归,直到再次回到原点…...
濮阳网站建设883664/吸引客人的产品宣传句子
Gauge 量规 显示范围内的值的视图。 struct Gauge<Label, CurrentValueLabel, BoundsLabel, MarkedValueLabels> where Label : View, CurrentValueLabel : View, BoundsLabel : View, MarkedValueLabels : View使用教程 量规表明了当前水平与最终值差距 目前官方没有给出…...
杭州网站设计推荐柚米/seo优化方式
前言 每次下班回到家就已经很累了,到门口还要到处翻找钥匙,然后开门,是不是觉得很烦,那我们有没有不用通过钥匙开门且成本低的方案了?下面我会教大家基于ESP8266点灯科技小爱同学来控制开门的方法 一、准备工作 1、…...
电话做网站的推广/线上产品推广方案
nlp文本建模算法This is part 3 of a 4 part post. Until now we have talked about:这是4部分帖子的第3部分。 到目前为止,我们一直在谈论: Pre-processing and Cleaning 预处理和清洁 Text Summarization 文字摘要 Topic Modeling using Latent Diric…...
优秀的网站设计/上海网站制作公司
本文实验的测试环境:Windows 10cmdMySQL5.6.36InnoDB一、事务的基本要素(ACID)1、原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事…...
网站的公共头部怎么做/品牌营销策略四种类型
一 多态 1.什么是多态:多态不是一个具体的技术或代码。指的时候多个不同类型对象可以响应同一个方法,产生不同的结果。 2.使用多多态的好处:提高了程序的灵活性,拓展性 3.如何实现:鸭子类型 就是典型的多态 多种不同类…...