当前位置: 首页 > news >正文

【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(可选):当conditionFalse时,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中定义的

  1. import unittest: 导入了Python的标准单元测试框架unittest,这个框架提供了创建和运行测试的工具

  2. from tools import addc: 假设tools模块包含了一个名为addc的函数,这里将其导入以便在测试类中使用

  3. class TestAdd(unittest.TestCase): 定义了一个名为TestAdd的测试类,它继承自unittest.TestCase。这意味着它可以包含多个测试方法,每个方法都是对addc函数的一次独立测试

  4. def test_3_5(self): 这是一个测试方法,名字表明它正在测试addc(3, 5)的情况。在这个方法内部,使用self.assertEqual()来验证addc(3, 5)的结果应该是8

  5. 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动画创建了一个具有视觉吸引力的按钮&#xff0c;当用户与按钮交互时&#xff08;如悬停、聚焦或按下&#xff09;&#xff0c;按钮会显示不同的动画效果。 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解析

一、网络基础概念 在现代计算机网络中&#xff0c;广播域、冲突域和虚拟局域网&#xff08;VLAN&#xff09;是网络架构和管理的核心概念。了解这些概念对网络性能优化、流量管理和安全性提升至关重要。 二、广播域 1. 定义 广播域是一个网络逻辑区域&#xff0c;在这个区域…...

【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嵌入式学习--第六天(电子电路基础知识)

电子电路基础知识 -基本元器件 -电阻 电阻&#xff08;Resistance&#xff0c;通常用“R”表示&#xff09;&#xff0c;表示导体对电流的阻碍作用的大小&#xff1b;电阻导体本身的一种特性&#xff1b;超导体没有电阻&#xff0c;作用是用来降压 上拉电阻&#xff1a;将状态…...

JAVA----单例模式

1.单例模式概念&#xff1a; 单例模式是一种设计模式&#xff0c;他的核心是确保一个类只有一个实例&#xff0c;单例模式主要有两种方式&#xff1a;饿汉式与懒汉式 2.饿汉式 饿汉就是一个迫切的意思&#xff0c;类加载就会导致该单实例被创建 饿汉式第一种方式&#xff1a;…...

基于递推式最小二乘法的PMSM参数辨识MATLAB仿真模型

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 模型简介 最小二乘法是一种回归估计法&#xff0c;适用于被辨识的参数与系统输出为线性关 系的情况。它是在一定数据量下&#xff0c;基于系统输出误差的平方和最小的准则对参 数进行辨识的方法。此模型通过…...

记录一次部署 k8s 集群无法启动

情况是这样的&#xff0c;k8s 集群&#xff08;v1.31&#xff09;所需要的组件已安装完成&#xff0c;通过 kubeadm init 已经安装部署成功&#xff0c;但是等几分钟&#xff0c;集群组件就一直在重启&#xff0c;查看日志是连接 etcd 超时&#xff0c;所以查看了 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的旧版本包&#xff0c;显示如下 #存在 [rootlocalhost ~]…...

cpuinfo实践记录

py-cpuinfo 是一个用于获取 CPU 信息的 Python 库。它可以帮助你获取 CPU 的详细信息&#xff0c;如 CPU 型号、核心数、频率、缓存大小等。以下是对 py-cpuinfo 模块的详细介绍&#xff1a; 安装 你可以使用 pip 来安装 py-cpuinfo 库&#xff1a; pip install py-cpuinfo …...

【Java】ArrayList相关操作及其案例

ArrayList相当于集合&#xff0c;作为一种容器存储数据&#xff0c;与数组类似。不同的是&#xff0c;ArrayList中长度可变&#xff0c;而数组长度不可变。 ArrayList相关API 构造器 public ArrayList() 创建一个空的集合对象 ArrayList<String>arrnew ArrayList<>…...

手机pdf阅读器,用手机也能够阅读、编辑pdf文件

在日常的学习或办公过程中&#xff0c;PDF格式的文件是我们最常遇见的文件格式之一&#xff0c;那么为了更高效、便捷地处理这些文件&#xff0c;选择一款合适的PDF阅读器至关重要&#xff0c;可以帮助我们在阅读文件的同时还可以对文件进行适当编辑处理。今天小编给大家带来几…...

通过 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应用宝典》 对比关系型数据库 索引&#xff08;Index&#xff09;相当于库映射类型&#xff08;Mapping Type&#xff09;相当于表文档&#xff08;Document&#xff09;相当于行文档字段&#xff08;Field&#xff09;相当于列…...

fluent-ffmpeg操作MP3文件深入解析

软考鸭微信小程序 学软考,来软考鸭! 提供软考免费软考讲解视频、题库、软考试题、软考模考、软考查分、软考咨询等服务 引言 fluent-ffmpeg是一个功能强大的Node.js库&#xff0c;它为FFmpeg提供了一个流畅的接口。FFmpeg是一个著名的多媒体框架&#xff0c;以处理音频、视频和…...

做信创项目需要什么资质、信创产品认证标准?

信创项目需要企业具备一些特定的资质和认证&#xff0c;以证明其合规性和专业性。以下是做信创项目可能用到的一些资质&#xff1a; 1. 信息安全管理体系认证&#xff08;ISO27001&#xff09;&#xff1a;该认证可以证明企业已经建立了完善的信息安全管理体系&#xff0c;能够…...

Spring i18n国际化

从源码MessageSource的三个实现出发实战springi18n国际化 - 简熵 - 博客园 import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.MessageSource; import org.spri…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...