无主之地2配置高吗|看真人裸体BBBBB|秋草莓丝瓜黄瓜榴莲色多多|真人強奷112分钟|精品一卡2卡3卡四卡新区|日本成人深夜苍井空|八十年代动画片

網易首頁 > 網易號 > 正文 申請入駐

調教了一個AI Agent,全天自動寫測試用例:準確率提升70%+

0
分享至

一、FastAPI框架簡介

1.1 FastAPI框架簡介

FastAPI是一個用于構建API的現(xiàn)代、快速(高性能)的Web框架,基于Python 3.7+的類型提示,建立在Starlette和Pydantic基礎之上。

FastAPI框架有以下特性:

Starlette:輕量級的 ASGI 框架/工具包,是構建高性能 Asyncio 服務的理想選擇

Pydantic:基于 Python 類型提示來定義數據驗證、序列化和文檔的庫

FastAPI 的核心特性:

1.快速:可與 NodeJS 和 Go 比肩的極高性能,是最快的 Python Web 框架之一

2.智能:極佳的編輯器支持,處處皆可自動補全,減少調試時間

3.簡單:設計的易于使用和學習,閱讀文檔的時間更短

4.簡短:使代碼重復最小化,通過不同的參數聲明實現(xiàn)豐富功能

5.健壯:生產可用級別的代碼,還有自動生成的交互式文檔

6.標準化:基于(并完全兼容)API 的相關開放標準:OpenAPI 和 JSON Schema



1.2 為什么選擇FastAPI框架

讓我們從多個維度詳細對比 FastAPI、Flask 和 Django REST Framework框架:



FastAPI 的性能優(yōu)勢:

●基于 ASGI(異步服務器網關接口),而非傳統(tǒng)的 WSGI

●原生支持 async/await,充分利用 Python 異步特性

●使用 Uvicorn 作為 ASGI 服務器,性能接近 Go 和 Node.js

選擇 FastAPI 框架的理由:

1.原生異步支持:完美支持 async/await,適合 I/O 密集型應用

2.自動數據驗證:基于 Pydantic,自動驗證請求數據并生成清晰的錯誤信息

3.自動文檔生成:無需額外配置即可生成交互式 API 文檔(Swagger UI 和 ReDoc)

4.類型安全:完整的類型提示支持,IDE 自動補全和類型檢查

5.高性能:基于 ASGI,性能接近 Go 和 Node.js

6.現(xiàn)代化設計:充分利用 Python 3.7+ 的新特性

二、FastAPI開發(fā)環(huán)境配置

2.1 環(huán)境準備

系統(tǒng)要求:

●建議使用Python 3.12

●pip 包管理器

2.2 安裝依賴

# 創(chuàng)建虛擬環(huán)境(推薦)
python -m venv venv
source venv/bin/activate # Linux/Mac
# 或
venv\Scripts\activate # Windows
# 安裝 FastAPI 和 Uvicorn
pip install fastapi uvicorn[standard]
# 安裝項目依賴
pip install tortoise-orm aiosqlite # ORM 和數據庫
pip install pydantic pydantic-settings # 數據驗證和配置
pip install chromadb # 向量數據庫
pip install crewai # Agent 框架
pip install python-multipart # 文件上傳支持

2.3 項目結構

FastAPI項目有這著其簡潔清晰和可維護的項目結構,強烈推薦的最佳實踐的項目結構如下:

XMaster/
├── backend/ # 后端項目
│ ├── main.py # FastAPI 應用入口
│ ├── base/ # 基礎模塊
│ │ ├── config.py # 配置管理
│ │ ├── db_action.py # 數據庫操作
│ │ ├── embedding_vector.py # 向量嵌入
│ │ └── logger_config.py # 日志配置
│ ├── models/ # 數據模型
│ │ ├── user.py
│ │ ├── knowledge.py
│ │ └── test_case.py
│ ├── schemas/ # Pydantic 模式
│ ├── api/ # API 路由
│ ├── agents/ # Agent 智能體
│ │ ├── case_generator_agent.py
│ │ └── rag_retrieval_agent.py
│ ├── services/ # 業(yè)務邏輯
│ └── data/ # 數據存儲
│ ├── sys-sqlite.db # SQLite 數據庫
│ └── vector_db/ # ChromaDB 向量庫
└── vue-front/ # 前端項目
├── src/
│ ├── views/ # 頁面組件
│ ├── components/ # 通用組件
│ ├── stores/ # Pinia 狀態(tài)管理
│ └── api/ # API 接口
└── package.json



三、FastAPI實戰(zhàn)

3.1 最簡FastAPI應用示例

import uvicorn
# 導入FastAPI類
from fastapi import FastAPI
# 創(chuàng)建FastAPI實例,實例名自定義
FastApp = FastAPI()
@FastApp.get("/")
async def root():
return {"message": "Hello World"}
@FastApp.get("/hello/{name}")
async def say_hello(name: str):
return {"message": f"Hello {name}"}
if __name__ == "__main__":
uvicorn.run("main:FastApp", host="0.0.0.0", port=8000, reload=True)

運行應用:

python main.py

訪問http://localhost:8000,我們會看到:

{"message": "Hello World"}

訪問http://localhost:8000/hello/FastAPI,我們會看到:

{"message": "Hello FastAPI"}

FastAPI 的核心特性解析:

1. 自動生成交互式 API 文檔

●訪問http://localhost:8000/docs,我們會看到自動生成的Swagger UI文檔:



●訪問http://localhost:8000/redoc,會看到ReDoc風格的文檔。

2. 類型提示和自動驗證

@FastApp.get("/hello/{name}")
async def say_hello(name: str): # 類型提示:name 必須是字符串
return {"message": f"Hello {name}"}

FastAPI 會自動完成下述事務:

●驗證 name 是否為字符串

●在文檔中顯示參數類型

●提供編輯器自動補全

3. 異步支持

@FastApp.get("/")
async def root(): # 使用 async 關鍵字
return {"message": "Hello World"}

●使用 async def 定義異步路由

●支持 await 調用異步函數

●充分利用 Python 異步特性,提升并發(fā)性能

4. 自動 JSON 序列化

FastAPI 自動將 Python 字典轉換為 JSON 響應,無需手動序列化。

3.2 FastAPI 應用類

FastAPI 應用類是整個應用的核心,負責路由注冊、中間件配置、生命周期管理等。

創(chuàng)建 FastAPI 實例
from fastapi import FastAPI
from contextlib import asynccontextmanager
@asynccontextmanager
async def lifespan(app: FastAPI):
"""應用生命周期管理"""
# 啟動時執(zhí)行
print("應用啟動中...")
await init_database() # 初始化數據庫
yield # 應用運行中
# 關閉時執(zhí)行
print("應用關閉中...")
await close_database() # 關閉數據庫連接
# 創(chuàng)建 FastAPI 應用實例
app = FastAPI(
title="XAuto智能體平臺",
version="1.0.0",
description="基于 FastAPI + CrewAI 的測試用例生成平臺",
lifespan=lifespan # 生命周期管理
)

FastAPI 實例參數說明:



配置 CORS 中間件

from fastapi.middleware.cors import CORSMiddleware
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # 允許的源
allow_credentials=True,
allow_methods=["GET", "POST", "PUT", "DELETE", "OPTIONS"],
allow_headers=["*"],
)

全局異常處理

from fastapi import Request, HTTPException
from fastapi.responses import JSONResponse
@app.exception_handler(HTTPException)
async def http_exception_handler(request: Request, exc: HTTPException):
"""HTTP 異常處理器"""
returnJSONResponse(
status_code=exc.status_code,
content={"message": exc.detail}
)
@app.exception_handler(Exception)
async def global_exception_handler(request: Request, exc: Exception):
"""全局異常處理器"""
returnJSONResponse(
status_code=500,
content={"message": f"服務器內部錯誤: {str(exc)}"}
)

3.3 FastAPI的請求路由系統(tǒng)

3.3.1 路由參數

路由參數(Path Parameters)是 URL 路徑的一部分。

from fastapi import Path
@app.get("/items/{item_id}")
async def read_item(
item_id: int = Path(..., title="商品ID", ge=1, le=1000)
):
"""
獲取商品信息
- item_id: 商品ID,范圍 1-1000
"""
return{"item_id": item_id, "name": f"商品{item_id}"}

路徑參數驗證:



3.3.2 查詢參數

查詢參數(Query Parameters)是URL中?后面的參數。

from fastapi import Query
from typing import Optional, List
@app.get("/search")
async def search_items(
q: str = Query(..., min_length=1, max_length=50, description="搜索關鍵詞"),
page: int = Query(1, ge=1, description="頁碼"),
size: int = Query(10, ge=1, le=100, description="每頁數量"),
tags: Optional[List[str]] = Query(None, description="標簽列表")
):
"""
搜索商品
- q: 搜索關鍵詞(必填)
- page: 頁碼(默認 1)
- size: 每頁數量(默認 10,最大 100)
- tags: 標簽列表(可選)
"""
return{
"query": q,
"page": page,
"size": size,
"tags": tags or []
}

示例請求:

GET /search?q=FastAPI&page=1&size=20&tags=python&tags=web

3.3.3 請求體

使用 Pydantic 模型定義請求體。

from pydantic import BaseModel, Field
from typing import Optional
class Item(BaseModel):
"""商品模型"""
name: str = Field(..., min_length=1, max_length=100, description="商品名稱")
description: Optional[str] = Field(None, max_length=500, description="商品描述")
price: float = Field(..., gt=0, description="商品價格")
tax: Optional[float] = Field(None, ge=0, description="稅費")
@app.post("/items")
async def create_item(item: Item):
"""
創(chuàng)建商品
"""
item_dict = item.model_dump()
if item.tax:
price_with_tax = item.price + item.tax
item_dict.update({"price_with_tax": price_with_tax})
return item_dict

示例請求:

POST /items
Content-Type: application/json
{
"name": "FastAPI 教程",
"description": "一本關于 FastAPI 的書",
"price": 99.99,
"tax": 10.0
}

Pydantic 模型的優(yōu)勢:

●自動數據驗證

●自動生成 JSON Schema

●自動生成 API 文檔

●類型提示和編輯器支持

3.3.4 Form表單數據

處理 HTML 表單提交的數據。

from fastapi import Form
@app.post("/login")
async def login(
username: str = Form(..., min_length=3, max_length=50),
password: str = Form(..., min_length=6)
):
"""
用戶登錄
"""
return {"username": username, "message": "登錄成功"}

示例請求:

POST /login
Content-Type: application/x-www-form-urlencoded
username=admin&password=123456

3.3.5 文件上傳

FastAPI 支持單文件和多文件上傳。

from fastapi import File, UploadFile
from typing import List
import shutil
@app.post("/upload")
async def upload_file(file: UploadFile = File(...)):
"""
單文件上傳
"""
# 保存文件
file_path = f"./uploads/{file.filename}"
with open(file_path, "wb") as buffer:
shutil.copyfileobj(file.file, buffer)
return{
"filename": file.filename,
"content_type": file.content_type,
"size": file.size
}
@app.post("/upload-multiple")
async def upload_multiple_files(files: List[UploadFile] = File(...)):
"""
多文件上傳
"""
uploaded_files = []
for file in files:
file_path = f"./uploads/{file.filename}"
with open(file_path, "wb") as buffer:
shutil.copyfileobj(file.file, buffer)
uploaded_files.append({
"filename": file.filename,
"size": file.size
})
return {"files": uploaded_files}

??轉崗軟件測試/野路子技能提升

??想了解更多漲薪技能提升方法

??可以到我的個人號:atstudy-js

即可加入領取 ??????

轉行、入門、提升、需要的各種干貨資料

內含AI測試、 車載測試、AI大模型開發(fā)、BI數據分析、銀行測試、游戲測試、AIGC

特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關推薦
熱點推薦
菲律賓地震第3天,美日仍然沒動作,菲外長喊話中國,態(tài)度很強硬

菲律賓地震第3天,美日仍然沒動作,菲外長喊話中國,態(tài)度很強硬

璀璨幻行者
2026-06-12 15:43:47
中國贊助商大撤退!本屆世界杯為何滿是“中國制造”卻沒中國身影

中國贊助商大撤退!本屆世界杯為何滿是“中國制造”卻沒中國身影

禁止讀書
2026-06-12 20:17:07
美國航天股在SpaceX上市后進一步下跌

美國航天股在SpaceX上市后進一步下跌

財聯(lián)社
2026-06-13 00:04:15
現(xiàn)在的年輕人不敢開房了

現(xiàn)在的年輕人不敢開房了

微微熱評
2026-06-13 00:53:53
快訊!認了,菲律賓喊話中國了!

快訊!認了,菲律賓喊話中國了!

故事終將光明磊落
2026-06-13 09:07:31
雷軍用小米YU7裝120箱車厘子共600斤,被指違規(guī)!剛剛直播回應:是卡車送過來的,是在封閉道路分裝

雷軍用小米YU7裝120箱車厘子共600斤,被指違規(guī)!剛剛直播回應:是卡車送過來的,是在封閉道路分裝

都市快報橙柿互動
2026-06-13 10:48:51
毫無底線!具俊曄公開與大S私密往事,20年前韓國同居小屋曝光

毫無底線!具俊曄公開與大S私密往事,20年前韓國同居小屋曝光

社會日日鮮
2026-06-13 05:28:59
主犯獲刑12年半罰沒1600萬!含砷“脫酸劑”讓耙耙柑提前一月上市,果肉檢出重金屬

主犯獲刑12年半罰沒1600萬!含砷“脫酸劑”讓耙耙柑提前一月上市,果肉檢出重金屬

紅星新聞
2026-06-05 09:04:20
震撼,波黑球迷開始在多倫多街頭集結,并高喊口號支持巴勒斯坦

震撼,波黑球迷開始在多倫多街頭集結,并高喊口號支持巴勒斯坦

懂球帝
2026-06-13 01:18:15
2萬億航天巨頭來了!SpaceX首秀收漲19%,超3500億美元瘋搶史上最大IPO

2萬億航天巨頭來了!SpaceX首秀收漲19%,超3500億美元瘋搶史上最大IPO

華爾街見聞官方
2026-06-13 05:00:13
世界杯首次出現(xiàn)VAR介入后讓“黃牌易主”:巴拉圭隊球員假摔“陷害”對手險得手

世界杯首次出現(xiàn)VAR介入后讓“黃牌易主”:巴拉圭隊球員假摔“陷害”對手險得手

紅星新聞
2026-06-13 11:23:06
癌癥的源頭被查出,燒烤沒上榜,第1名大家可能每天都在吃!

癌癥的源頭被查出,燒烤沒上榜,第1名大家可能每天都在吃!

路醫(yī)生健康科普
2026-06-12 16:23:10
排位賽第3!德比斯感謝張雪機車 張雪確認:再次遭到BOP嚴重限制

排位賽第3!德比斯感謝張雪機車 張雪確認:再次遭到BOP嚴重限制

念洲
2026-06-13 06:39:42
斯皮爾伯格科幻新作首日全球票房突破1200萬美元

斯皮爾伯格科幻新作首日全球票房突破1200萬美元

追星雷達站
2026-06-13 01:19:09
張雪機車再次創(chuàng)造佳績,意大利站新紀錄誕生,德比斯豪言沖冠

張雪機車再次創(chuàng)造佳績,意大利站新紀錄誕生,德比斯豪言沖冠

銳評利物浦
2026-06-13 09:49:44
法拉利高管質問智界,“前法拉利設計師是誰”,小鵬也來補刀

法拉利高管質問智界,“前法拉利設計師是誰”,小鵬也來補刀

明鏡pro
2026-06-12 09:01:21
惡臭!上海一別墅區(qū)傳出高頻尖叫,居民不堪其擾…

惡臭!上海一別墅區(qū)傳出高頻尖叫,居民不堪其擾…

看看新聞Knews
2026-06-12 22:37:03
4-0!朱鵬宇向余望進球!拜合拉木身體太棒了,U23國足斬獲三連勝

4-0!朱鵬宇向余望進球!拜合拉木身體太棒了,U23國足斬獲三連勝

刀鋒體育
2026-06-13 08:13:20
草臺班子?世界杯開幕式離譜翻車:大力神杯氣球漏氣 當眾癟掉降落

草臺班子?世界杯開幕式離譜翻車:大力神杯氣球漏氣 當眾癟掉降落

風過鄉(xiāng)
2026-06-13 05:35:13
東道主三戰(zhàn)不敗!墨西哥美國開門紅,加拿大零的突破,轟7球丟2球

東道主三戰(zhàn)不敗!墨西哥美國開門紅,加拿大零的突破,轟7球丟2球

奧拜爾
2026-06-13 11:08:40
2026-06-13 11:59:00
51Testing軟件測試網 incentive-icons
51Testing軟件測試網
中國軟件測試人的精神家園
1588文章數 13274關注度
往期回顧 全部

科技要聞

SpaceX上市首日破2萬億美元,馬斯克再封神

頭條要聞

美國4比1大勝 美國主導比賽巴拉圭疲于奔命讓人意外

頭條要聞

美國4比1大勝 美國主導比賽巴拉圭疲于奔命讓人意外

體育要聞

東道主三戰(zhàn)不敗!美墨開門紅加拿大零的突破

娛樂要聞

12年情懷碎一地!跑男接連翻車

財經要聞

梁文鋒向左,楊植麟向右

汽車要聞

標配激光雷達/雙動力可選 昊鉑S600限時售17.99萬起

態(tài)度原創(chuàng)

房產
數碼
旅游
家居
公開課

房產要聞

海南最賺錢行業(yè)曝光!最快4年半,海口全款買三房!

數碼要聞

櫻桃發(fā)布XTRFY K63W Pro機械鍵盤:引入UWB技術 可實現(xiàn) 8000Hz 輪詢

旅游要聞

夏天就該這樣過!大別山的夏天,從霍山大峽谷漂流的第一聲尖叫開始。

家居要聞

空間微調 移形換境

公開課

李玫瑾:為什么性格比能力更重要?

無障礙瀏覽 進入關懷版