pytest 简介
pytest是一个功能强大且易于使用的Python测试框架,它主要用于编写单元测试、集成测试和功能测试。
一、pytest的安装
安装命令:pip install pytest
验证安装:使用pytest --version命令来查看已安装的pytest版本,如果终端显示一个版本号,则说明安装成功。
二、pytest的命名规范
测试模块:测试文件应以”test_”开头或以”_test”结尾,例如test_login.py或user_test.py。
测试类:测试类必须以Test开头命名,且测试类中不能有__init__方法。
测试方法/测试函数:测试方法/测试函数必须以test开头。
三、pytest的常用运行参数
无参数:读取路径下符合条件的所有类、函数、方法全部执行。
-v:打印详细运行日志。
-s:打印print输出。
-k:跳过运行某个或某些用例,如pytest -k '类名'、pytest -k '方法名'。
-x:运行用例失败立即停止运行。
–maxfail:用例失败数达到某个设定的值停止运行,如pytest --ma ...
FastAPI redis-om 使用指南
redis-om 是一个用于在 Redis 中存储和查询对象的高级库。它提供了一种简单的方式来将 Python 对象映射到 Redis 数据结构上。结合 FastAPI,你可以快速构建高性能的 API 服务。以下是使用 FastAPI 和 redis-om 的一些基本步骤。
安装依赖首先,你需要安装 FastAPI 和 redis-om 库。
12pip install fastapi[all] # 安装 FastAPI 及其所有推荐依赖pip install redis-om # 安装 redis-om
定义模型使用 redis-om 定义一个模型,该模型将映射到 Redis 数据库中的数据。
1234567891011121314from redis_om import HashModelclass Book(HashModel): title: str author: str page_count: int genre: str class Meta: global_key_prefix = "test" ...
FastAPI Cache 自定义 key builder
FastAPI Cache的@cache 装饰器会自动收集被装饰的函数参数,构建缓存key。不过在实际使用过程中,默认key builder会在有些场景下会不适用。
1、不包含self的key builder主要用于装饰一个类中的方法,需要在构建key的时候去掉参数的类方法中的self参数。
123456789101112131415161718192021def noself_key_builder( func: Callable, namespace: Optional[str] = "", request: Optional[Request] = None, response: Optional[Response] = None, args: Optional[tuple] = None, kwargs: Optional[dict] = None,) -> str: """使用在类函数上的cache key builder. 本key builder在计算key的时候忽略se ...
FastAPI Cache
一、FastAPI Cache 配置要在 FastAPI 中使用缓存,我们可以使用 fastapi-cache 这个第三方库。下面是配置 fastapi-cache 的步骤:
1. 安装 fastapi-cache首先,安装 fastapi-cache 库。
1pip install fastapi-cache
2. 配置缓存后端fastapi-cache 支持多种缓存后端,如 Redis、Memcached 等。以下是一个使用 Redis 作为缓存后端的配置示例:
12345678910111213from fastapi import FastAPIfrom fastapi_cache import FastAPICachefrom fastapi_cache.backends.redis import RedisBackendfrom fastapi_cache.decorator import cacheapp = FastAPI()# 配置 Redis 缓存后端FastAPICache.init( backend=RedisBackend(redis_url=&quo ...
phonenumbers 与 国内电话号码校验
1、phonenumbers的使用在Python中,phonenumbers 库是一个非常流行的库,用于解析、格式化、存储和验证国际电话号码。而 pydantic 是一个数据解析和验证库,它基于Python类型提示,使得数据验证变得简单且类型安全。将 phonenumbers 与 pydantic 结合使用,可以在模型验证中包括电话号码的验证。
下面是如何在 pydantic 模型中使用 phonenumbers 来验证电话号码的一个示例。
首先,你需要安装必要的库(如果你还没有安装它们的话):
1pip install phonenumbers pydantic
然后,可以创建一个自定义的验证器,该验证器使用 phonenumbers 来检查电话号码是否有效,并将其集成到 pydantic 模型中。
12345678910111213141516171819202122232425262728293031323334from typing import Optional from pydantic import BaseModel, ValidationError, valida ...
FastAPI项目 ruff配置规则
一个ruff配置,去除了部分关系不大的检查项目,以及单元测试代码因有些特殊性,也需要过滤掉部分检测项目。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172[tool.ruff]line-length = 100show-fixes = true[tool.ruff.format]docstring-code-format = truedocstring-code-line-length = 60[tool.ruff.lint]# rules: https://docs.astral.sh/ruff/rules/select = [ "E", # pycodestyle error "W", # pycodestyle warning "F", # pyflake ...
Pre-commit 配置案例
定义一个常用的Python项目Pre commit配置文件,配置了ruff作为代码格式检查工具。注意两个local插件,language 需要设置为 system,才能运行本地shell命令。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192default_language_version: python: python3.11default_install_hook_types: [pre-commit, pre-push, commit-msg]default_stages: [commit]exclude: | (?x)^( backend/.vscode/ )repos: - repo: https://github.com/pre-commit/pr ...
Pre-commit 入门
Pre-commit 是一个非常有用的工具,它可以用于在提交代码之前运行一些钩子脚本,以确保代码的质量和一致性。在本文中,我们将介绍如何使用 Pre-commit 来管理 Python 项目的代码质量。
1. 安装 Pre-commit首先,需要在计算机上安装 Pre-commit。使用 pip 安装 Pre-commit:
1pip install pre-commit
2. 创建配置文件在项目的根目录下,创建一个名为 .pre-commit-config.yaml 的文件。这个文件将用于配置 Pre-commit 钩子。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152repos:- repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.0.1 hooks: - id: check-json # 检查JSON文件的格式是否正确。 - id: ch ...
SQLModel中如何定义表的字符集等元数据
在使用SQLModel进行数据库定义的时候,经常需要指定一些表定义的元数据。可以采用如下基础模型:
1234567891011121314class TableBase(SQLModel, metaclass=DescriptionMeta): """ 数据库表公共属性模型定义 """ __table_args__ = { "mysql_engine": "InnoDB", # MySQL引擎 "mysql_charset": "utf8mb4", # 设置表的字符集 "mysql_collate": "utf8mb4_general_ci", # 设置表的校对集 } # 类名转表名 # https://blog.csdn.net/mouday/article/details/90079956 @decla ...
SQLModel中将description转化为数据表定义中的comment
在使用 SQLModel 进行模型定义的时候,使用 description 属性来定义一个 Field 的描述信息。不过在数据库中,用的是 comment。SQLModel 在生成建表语句的时候,默认不会生成 comment 信息,需要使用 sa_column_kwargs={“comment”: “字段说明信息”} 来单独定义 comment,这样会在一个字段的定义上有两个重复的定义。在 https://github.com/tiangolo/sqlmodel/issues/492 这个 issue 中有人写了一个转换程序,摘抄如下:
1234567891011121314151617181920212223242526272829303132# Automatically set comment to Column using description.# https://github.com/tiangolo/sqlmodel/issues/492class DescriptionMeta(SQLModelMetaclass): """ ...