概述

fastapi+tortoise的测试比较奇葩,tortoise-orm的测试需要传递event_loop,fastapi的异步测试不能直接访问,就算使用httpx的异步功能也不行(因为不会主动调用startupshutdown)。
解决方案:
tortsoie-orm的测试解决方案是通过传递event_loop的方式,自己主动激活数据库(当然顺便创建测试数据库等一系列功能),但是没都要通过event_loop.run_until_complete执行实在是有点难看。

我的解决方案:

  1. 自己初始化数据库,redis等异步信息
  2. 通过同步或异步方式调用测试(没差)

实现方式:

配置conftest.py

配置conftest.py,配置全局event_loop

import asyncioimport pytest
from tortoise import Tortoise, generate_schema_for_client@pytest.fixture(scope="session")#配置全局默认线程,注意这个千万不能省
def event_loop():return asyncio.get_event_loop()# 从settings里面粘贴出来并修改
TORTOISE_ORM = {"connections": {"default": {"engine": "tortoise.backends.mysql","credentials": {"host": "127.0.0.1","port": 3306,"user": "root","password": "mnbvcxz123","database": "fasttmptest","echo": True,"maxsize": 10,},},},"apps": {"fast_tmp": {"models": ["fast_tmp.models", "aerich.models", "example.models"],"default_connection": "default",},},
}@pytest.fixture(scope="session", autouse=True)
async def initialize_tests():await Tortoise.init(config=TORTOISE_ORM, _create_db=True)  # 注意,这里的配置是测试数据库# 创建数据库await generate_schema_for_client(Tortoise.get_connection("default"), safe=True)# 尝试删除所有数据库,在所有的数据操作完毕之后回调该方法删除数据库yieldawait Tortoise._drop_databases()  # 所有测试完毕销毁测试数据库,如果觉得每次都太慢的话可以重构这个函数

注意:数据库的初始化需要放到fastapi的startup里面去,这样你启动的时候才不会和你原来的数据库冲突。例如:

@main_app.on_event("startup")
async def startup() -> None:print("startup")await AsyncRedisUtil.init(**settings.REDIS)await Tortoise.init(config=settings.TORTOISE_ORM)#把初始化数据库放到这里面await rearq.init()@main_app.on_event("shutdown")
async def shutdown() -> None:print("shutdown")await AsyncRedisUtil.close()await Tortoise.close_connections()await rearq.close()

编写测试脚本

当完成上述配置,就可以愉快的测试了

# -*- encoding: utf-8 -*-
"""
@File    : test_fastapi_asyncio.py
@Time    : 2021/1/21 12:35
@Author  : chise
@Email   : chise123@live.com
@Software: PyCharm
@info    :
"""
import pytest
from httpx import AsyncClientfrom example.main import appfrom fast_tmp.models import User@pytest.mark.asyncio#所有异步都不能少
async def test_root():await User.all().count()#愉快的调用tortoise-orm的model进行数据操作async with AsyncClient(app=app, base_url="http://test") as ac:response = await ac.get("/fast/auth/login")assert response.status_code == 200

fastapi+tortoise-orm测试相关推荐

  1. 数据库和ORMS:使用Tortoise ORM与数据库通信

    文章目录 1. 安装环境 2. 创建数据库模型 3. 设置 `Tortoise` 引擎 4. create 5. 查询 6. 修改.删除 7. 添加关联 8. 用Aerich建立数据库迁移系统 lea ...

  2. Django08:模型层(ORM)--测试脚本/必知的13条/神器的双下划线查询/多表操作

    单表操作 django 自带的sqlite3数据库对日期格式不是很敏感,处理的时候容易出错. 测试脚本 测试环境准备:去manage.py 中拷贝钱四行代码,然后自己手写两行. 脚本无论在引用下面,还 ...

  3. FastAPI + Vue 前后端分离 接口自动化测试工具 apiAutoTestWeb

    apiAutoTestWeb使用说明 apiAutoTestWeb 是为apiAutoTest的可视化版本,其采用前后端分离( FastAPI + Vue2 )方式实现 具体使用: Python3 + ...

  4. fastapi 入门系列

    大纲 1. 概述 1.1 什么是FastAPI 1.1 什么是FastAPI FastAPI是一个现代.快速(高性能)的Web框架,用于构建API.它基于Python 3.7+的类型提示(type h ...

  5. python画圆填色橙色_基于TPC-C基准的Python ORM的性能测试详解

    当开发与数据库需要在一起使用的应用程序时,对象关系映射器(ORM)通常用于Python编程中.Python ORM的示例是SQLAlchemy,Peewee,Pony-ORM和Django.选择ORM ...

  6. FastAPI框架,数据库迁移生成及增删改查

    #渲染模板 from fastapi import FastAPI,Request from fastapi.responses import JSONResponse,HTMLResponse,Fi ...

  7. Django中ORM操作

    一.ORM简介 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. ​ 简单的说,ORM是通过使用描述对象 ...

  8. PDF.NET数据开发框架实体类操作实例(for PostgreSQL,并且解决自增问题)

    PDF.NET数据开发框架实体类操作实例(MySQL) 的姊妹篇,两者使用了同一个测试程序,不同的只是使用的类库和数据库不同,下面说说具体的使用过程. 1,首先在App.config文件中配置数据库连 ...

  9. datanucleus_DataNucleus 3.0与Hibernate 3.5

    datanucleus 如官方产品站点所述, DataNucleus Access Platform是现有的最符合标准的开源Java持久性产品. 它完全符合JDO1 , JDO2 , JDO2.1 , ...

  10. DataNucleus 3.0与Hibernate 3.5

    如官方产品站点所述, DataNucleus Access Platform是现有的最符合标准的开源Java持久性产品. 它完全符合JDO1 , JDO2 , JDO2.1 , JDO2.2 , JD ...

最新文章

  1. day1---while循环语句和练习
  2. python -- 青少年如何使用 Python 开始游戏开发
  3. 二叉查找树(二叉排序树)的详细实现
  4. finalshell Linux 传输文件 xftp
  5. C#中ref和out的原理
  6. 趣学python3(28)-pygame-蛇身随机运动(可gameover )
  7. TIOBE 7 月编程语言榜:TypeScript 进入前 50 名
  8. 基于嗅探原理的原始套接字木马
  9. 机器学习中的不平衡分类方法(part1)--绪论
  10. Spring Boot 2 实践记录之 条件装配
  11. [C#.NET 拾遗补漏]12:死锁和活锁的发生及避免
  12. Itemplate 自定义控件
  13. VS工程中混有.c文件时出现fatal error C1853错误
  14. [机器学习]推荐系统介绍
  15. 无法打开包括文件math.h
  16. 如今微信最严新规出台,微信域名防封刻不容缓
  17. MT7620A路由刷DDWRT
  18. Ubuntu 安装之后无法连接网络问题
  19. 极视角联合英伟达亮相CNCC大会,分享极星平台的进阶之路
  20. UFO-ViT:没有Softmax的高性能线性视觉Transformer

热门文章

  1. java工作描述怎么写,太厉害了!
  2. 网易面试题,小易沉迷游戏
  3. 天津麒麟收购中标软件,国产操作系统新旗舰扬帆起航!
  4. java 打印字间距 行距_[图片问答]LODOP打印的行间距字间距
  5. java 加水印_Java添加水印(图片水印,文字水印)
  6. 华硕raid 0 安装linux,ROG Maxius IX主板技巧篇:组建RAID 0
  7. 打包2阶段-使用reshacker修改打包信息
  8. iOS转前端之仿写宠物网(适配不同尺寸)
  9. win10电脑状态栏图标不见消失解决办法
  10. 系统win8 任务栏消失不见的解决办法