当前位置: 首页 > 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…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测

uniapp 中配置 配置manifest 文档&#xff1a;manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号&#xff1a;4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作&#xff1a;验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化&#xff1a;测试aof和aof持久化机制&#xff0c;确保数据在开启后正确恢复。 事务&#xff1a;检查事务的原子性和回滚机制。 发布订阅&#xff1a;确保消息正确传递。 2、性…...

Unity UGUI Button事件流程

场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...

Rust 开发环境搭建

环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行&#xff1a; rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu ​ 2、Hello World fn main() { println…...