【python实操】python小程序之参数化以及Assert(断言)

news2024/10/25 5:15:21

引言

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 login


data = [
    ('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] = value
    assert 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 addc


class 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(优化)标志来禁用断言
  • 断言不应该用于处理正常的运行时错误,它们主要用于开发和测试阶段
  • 断言失败时,应该提供足够的信息来帮助调试问题,这就是为什么通常会包含一个错误消息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2222983.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网页HTML编写练习:华语榜中榜

网页效果 HTML代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice…

NLP--一起学习Word Vector【实践】

纸上得来终觉浅&#xff0c;绝知此事要躬行。 《冬夜读书示子聿》 值此1024的程序员节&#xff0c;我们一起学习 Word Vector。 本章一起学习文本向量化&#xff0c;掌握文本向量的相关概念&#xff0c;了解各个文本向量&#xff0c;实现文本向量的算法 我开启了一个NLP共学坊…

arm ubuntu22.04 安装es7.16.2

1、更新软件包 sudo apt update && sudo apt upgrade -y 2、安装jdk11 sudo apt install openjdk-11-jdk -y 安装查看版本 java -version 输出应该是这样的 openjdk version "11.0.11" 2021-04-20 OpenJDK Runtime Environment (build 11.0.119-Ub…

【主机漏洞扫描常见修复方案】:Tomcat安全(机房对外Web服务扫描)

文章目录 引言I SSL/TLS Not ImplementedTomcat 服务器 SSL 证书安装部署(JKS 格式)Tomcat 服务器 SSL 证书安装部署(PFX 格式)HTTP 自动跳转 HTTPS 的安全配置(可选)修复SSL证书版本低II 主机漏洞扫描常见修复方案Apache JServ protocol serviceSlow HTTP DEnial of Ser…

Ubuntu 上安装 Redmine 5.1 指南

文章目录 官网安装文档&#xff1a;命令步骤相关介绍GemRubyRailsBundler 安装 Redmine更新系统包列表和软件包&#xff1a;安装必要的依赖&#xff1a;安装 Ruby&#xff1a;安装 bundler下载 Redmine 源代码&#xff1a;安装 MySQL配置 Redmine 的数据库配置文件&#xff1a;…

54万字WORD电力数字化转型智慧电力一体化监管云平台整体解决方案

▲关注智慧方案文库&#xff0c;学习9000多份最新解决方案&#xff0c;其中 PPT、WORD超过7000多份 &#xff0c;覆盖智慧城市多数领域的深度知识社区&#xff0c;稳定更新4年&#xff0c;日积月累&#xff0c;更懂行业需求。 1459页54万字WORD丨电力行业数字化转型 智慧电力…

【ArcGIS Pro实操第4期】绘制三维地图

【ArcGIS Pro实操第4期】绘制三维地图 ArcGIS Pro绘制三维地图-以DEM高程为例参考 如何使用ArcGIS Pro将栅格数据用三维的形式进行表达&#xff1f;在ArcGIS里可以使用ArcScene来实现&#xff0c;ArcGIS Pro实现原理跟ArcScene一致。由于Esri未来将不再对ArcGIS更新&#xff0c…

53页 PPT煤炭行业数字化转型规划方案

▲关注智慧方案文库&#xff0c;学习9000多份最新解决方案&#xff0c;其中 PPT、WORD超过7000多份 &#xff0c;覆盖智慧城市多数领域的深度知识社区&#xff0c;稳定更新4年&#xff0c;日积月累&#xff0c;更懂行业需求。 53页 PPT煤炭行业数字化转型规划方案 通过对煤企高…

手机玩使命召唤21:黑色行动6?GameViewer远程玩使命召唤教程

使命召唤21&#xff1a;黑色行动 6这个第一人称射击游戏&#xff0c;将于10月25号上线&#xff01;如果你是使命召唤的老玩家&#xff0c;是不是也在期待这部新作&#xff1f;其实这个游戏不仅可以用电脑玩&#xff0c;还可以用手机玩&#xff0c;使用网易GameViewer远程就能让…

【Qt6聊天室项目】 主界面功能实现

1. 获取当前用户的个人信息 1.1 前后端逻辑分析&#xff08;主界面功能&#xff09; 主界面上所有的前后端交互逻辑相同&#xff0c;分析到加载会话列表后其余功能仅实现。 核心逻辑总结 异步请求-响应模型 客户端发起请求&#xff0c;向服务器发送包含会话ID的请求服务端处…

python画图|曲线动态输出

【1】引言 前序教程中的曲线动态输出&#xff0c;其实是把曲线按照左右移动的形式输出&#xff08;波的传递形式&#xff09;。 python画图|曲线动态输出基础教程_python 动态曲线-CSDN博客 但有些时候我们更期待的是曲线不移动&#xff0c;随着自变量的增加而输出因变量&am…

信号与系统学习:傅里叶级数

一、基本概念 1. 什么是傅里叶级数&#xff1f; 傅里叶级数是一种数学工具&#xff0c;可以将一个周期函数分解为一系列正弦和余弦函数&#xff08;即三角函数&#xff09;的和。这些正弦和余弦函数的频率是原函数的整数倍。 2. 为什么要使用傅里叶级数&#xff1f; 信号分…

【STM32+HAL】OV2640捕获图像显示

一、准备工作 有关CUBEMX的初始化配置&#xff0c;参见我的另一篇blog&#xff1a;【STM32HAL】CUBEMX初始化配置 二、所用工具 1、芯片&#xff1a; STM32F407ZGT6 2、IDE&#xff1a; MDK-Keil软件 3、库文件&#xff1a;STM32F4xxHAL库 三、实现功能 通过OV2640捕获图像…

Flutter UI组件库(JUI)

Flutter UI组件库 (JUI) 介绍 您是否正在寻找一种方法来简化Flutter开发过程&#xff0c;并创建美观、一致的用户界面&#xff1f;您的搜索到此为止&#xff01;我们的Flutter UI组件库&#xff08;JUI&#xff09;提供了广泛的预构建、可自定义组件&#xff0c;帮助您快速构建…

为什么会配置足够打LOL等网游很卡?12代大小核处理器最典型

卡顿原因及优化建议 大小核调度问题&#xff1a; 调度不当&#xff1a;某些游戏未针对大小核进行优化&#xff0c;可能导致系统将负载分配到效率核&#xff08;小核&#xff09;&#xff0c;而性能核&#xff08;大核&#xff09;未被充分利用。操作系统调度策略&#xff1a;尽…

15.6 JDBC数据库编程6——可滚动和可更新的ResultSet

目录 15.6 引言 15.6.1 可滚动的ResultSet 15.6.1 可更新的ResultSet 15.6 引言 可滚动的ResultSet是指在结果集对象上不但可以向前访问结果集中的记录&#xff0c;还可以向后访问结果集中记录。可更新的ResultSet是指不但可以访问结果集中的记录&#xff0c;还可以更新…

文件操作(1) —— 文件基础知识

目录 1. 为什么使用文件&#xff1f; 2. 文件种类【按功能分】 3. 文件名 4. 数据文件种类【按存储方式细分】 5. 文件的打开和关闭 5.1 流和标准流 5.2 文件指针 5.3 文件的打开和关闭函数 6. 文件缓冲区 1. 为什么使用文件&#xff1f; 如果没有⽂件&#xff0c;我…

Vue笔记-浏览器窗口改变时,重新计算表格高度并设置

当窗口大小改变时&#xff0c;你监听 window 对象的 resize 事件&#xff0c;然后在事件处理程序中重新计算表格的高度。在 Vue 中&#xff0c;可以在组件中通过 created 生命周期钩子来添加事件监听器&#xff0c;然后在组件销毁时移除事件监听器。 如下vue代码&#xff1a; …

Android GPU Inspector分析帧数据快速入门

使用 谷歌官方工具Android GPU Inspector (AGI) 可以对Android 应用进行深入和全面的系统性能分析和帧性能分析 。AGI 是一个非常强大的分析工具&#xff0c;尤其是在需要诊断 GPU 性能问题和优化应用时&#xff0c;可以帮助你精准找到性能瓶颈。本文介绍如何使用该工具对帧数据…

24V转3.3V2A同步降压WT6030

24V转3.3V2A同步降压WT6030 WT6030 是一种高效同步整流降压开关模式转换器&#xff0c;集成内部功率 MOSFET&#xff0c;能在宽输入电源范围内提供较高的输出电流&#xff0c;以下是使用 WT6030 将 24V 降压到 3.3V 输出 2A 电流的相关设计要点&#xff1a; 1. 电路设计 输入电…