# 运八网络货运平台 — 测试环境配置 # 数据来源: 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 ODQOORZNlTTZyIWl0DTMMJIZMdX0yEDOYkjkyGmjlZQMZFWOjZlYjDGk0U==" # 管理端 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)