第一次提交
This commit is contained in:
136
backend/tests/conftest.py
Normal file
136
backend/tests/conftest.py
Normal file
@@ -0,0 +1,136 @@
|
||||
"""
|
||||
Pytest配置和共享fixtures
|
||||
"""
|
||||
import pytest
|
||||
from sqlalchemy import create_engine
|
||||
from sqlalchemy.orm import sessionmaker
|
||||
from fastapi.testclient import TestClient
|
||||
from app.core.database import Base, get_db, SessionLocal
|
||||
from app.main import app
|
||||
from app.core.config import settings
|
||||
import os
|
||||
|
||||
# 测试数据库URL(使用SQLite内存数据库)
|
||||
TEST_DATABASE_URL = "sqlite:///:memory:"
|
||||
|
||||
# 创建测试数据库引擎
|
||||
test_engine = create_engine(
|
||||
TEST_DATABASE_URL,
|
||||
connect_args={"check_same_thread": False}
|
||||
)
|
||||
|
||||
# 创建测试会话工厂
|
||||
TestingSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=test_engine)
|
||||
|
||||
|
||||
@pytest.fixture(scope="function")
|
||||
def db_session():
|
||||
"""创建测试数据库会话"""
|
||||
# 创建所有表
|
||||
Base.metadata.create_all(bind=test_engine)
|
||||
|
||||
# 创建会话
|
||||
session = TestingSessionLocal()
|
||||
try:
|
||||
yield session
|
||||
finally:
|
||||
session.close()
|
||||
# 删除所有表
|
||||
Base.metadata.drop_all(bind=test_engine)
|
||||
|
||||
|
||||
@pytest.fixture(scope="function")
|
||||
def client(db_session):
|
||||
"""创建测试客户端"""
|
||||
def override_get_db():
|
||||
try:
|
||||
yield db_session
|
||||
finally:
|
||||
pass
|
||||
|
||||
app.dependency_overrides[get_db] = override_get_db
|
||||
|
||||
with TestClient(app) as test_client:
|
||||
yield test_client
|
||||
|
||||
app.dependency_overrides.clear()
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def test_user_data():
|
||||
"""测试用户数据"""
|
||||
return {
|
||||
"username": "testuser",
|
||||
"email": "test@example.com",
|
||||
"password": "testpassword123"
|
||||
}
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def authenticated_client(client, test_user_data):
|
||||
"""创建已认证的测试客户端"""
|
||||
# 注册用户
|
||||
response = client.post("/api/v1/auth/register", json=test_user_data)
|
||||
assert response.status_code == 201
|
||||
|
||||
# 登录获取token
|
||||
login_response = client.post(
|
||||
"/api/v1/auth/login",
|
||||
data={
|
||||
"username": test_user_data["username"],
|
||||
"password": test_user_data["password"]
|
||||
}
|
||||
)
|
||||
assert login_response.status_code == 200
|
||||
token = login_response.json()["access_token"]
|
||||
|
||||
# 设置认证头
|
||||
client.headers.update({"Authorization": f"Bearer {token}"})
|
||||
|
||||
return client
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def sample_workflow_data():
|
||||
"""示例工作流数据"""
|
||||
return {
|
||||
"name": "测试工作流",
|
||||
"description": "这是一个测试工作流",
|
||||
"nodes": [
|
||||
{
|
||||
"id": "start-1",
|
||||
"type": "start",
|
||||
"position": {"x": 0, "y": 0},
|
||||
"data": {"label": "开始"}
|
||||
},
|
||||
{
|
||||
"id": "llm-1",
|
||||
"type": "llm",
|
||||
"position": {"x": 200, "y": 0},
|
||||
"data": {
|
||||
"label": "LLM节点",
|
||||
"provider": "deepseek",
|
||||
"prompt": "请回答:{input}",
|
||||
"model": "deepseek-chat"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "end-1",
|
||||
"type": "end",
|
||||
"position": {"x": 400, "y": 0},
|
||||
"data": {"label": "结束"}
|
||||
}
|
||||
],
|
||||
"edges": [
|
||||
{
|
||||
"id": "e1",
|
||||
"source": "start-1",
|
||||
"target": "llm-1"
|
||||
},
|
||||
{
|
||||
"id": "e2",
|
||||
"source": "llm-1",
|
||||
"target": "end-1"
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user