FastAPI 的单元测试
- 对于服务端来说,通常会对功能进行单元测试,也称白盒测试
- FastAPI 集成了第三方库,让我们可以快捷的编写单元测试
- FastAPI 的单元测试是基于 Pytest + Request 的
Pytest 学习
https://www.cnblogs.com/poloyy/tag/Pytest/
TestClient 简单的栗子
#!usr/bin/env python # -*- coding:utf-8 _*- """ # author: 小菠萝测试笔记 # blog: https://www.cnblogs.com/poloyy/ # time: 2021/9/29 10:55 下午 # file: 37_pytest.py """ import uvicorn from fastapi import FastAPI from fastapi.testclient import TestClient app = FastAPI() @app.get("/") async def read_main(): return {"msg": "Hello World"} # 声明一个 TestClient,把 FastAPI() 实例对象传进去 client = TestClient(app) # 测试用 def test_read_main(): # 请求 127.0.0.1:8080/ response = client.get("/") assert response.status_code == 200 assert response.json() == {"msg": "Hello World"} if __name__ == '__main__': uvicorn.run(app="37_pytest:app", reload=True, host="127.0.0.1", port=8080)
在该文件夹下的命令行敲
pytest 37_pytest.py
运行结果
estClient 的源码解析
继承了 requests 库的 Session
所以可以像使用 requests 库一样使用 TestClient,拥有 requests 所有方法、属性
重写了 Session.requests 方法
重写了 requests 方法,不过只是加了一句 url = urljoin(self.base_url, url) url 拼接代码,还有给函数参数都加了类型指示,更加完善啦~
自定义 websocket 连接方法
后面学到 webSocket 再详细讲他
重写了 __enter__、__exit__ 方法
- Session 的这两个方法还是比较简陋的,TestClient 做了一次重写,主要是为了添加异步的功能(异步测试后面详解,这篇举栗子的都是普通函数 def)
- 前面讲过有 __enter__、__exit__ 方法的对象都是上下文管理器,可以用 with .. as .. 语句来调用上下文管理器哦
.get() 方法
上面代码 client.get(),直接调用的就是 Session 提供的 get() 方法啦!