refactor(api): yun8_sync 并入 tests 分层框架(接口层 apis/yun8 + 用例层 api + Allure)

- tests/core: 新增 BaseHttpClient 统一 HTTP 封装(直连绕行/超时/日志/自定义编码);
  db_helper 追加 Db 长连接类(事务/mogrify/自动重连),既有函数不动
- tests/apis/yun8: 21 个 step 方法按域拆分为 5 个 Mixin(driver/accounting/
  audit_payment/receipt/third_party),Yun8Pipeline 24 步编排原样迁移,
  SQL 全部参数化并集中至 sql_templates
- tests/api: 5 阶段有序 P0 E2E 用例(业务失败由 print 改为真实报错)+
  README 迁移(删除明文密码段,修正步骤编号漂移)
- yun8_sync 目录退役:配置并入 test_config.yaml 的 yun8_api 段;
  造数 CLI 保留(python -m tests.apis.yun8.cli,兼容旧 config.yaml 结构)
- pytest.ini 注册 api/yun8_sync marker;requirements.txt 补 requests>=2.28
- 静态验证: compileall / 全仓 collect 24 条 / marker 过滤 / CLI --help /
  客户端与 pipeline 离线实例化 / SQL 占位符核对 / cross_end 兼容
This commit is contained in:
xst
2026-09-08 11:38:17 +08:00
parent e62e3224bf
commit 52b73f456c
26 changed files with 2147 additions and 1786 deletions
+102
View File
@@ -145,3 +145,105 @@ database:
password: "Rgxi3!kD9jjXpgzx"
database: "ntocc"
charset: "utf8mb4"
# ═══════════════════════════════════════════════════════════════════
# ── yun8 运输流程 API 造数 (tests/apis/yun8 + tests/api) ──
# 对应 Postman Collection: yun8.postman_collection.json(18 接口 + SQL)
# 数据库连接复用上方 database 段
# ═══════════════════════════════════════════════════════════════════
yun8_api:
base_url: "https://ybxcx.ynyun8.com:8000"
verify_ssl: false
timeout_seconds: 60 # 单请求超时(旧工具无超时,迁移后新增)
# 通用请求头(与 Postman Collection 一致)
common_headers:
host: "ybxcx.ynyun8.com:8000"
accept-language: "zh-CN,zh;q=0.9,en;q=0.8"
accept-encoding: "gzip"
# 司机端 Header(步骤1-5)
driver_headers:
deviceid: "A58FBAB7161EA82309491FB06CDE9687"
user-agent: "okhttp-okgo/jeasonlzy"
# 管理端 Header(步骤6-16)
admin_headers:
deviceid: "0000000000"
secret: "GouldAMap=d58bb5f7da1aa1d6b78741ded2450f2d"
user-agent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 Edg/149.0.0.0"
accept: "application/json, text/plain, */*"
referer: "https://ybxcx.ynyun8.com:8000/admin/"
# 授权 Token(CLI --auth-driver / --auth-admin 可覆盖)
tokens:
driver_token: "Bearer YQZOMJWOYljNZJGN0XT23kFONQJZmDRNlm20lTTYYAUY4YjhiZTj0cDlhDjw" # 司机端 Bearer token (含 Bearer 前缀)
admin_token: "Bearer Z=BZ1gdZYkDN2Ij4kzTw3EGN0GnN2TYYhJcMzQmYNUZNNEWZjNWwmTTOhQD=" # 管理端 Bearer token (含 Bearer 前缀)
# 司机端固定参数(装货/卸货)
driver_params:
# 重量模式: "fixed"(固定值) / "random"(每次随机 1-10 小数)
weight_mode: "random"
per_weight: "10" # fixed 模式下的接单单位重量
weight: "10" # fixed 模式下的装货/卸货重量
# 装货/卸货经纬度(不为空时覆盖货源接口返回值)
# 历史环境坐标备查(手工切换时取消注释并覆盖上方对应键):
# load_latitude: "38.5166" # 接单+装货纬度
# load_longitude: "102.308617" # 接单+装货经度
# unload_latitude: "38.529333" # 卸货纬度
# unload_longitude: "102.25395" # 卸货经度
# load_latitude: "28.116007" # 接单+装货纬度
# load_longitude: "112.982951" # 接单+装货经度
# unload_latitude: "30.663179" # 卸货纬度
# unload_longitude: "104.039285" # 卸货经度
load_latitude: "" # 接单+装货纬度
load_longitude: "" # 接单+装货经度
unload_latitude: "" # 卸货纬度
unload_longitude: "" # 卸货经度
# 待运输单重置(清掉旧记录后重新查询,仅影响司机端流程)
reset_order_detail: false # true=step03后执行DELETE+UPDATE再重新查询
reset_order_detail_code: "f234118ee56d4b3db4ae1eeb97b0b194" # DELETE+UPDATE SET 使用的固定 code
# 通用经纬度兜底(当上述配置和接口返回值都为空时使用)
latitude: "25.005731558883365"
longitude: "102.652599407955"
# 装货照片 URL
load_img_url: "https://ynyun8.eos-chongqing-1.cmecloud.cn/2026-06-30/88a6ff85d8ad4e26bf1571d59ae4f60c.jpg?AWSAccessKeyId=AOS5YGU0MP2Y88ELIFFH&Expires=4102329600&Signature=s68ODdXZ%2BI9s09IbaPwLy6Hefxw%3D"
# 卸货照片 URL
unload_img_url: "https://ynyun8.eos-chongqing-1.cmecloud.cn/2026-06-30/66426dc5be6242968dd9a3d0fd6e8b38.jpg?AWSAccessKeyId=AOS5YGU0MP2Y88ELIFFH&Expires=4102329600&Signature=UVKmwyFEnzA4fh%2BmnlGzmDOmuJE%3D"
# 核算固定参数
accounting:
branch_code: "49adb23841asw3118yunnanchenggang"
business_type_code: "1003999"
payee_code: "16d0c260f7e34967b36113c770e03486"
shipment_phone: "15198908093"
shipment_party_code: "ce8b73b38cf6450d84740cf23aa4ed52"
settlement_type: "2"
# 队长分账:payer_receiver/link_man 不为空 且 captainSplitMode=2 时触发
payer_receiver: "" # 收款人
payer_receiver_link_man: "" # 收款联系人
captain_split_mode: "0" # 队长分账模式 (0=不分账, 2=分账)
execute_after_audit: true # 审核通过后是否执行分账/付款/回单等后续步骤(12-21)
# 垫资/付款固定参数
payment:
pay_types: "3,4,5,9,10,11"
pay_platform: "3"
sms_code: "1234"
phone: "13888888888"
pay_type: "arpa_2"
# ETC 开票 (步骤 22)
etc_invoice:
count: 3 # 每个运单插入的发票条数; 金额合计受运费×50%约束
# 回单 file_name 格式(INSERT 语句本体在 tests/apis/yun8/sql_templates.py)
sql:
file_name_template: "{file_prefix}_1_signed.pdf"
# 第三方端(滇运通审核,独立 token / host,可选执行)
dianyuntong:
enabled: false # true=执行, false=跳过
base_url: "https://yndyt.cxtech.vip"
token: "Bearer NTmlyQYMYYEMwDTy1DDyxWjwykNZyQGO0jDOYYAMMQcNMgMN3jTy0jTYZlZh" # 独立 Bearer Token
cookie: "" # Cookie 字符串 (Admin-Token=xxx; sl-session=xxx)