132 lines
4.6 KiB
Python
132 lines
4.6 KiB
Python
![]() |
import os
|
|||
|
import json
|
|||
|
import requests
|
|||
|
import sys
|
|||
|
from lib.workflow.call import workflow_call
|
|||
|
|
|||
|
# 默认配置,仅在无法读取配置文件时使用
|
|||
|
|
|||
|
|
|||
|
session = requests.Session()
|
|||
|
_is_login = False
|
|||
|
|
|||
|
def read_config():
|
|||
|
"""读取配置文件中的设置"""
|
|||
|
# 读取全局配置
|
|||
|
global_config_path = os.path.join(os.path.expanduser("~/.chat"), ".workflow_config.json")
|
|||
|
global_config = {}
|
|||
|
if os.path.exists(global_config_path):
|
|||
|
try:
|
|||
|
with open(global_config_path, "r", encoding="utf-8") as f:
|
|||
|
global_config = json.load(f)
|
|||
|
except Exception:
|
|||
|
pass
|
|||
|
|
|||
|
# 读取仓库配置
|
|||
|
repo_config_path = os.path.join(os.getcwd(), ".chat", ".workflow_config.json")
|
|||
|
repo_config = {}
|
|||
|
if os.path.exists(repo_config_path):
|
|||
|
try:
|
|||
|
with open(repo_config_path, "r", encoding="utf-8") as f:
|
|||
|
repo_config = json.load(f)
|
|||
|
except Exception:
|
|||
|
pass
|
|||
|
|
|||
|
# 获取配置值
|
|||
|
server_url = global_config.get("api_testing_server_url", "")
|
|||
|
username = global_config.get("api_testing_server_username", "")
|
|||
|
password = global_config.get("api_testing_server_password", "")
|
|||
|
project_id = repo_config.get("test_api_project_id", "")
|
|||
|
openapi_url = repo_config.get("test_api_openapi_url", "")
|
|||
|
version_url = repo_config.get("test_api_version_url", "")
|
|||
|
|
|||
|
return server_url, username, password, project_id, openapi_url, version_url
|
|||
|
|
|||
|
def ensure_config():
|
|||
|
"""确保配置存在,如果不存在则调用配置工作流"""
|
|||
|
global_config_path = os.path.join(os.path.expanduser("~/.chat"), ".workflow_config.json")
|
|||
|
repo_config_path = os.path.join(os.getcwd(), ".chat", ".workflow_config.json")
|
|||
|
|
|||
|
# 检查全局配置和仓库配置是否存在
|
|||
|
global_config_exists = os.path.exists(global_config_path)
|
|||
|
repo_config_exists = os.path.exists(repo_config_path)
|
|||
|
|
|||
|
# 检查必填配置项是否存在
|
|||
|
config_valid = True
|
|||
|
if global_config_exists and repo_config_exists:
|
|||
|
# 读取配置
|
|||
|
global_config = {}
|
|||
|
repo_config = {}
|
|||
|
try:
|
|||
|
with open(global_config_path, "r", encoding="utf-8") as f:
|
|||
|
global_config = json.load(f)
|
|||
|
with open(repo_config_path, "r", encoding="utf-8") as f:
|
|||
|
repo_config = json.load(f)
|
|||
|
except Exception:
|
|||
|
config_valid = False
|
|||
|
|
|||
|
# 检查必填项
|
|||
|
if (not global_config.get("api_testing_server_url") or
|
|||
|
not global_config.get("api_testing_server_username") or
|
|||
|
not global_config.get("api_testing_server_password") or
|
|||
|
not repo_config.get("test_api_project_id") or
|
|||
|
not repo_config.get("test_api_openapi_url")):
|
|||
|
config_valid = False
|
|||
|
else:
|
|||
|
config_valid = False
|
|||
|
|
|||
|
if not config_valid:
|
|||
|
print("缺少API测试所需的配置,将启动配置向导...")
|
|||
|
workflow_call("/test.api.config")
|
|||
|
|
|||
|
# 重新检查配置是否已创建并包含必要项
|
|||
|
try:
|
|||
|
if os.path.exists(global_config_path) and os.path.exists(repo_config_path):
|
|||
|
with open(global_config_path, "r", encoding="utf-8") as f:
|
|||
|
global_config = json.load(f)
|
|||
|
with open(repo_config_path, "r", encoding="utf-8") as f:
|
|||
|
repo_config = json.load(f)
|
|||
|
|
|||
|
if (global_config.get("api_testing_server_url") and
|
|||
|
global_config.get("api_testing_server_username") and
|
|||
|
global_config.get("api_testing_server_password") and
|
|||
|
repo_config.get("test_api_project_id") and
|
|||
|
repo_config.get("test_api_openapi_url")):
|
|||
|
return True
|
|||
|
print("配置失败")
|
|||
|
return False
|
|||
|
except Exception:
|
|||
|
print("配置失败")
|
|||
|
return False
|
|||
|
|
|||
|
return True
|
|||
|
|
|||
|
# 读取配置
|
|||
|
result = ensure_config()
|
|||
|
if not result:
|
|||
|
print("配置失败,工作流不能继续执行")
|
|||
|
exit(0)
|
|||
|
SERVER_URL, USERNAME, PASSWORD, PROJECT_ID, OPENAPI_URL, VERSION_URL = read_config()
|
|||
|
|
|||
|
def login():
|
|||
|
global _is_login
|
|||
|
if _is_login:
|
|||
|
return
|
|||
|
session.post(
|
|||
|
f"{SERVER_URL}/user/auth/login",
|
|||
|
data={"username": USERNAME, "password": PASSWORD, "grant_type": "password"},
|
|||
|
)
|
|||
|
_is_login = True
|
|||
|
|
|||
|
|
|||
|
def get_path_op_id(keyword: str, method: str):
|
|||
|
res = session.get(
|
|||
|
f"{SERVER_URL}/autotest/projects/{PROJECT_ID}/apipathops",
|
|||
|
params={"keyword": keyword, "page": 1, "size": 20},
|
|||
|
)
|
|||
|
for pathop in res.json()["pathops"]:
|
|||
|
if pathop["method"].lower().strip() == method.lower().strip():
|
|||
|
return pathop["id"]
|
|||
|
|
|||
|
|
|||
|
login()
|