FastAPI 学习之路(三十九)对开发接口进行测试

概况

对于开发好的接口需要进行测试之后才能发布。当我们在开发的时候,没有提前测试,我们也要对我们自己的接口进行测试,那么FastApi自身也带有针对开发的接口进行测试的功能。我们看下FastApi官方给我们提供了什么样的支持。 

       接口还是基于FastAPI 学习之路(三十七)元数据和文档 URL实现。我们看下如何测试。

TestClient 

from routers.items import item_router
from routers.users import user_router
from fastapi import FastAPIapp = FastAPI(title="这是测试Title",description="这是测试description",version="这是测试version"
)app.include_router(user_router, prefix="/u", tags=["users"])
app.include_router(item_router, prefix="/i", tags=["items"])# ------------------------------以下是进行测试的方法---------------------------------
# 这是fastapi提供给我们来进行测试的类
from fastapi.testclient import TestClientclient = TestClient(app)def test_get_user_view():response = client.get("/u/user?uid=1")assert response.status_code == 200assert isinstance(response.json(), dict) and "email" in response.json()if __name__ == '__main__':test_get_user_view()

其实很简单,fastapi里面有个模块,我们直接导入进来,编写用例即可。

运行看下:

       可是我们简单的写的,运行后只是没有报错而已。证明执行成功,但是在实际中,我们做还是不够的,我们想要看着是否执行通过。如何实现呢。

   我们可以使用python自带的unittest来组织测试用例。

unittest

   我们看下改造后的。

from routers.items import item_router
from routers.users import user_router
from fastapi import FastAPIapp = FastAPI(title="这是测试Title",description="这是测试description",version="这是测试version"
)app.include_router(user_router, prefix="/u", tags=["users"])
app.include_router(item_router, prefix="/i", tags=["items"])# ------------------------改造------------------------------
import unittest
from fastapi.testclient import TestClientclient = TestClient(app)class FastApiTest(unittest.TestCase):def setUp(self) -> None:self.client = TestClient(app)def tearDown(self) -> None:self.client = Nonedef test_get_user_view(self):response = self.client.get("/u/user?uid=3")self.assertEqual(response.status_code, 200)self.assertIn("email", response.json())def test_get_item_by_uid_view(self):response = self.client.get("/i/items/1")self.assertEqual(response.status_code, 200)self.assertEqual(response.json()[0]["id"], 3)if __name__ == '__main__':unittest.main()

运行看下:

 当然,你也可以单独创建一个test文件,将测试流程单独放置于test文件中。

这样我们就实现了对fastapi在开发过程中的接口测试,很简单,我们也不用启动服务端。

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

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

相关文章

笔记本硬盘数据恢复的6种方法!简单易懂

可以从笔记本电脑硬盘恢复已删除的数据吗? “我不小心删除了笔记本电脑硬盘上的重要数据。请问我可以在笔记本电脑硬盘上恢复已删除的数据吗?如果可以,我应该怎么做才能恢复数据呢?” 很多笔记本电脑用户可能会不小心地从电脑中…

线程冲突案例演示

我们以银行取款经典案例来演示线程冲突现象。 银行取款的基本流程可以分为如下几个步骤。 (1)用户输入账户、密码,系统判断用户的账户、密码是否匹配。 (2)用户输入取款金额。 (3)系统判断账…

JavaSE 面向对象程序设计进阶 IO 练习读取多个对象

练习读取多个对象 用序列化流将对象写入文件 import java.io.*; import java.nio.charset.Charset;public class Main {public static void main(String[] args) throws IOException, ClassNotFoundException {//序列化多个对象Person p1new Person("多多", 男,20)…

梧桐数据库:数据库产品中的自然语言语义分析技术

数据库产品中的自然语言语义分析技术是一项重要的自然语言处理技术,它涉及对自然语言文本进行深度理解和分析,从而识别文本中的实体、关系、情感等语义信息,并将这些信息转化为计算机可以理解和处理的形式。 一、自然语言语义分析技术的定义…

蓝牙 - Terminal I/O Service Specification

1, Introduction 1.1, Scope 通过该服务,终端 I/O 客户端设备可连接终端 I/O 服务器设备并与之交互,从而实现串行数据和 GPIO 状态信息的双向交流。 终端 I/O 服务公开本地 UART 数据和本地 GPIO 状态变化,并允许 GATT 客户向 GATT 服务器传…

Elasticsearch 基础查询语句汇总

Elasticsearch 基础查询语句汇总 准备条件指定id查询一指定id查询二指定多个id查询区间查询模糊查询多字段查询分页查询查询总数量 准备条件 以下查询操作都基于索引crm_clue来操作,索引已经建过了,本文主要讲Elasticsearch查询语句,下面开始…

DP学习——设计模式代码采集

学而时习之,温故而知新。 c++代码 1111https://blog.csdn.net/xushuilong/article/details/106962825 22222

电商之订单价税拆分实现方案

文章目录 案例数据实现思路1、计算出平均金额2、计算每个商品的金额 实现方案1、订单 order 实体2、订单明细 orderDetail 实体3、实现类4、测试启动5、实现结果 在做电商项目的时候,会遇到要对订单明细进行纳税金额拆分,即将税额拆分到每个商品上&#…

Android 自定义Edittext 和TextView 提示文字和填入内容不同的粗细组件

近期项目中又EditText 以及TextView 这两个组件需要用到提示文字 以及 填入文字要保持不同的粗细程度,所以记录一下 首先 是EditText 组件的自定义 BLEditText 继承的这个组件是一个三方的组件,可以在很大程度上减少drawable的编写,有兴趣的可以去相关的Git去看一下 点击查看,…

[leetcode]maximum-binary-tree 最大二叉树

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:TreeNode* constructMaximumBinaryTree(vector<int>& nums) {return construct(nums, 0, nums.size() - 1);}TreeNode* construct(const vector<int>& nums, int left, int right) {if …

人工智能算法工程师(中级)课程4-sklearn机器学习之回归问题与代码详解

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能算法工程师(中级)课程4-sklearn机器学习之回归问题与代码详解。回归分析是统计学和机器学习中的一种重要方法&#xff0c;用于研究因变量和自变量之间的关系。在机器学习中&#xff0c;回归算法被广泛应用于…

软件开发23种设计模式

一、设计模式分类 软件开发的23种模式&#xff0c;主要分类有创建型模式&#xff0c;结构型模式&#xff0c;行为型模式三种&#xff0c;相关分类如下&#xff1a; 设计模式是一种面向对象编程的思想&#xff0c;它是由Gamma等人在《设计模式&#xff1a;可复用面向对象软件的…

中新青年领导人交流营走进李良济,零距离感受中医药文化的魅力

7月8日晚&#xff0c;2024中新青年领导人交流营在苏州正式启动。该交流营主题为“青年创业和可持续发展”&#xff0c;由中华全国青年联合会、新加坡全国青年理事会主办&#xff0c;江苏省、北京市青年联合会与苏州市人民政府承办&#xff0c;苏州市青年联合会与苏州工业园区管…

k8s核心操作_Ingress统一网关入口_域名访问配置_ingress域名转发规则配置_根据域名访问不同服务---分布式云原生部署架构搭建026

上一节我们已经把 ingress 安装好了可以看到 kubectl get svc -A 可以看到 出现了ingress-nginx 的service,在ingre-nginx这个命名空间中,有两个,一个是 ingress-nginx-controller 开了两个一个是对应http,一个对应https 一个是 ingress-nginx-controller-admission 对…

unordered_map和set

前言&#xff1a;本篇文章继续分享新的容器unordered_map和set。前边我们分享过map和set&#xff0c;其底层为红黑树&#xff0c;而unordered_map和set的底层则为哈希表&#xff0c;因此在unordered_map和set的实现中&#xff0c;我们可以效仿许多在map和set的中就分享过的一些…

银河麒麟(Kylin)KYSEC使用

1.推荐使用方法 *.临时禁用指令: setstatus disable--禁用 注&#xff1a;执行reboot后系统会自动启动 2.选用指令&#xff1a; *.永久禁用指令&#xff1a; setstatus disable -p *.重启后,KYSEC还是处理关闭关状态。 *.使用如下指令启用&#xff1a;setstatus enable …

详细介绍一下TypeScript

TypeScript (TS) 是一种由微软开发和维护的开源编程语言。它是 JavaScript 的一个超集&#xff0c;意味着所有的 JavaScript 代码都可以在 TypeScript 中无需修改地运行。TypeScript 添加了可选的静态类型系统&#xff0c;这使得开发者能够在开发大型应用程序时更早地检测和修复…

【人生苦短,我学 Python】(13)通过python内置函数实现栈、队列

Python 所有文章传送门【Python】所有文章传送门 目录 简述 / 前言1. collections 的 deque 对象2. 栈2.1 栈操作-12.2 栈操作-2 3. 队列3.1 队列操作-13.2 队列操作-2 总结 简述 / 前言 上篇文章讲完了函数部分&#xff0c;这篇文章主要介绍如果通过内置函数&#xff08;模块…

Linux(一)线程——何为线程???Linux线程控制

文章目录 什么是线程&#xff1f;&#xff1f;&#xff1f;线程和进程的区别和联系Linux线程控制POSIX线程库创建线程线程等待线程终止线程分离 什么是线程&#xff1f;&#xff1f;&#xff1f; 在一个程序里的一个执行路线就叫做线程&#xff08;thread&#xff09;。更准确的…

python用selenium网页模拟时无法定位元素解决方法1

进行网页模拟时&#xff0c;有时我们明明可以复制出元素的xpath&#xff0c;但是用selenium的xpath click无法点击到元素。这种情况有几种原因&#xff0c;本文写其中一种——iframe 比如下图网址&#xff0c;第二行出现iframe&#xff0c;则往下的行内元素都会定位不到&#…