- 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 兼容
250 lines
12 KiB
YAML
250 lines
12 KiB
YAML
# 运八网络货运平台 — 测试环境配置
|
||
# 数据来源: knowledge_base/00_project/project_profile.md
|
||
# 使用方式: from tests.core.config_loader import load_config
|
||
#
|
||
# 覆盖端:
|
||
# Web: 管理端 admin / 司机端小程序 mini_program
|
||
# App: 司机安卓 driver_android
|
||
# (预留: 货主安卓 shipper_android / 苹果端 driver_ios / shipper_ios)
|
||
|
||
# ═══════════════════════════════════════════════════════════════════
|
||
# ── 管理端 (Web/Playwright) ──
|
||
# ═══════════════════════════════════════════════════════════════════
|
||
admin:
|
||
base_url: "https://ybxcx.ynyun8.com:8000/admin"
|
||
api_base_url: "https://ybxcx.ynyun8.com:8000/"
|
||
timeout_seconds: 120
|
||
screenshot_on_failure: true
|
||
screenshot_on_step: false
|
||
browsers:
|
||
- chromium
|
||
- firefox
|
||
viewport:
|
||
width: 1920
|
||
height: 1080
|
||
|
||
# 登录态复用: python tests/web/admin/save_auth.py 生成后自动跳过验证码
|
||
skip_login: true
|
||
storage_state_dir: "tests/web/auth"
|
||
|
||
# ═══════════════════════════════════════════════════════════════════
|
||
# ── 司机端小程序 (miniprogram-automator / Node.js) ──
|
||
# ═══════════════════════════════════════════════════════════════════
|
||
# 原理: Python pytest → subprocess → node runner.js → miniprogram-automator
|
||
# 操控微信开发者工具中的小程序,返回 JSON 结果
|
||
#
|
||
# 前置条件:
|
||
# 1. 安装微信开发者工具 + 开启服务端口(设置 → 安全 → 服务端口)
|
||
# 2. uni-app 编译为微信小程序: npm run build:mp-weixin
|
||
# 3. 安装依赖: cd tests/web/mini_program/automator && npm install
|
||
mini_program:
|
||
# uni-app 编译出的小程序项目路径(.js/.json/.wxml 所在目录)
|
||
project_path: "E:/test/QaAutomationHub/mini_program/dist" # ⚠️ 请确认实际路径
|
||
# 微信开发者工具 CLI 路径(Windows 默认如下,macOS 为 /Applications/...)
|
||
dev_tool_path: "C:/Program Files (x86)/Tencent/微信web开发者工具/cli.bat"
|
||
timeout_seconds: 120
|
||
screenshot_on_failure: true
|
||
|
||
# ═══════════════════════════════════════════════════════════════════
|
||
# ── 司机安卓端 (App/Appium) ──
|
||
# ═══════════════════════════════════════════════════════════════════
|
||
driver_android:
|
||
appium_host: "http://localhost:4723"
|
||
timeout_seconds: 120
|
||
screenshot_on_failure: true
|
||
platform: android
|
||
skip_login: true # 手动登录一次后 noReset 自动复用
|
||
|
||
device_name: "Android Emulator"
|
||
app_package: "com.arpa.ynchenggangdriver" # ⚠️ 请确认实际包名
|
||
app_activity: "com.arpa.ntocc.MainActivity" # ⚠️ 请确认实际启动 Activity
|
||
no_reset: true
|
||
new_command_timeout: 120
|
||
|
||
# ═══════════════════════════════════════════════════════════════════
|
||
# ── 货主安卓端 (App/Appium) ──
|
||
# ═══════════════════════════════════════════════════════════════════
|
||
shipper_android:
|
||
appium_host: "http://localhost:4723"
|
||
timeout_seconds: 120
|
||
screenshot_on_failure: true
|
||
platform: android
|
||
skip_login: true
|
||
|
||
device_name: "Android Emulator"
|
||
app_package: "com.arpa.ynChengGangShipper" # ⚠️ 请确认实际包名
|
||
app_activity: "com.arpa.wuche_shipper.MainActivity" # ⚠️ 请确认实际启动 Activity
|
||
no_reset: true
|
||
new_command_timeout: 120
|
||
|
||
# ═══════════════════════════════════════════════════════════════════
|
||
# ── 司机苹果端 (App/Appium,需 macOS) ──
|
||
# ═══════════════════════════════════════════════════════════════════
|
||
driver_ios:
|
||
appium_host: "http://localhost:4723"
|
||
timeout_seconds: 120
|
||
screenshot_on_failure: true
|
||
platform: ios
|
||
skip_login: true
|
||
|
||
device_name: "iPhone 15"
|
||
bundle_id: "com.arpa.ynchenggangdriver" # ⚠️ 请确认实际 Bundle ID
|
||
no_reset: true
|
||
new_command_timeout: 120
|
||
|
||
# ═══════════════════════════════════════════════════════════════════
|
||
# ── 货主苹果端 (App/Appium,需 macOS) ──
|
||
# ═══════════════════════════════════════════════════════════════════
|
||
shipper_ios:
|
||
appium_host: "http://localhost:4723"
|
||
timeout_seconds: 120
|
||
screenshot_on_failure: true
|
||
platform: ios
|
||
skip_login: true
|
||
|
||
device_name: "iPhone 15"
|
||
bundle_id: "com.yunba.shipper" # ⚠️ 请确认实际 Bundle ID
|
||
no_reset: true
|
||
new_command_timeout: 120
|
||
|
||
# ═══════════════════════════════════════════════════════════════════
|
||
# ── 测试账号 ──
|
||
# ═══════════════════════════════════════════════════════════════════
|
||
accounts:
|
||
super_admin:
|
||
phone: "super_admin"
|
||
password: "951260684NiAi.."
|
||
role: "平台运营人员"
|
||
use_on: [admin]
|
||
|
||
team_leader:
|
||
phone: "13113113113"
|
||
password: "88888888"
|
||
role: "车队长"
|
||
use_on: [admin, mini_program]
|
||
|
||
driver:
|
||
phone: "15188888888"
|
||
password: "88888888"
|
||
role: "司机"
|
||
use_on: [mini_program, driver_android, driver_ios]
|
||
|
||
shipper:
|
||
phone: "13800000000" # ⚠️ 请确认实际货主账号
|
||
password: "88888888"
|
||
role: "货主"
|
||
use_on: [shipper_android, shipper_ios]
|
||
|
||
# ═══════════════════════════════════════════════════════════════════
|
||
# ── 数据库 (tests/core/db_helper.py 使用) ──
|
||
# ═══════════════════════════════════════════════════════════════════
|
||
database:
|
||
host: "36.137.133.24"
|
||
port: 3306
|
||
user: "ntocc"
|
||
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)
|