补充Mock规则命中模式启动参数

This commit is contained in:
wkc
2026-03-22 12:59:12 +08:00
parent 07ed6c76c5
commit e6809c67fe
4 changed files with 67 additions and 0 deletions

View File

@@ -1,6 +1,7 @@
from pydantic_settings import BaseSettings from pydantic_settings import BaseSettings
from pathlib import Path from pathlib import Path
import re import re
from typing import Literal
def _load_ruoyi_mysql_defaults() -> dict: def _load_ruoyi_mysql_defaults() -> dict:
@@ -42,6 +43,7 @@ class Settings(BaseSettings):
# 模拟配置 # 模拟配置
PARSE_DELAY_SECONDS: int = 4 # 文件解析延迟秒数 PARSE_DELAY_SECONDS: int = 4 # 文件解析延迟秒数
MAX_FILE_SIZE: int = 10485760 # 10MB MAX_FILE_SIZE: int = 10485760 # 10MB
RULE_HIT_MODE: Literal["subset", "all"] = "subset"
# 测试数据配置 # 测试数据配置
INITIAL_PROJECT_ID: int = 1000 INITIAL_PROJECT_ID: int = 1000

29
lsfx-mock-server/dev.py Normal file
View File

@@ -0,0 +1,29 @@
import argparse
import uvicorn
from config.settings import settings
from main import apply_rule_hit_mode
def parse_args(argv=None):
parser = argparse.ArgumentParser()
parser.add_argument("--reload", action="store_true")
parser.add_argument("--rule-hit-mode", choices=["subset", "all"], default="subset")
return parser.parse_args(argv)
def main():
args = parse_args()
apply_rule_hit_mode(args.rule_hit_mode)
uvicorn.run(
"main:app",
host=settings.HOST,
port=settings.PORT,
log_level="debug" if settings.DEBUG else "info",
reload=args.reload,
)
if __name__ == "__main__":
main()

View File

@@ -3,6 +3,9 @@
基于 FastAPI 实现的 Mock 服务器,用于模拟流水分析平台的 7 个核心接口 基于 FastAPI 实现的 Mock 服务器,用于模拟流水分析平台的 7 个核心接口
""" """
import argparse
import os
from fastapi import FastAPI from fastapi import FastAPI
from routers import api from routers import api
from config.settings import settings from config.settings import settings
@@ -68,9 +71,23 @@ async def health_check():
} }
def parse_args(argv=None):
parser = argparse.ArgumentParser()
parser.add_argument("--rule-hit-mode", choices=["subset", "all"], default="subset")
return parser.parse_args(argv)
def apply_rule_hit_mode(rule_hit_mode: str) -> None:
os.environ["RULE_HIT_MODE"] = rule_hit_mode
settings.RULE_HIT_MODE = rule_hit_mode
if __name__ == "__main__": if __name__ == "__main__":
import uvicorn import uvicorn
args = parse_args()
apply_rule_hit_mode(args.rule_hit_mode)
# 启动服务器 # 启动服务器
uvicorn.run( uvicorn.run(
app, app,

View File

@@ -0,0 +1,19 @@
import pytest
from main import parse_args as parse_main_args
from dev import parse_args as parse_dev_args
def test_main_parse_args_should_default_to_subset():
args = parse_main_args([])
assert args.rule_hit_mode == "subset"
def test_main_parse_args_should_accept_all_mode():
args = parse_main_args(["--rule-hit-mode", "all"])
assert args.rule_hit_mode == "all"
def test_dev_parse_args_should_reject_invalid_mode():
with pytest.raises(SystemExit):
parse_dev_args(["--rule-hit-mode", "invalid"])