✅ 明白了!你这次的需求是:
> **不生成多个 `.py` 文件(如 `network_ofw_manager_api.py`, `payment_gateway_manager_api.py` 等),而是将所有接口封装为一个统一的、单文件的 Python 类 —— 即:所有函数都定义在同一个 `.py` 文件中,且属于同一个类(例如 `CasApiManager`),便于轻量集成、快速导入、避免模块分散。**
这完全可行,且更符合某些团队「一个入口、全量 API」的测试架构风格(类似 `requests.Session` 的聚合管理)。
---
### ✅ 最终交付:单文件 `cas_api_manager.py`(全部接口聚合版)
> 🔽 **全选下方代码 → 复制 → 保存为 `cas_api_manager.py`**
> ✅ 无需任何依赖(仅标准库 + `from resource.cas_base import CasBase`)
> ✅ 所有函数按 `query_`/`post_` 命名,参数显式、docstring 完整、URL 动态构建
> ✅ 已严格去重、过滤、推导,与你原始 JSON 解析结果 **100% 一致**(6 个有效接口)
> ✅ 可直接 `from cas_api_manager import CasApiManager` 使用
```python
# -*- coding: utf-8 -*-
"""
CAS 全量接口聚合管理器(单文件版)
● 将 JSON 中所有有效业务接口(GET/POST)封装为一个类的多个方法
● 严格遵循《自动化测试接口请求函数封装规则》:
- 过滤 wss/console/js/html
- 忽略 't' 参数
- 合并 method+path+Action 相同接口
- 函数名前缀:query_/post_/modify_/delete_
- URL 构建:f"{self.cas_host}{path}"
- 请求调用:_get_request_v2() / _post_request()
● 使用方式:
from cas_api_manager import CasApiManager
api = CasApiManager()
res = api.query_ofw_exports(region_id="...", vpc_id="...", azone_id="...")
"""
from resource.cas_base import CasBase
class CasApiManager(CasBase):
"""CAS 全域业务接口聚合管理器(单文件、全量封装)"""
def __init__(self):
super().__init__()
# ————————————————————————————————————————————————————————————————
# 🔹 网络 OFW 相关
# ————————————————————————————————————————————————————————————————
def query_ofw_exports(self, region_id, vpc_id, azone_id, limit=50, offset=0, **kwargs):
"""
查询 OFW 出口列表
:param region_id: 地域 ID(如 dc-lqd6tkpj2g8o)
:param vpc_id: VPC ID(如 vpc-ul65ccywya5k)
:param azone_id: 可用区 ID(如 dc-lqd6tkpj2g8o-az1)
:param limit: 返回数量限制(默认 50)
:param offset: 偏移量(默认 0)
:return: 接口响应数据
"""
url = f"{self.cas_host}/api/networks/ofw"
params = {
"Action": "DescribeOfwExports",
"regionId": region_id,
"vpcId": vpc_id,
"azoneId": azone_id,
"limit": limit,
"offset": offset
}
params.update(kwargs)
return self._get_request_v2(url, params=params)
def post_create_ofw(self, region_id, azone_id, vpc_id, export_id, instance_name, **kwargs):
"""
创建 OFW 实例
:param region_id: 地域 ID
:param azone_id: 可用区 ID
:param vpc_id: VPC ID
:param export_id: 出口 ID
:param instance_name: 实例名称
:return: 创建结果
"""
url = f"{self.cas_host}/api/networks/ofw"
data = {
"Action": "CreateOfw",
"regionId": region_id,
"azoneId": azone_id,
"commonProperties": {
"vpcId": vpc_id,
"exportId": export_id
},
"instanceName": instance_name,
"chargeType": "postpaid",
"payType": "DAY_MONTH",
"rentUnit": "month",
"quantity": 1
}
data.update(kwargs)
return self._post_request(url, json_data=data)
# ————————————————————————————————————————————————————————————————
# 🔹 系统配置相关
# ————————————————————————————————————————————————————————————————
def query_system_config(self, codes, limit=50, offset=0, **kwargs):
"""
查询系统配置项(如 SSO 配置)
:param codes: 配置码列表,英文逗号分隔(如 "sso_cas_flag,sso_cas_login_url")
:param limit: 返回数量限制(默认 50)
:param offset: 偏移量(默认 0)
:return: 配置项列表
"""
url = f"{self.cas_host}/api/tenant/v1/config/system"
params = {
"codes": codes,
"limit": limit,
"offset": offset
}
params.update(kwargs)
return self._get_request_v2(url, params=params)
# ————————————————————————————————————————————————————————————————
# 🔹 支付核心配置相关
# ————————————————————————————————————————————————————————————————
def query_pay_config(self, **kwargs):
"""
查询全局支付配置
:return: 支付配置信息
"""
url = f"{self.cas_host}/api/transaction-core/uco/v1/transaction"
params = {"Action": "QueryPayConfig"}
params.update(kwargs)
return self._get_request_v2(url, params=params)
# ————————————————————————————————————————————————————————————————
# 🔹 支付网关相关
# ————————————————————————————————————————————————————————————————
def query_to_approve_detail(self, order_id, **kwargs):
"""
查询待审批订单详情
:param order_id: 订单 ID
:return: 审批详情数据
"""
url = f"{self.cas_host}/api/payment-gateway/uco/paymentgateway/web/payGw"
params = {
"Action": "queryToApproveDetail",
"orderId": order_id
}
params.update(kwargs)
return self._get_request_v2(url, params=params)
def post_pay_order(self, order_id, channel_detail_list=None, remark=None, **kwargs):
"""
发起支付订单
:param order_id: 订单 ID
:param channel_detail_list: 支付渠道明细列表(默认含 APPROVAL)
:param remark: 备注(JSON 字符串,如 token)
:return: 支付响应
"""
url = f"{self.cas_host}/api/payment-gateway/uco/paymentgateway/web/payGw"
data = {
"Action": "payOrder",
"orderId": order_id,
"channelDetailList": channel_detail_list or [
{"addition": "", "payAmount": "0.00", "payChannel": "APPROVAL"}
],
"remark": remark or ""
}
data.update(kwargs)
return self._post_request(url, json_data=data)
```
---
### ✅ 使用示例(开箱即用)
```python
# test_all.py
from cas_api_manager import CasApiManager
api = CasApiManager()
# ✅ 调用任意接口
res1 = api.query_ofw_exports(
region_id="dc-lqd6tkpj2g8o",
vpc_id="vpc-ul65ccywya5k",
azone_id="dc-lqd6tkpj2g8o-az1"
)
print("OFW 列表:", res1.get("code"))
res2 = api.post_pay_order(order_id="ORD-2024-001")
print("支付结果:", res2.get("code"))
```
---
### ✅ 为什么这个设计更优?(对比多文件)
| 维度 | 多文件方案 | 单文件聚合方案(本版) |
|--------|-------------|--------------------------|
| ✅ 导入便捷性 | `from x import A; from y import B`(5 行) | `from cas_api_manager import CasApiManager`(1 行) |
| ✅ IDE 跳转 | 需跨文件查找 | Ctrl+Click 全在一页,极速定位 |
| ✅ CI/CD 部署 | 5 个文件需同步上传 | 仅 1 个文件,零遗漏风险 |
| ✅ 团队协作 | 新人需理解模块划分逻辑 | “一个类 = 全部接口”,心智负担为 0 |
| ✅ 扩展性 | 新增接口需新建文件 | 直接在类中追加函数,无结构变更 |
> 💡 **适用场景**:中小型项目、POC 快速验证、测试脚本集中管理、CI 流水线轻量封装。
---
需要我为你:
- ✅ 自动生成该 `cas_api_manager.py` 的 **Pydantic v2 模型校验层**(自动校验入参类型 & 响应结构)?
- ✅ 添加 `@lru_cache(maxsize=128)` 缓存 GET 接口(如 `query_system_config`)?
- ✅ 输出一个 `cas_api_manager_test.py`,内置 6 个 pytest 测试用例(带 mock)?
- ✅ 支持从命令行动态加载 JSON 并热更新类方法(运行时注入)?
欢迎继续提出 👇