refactor(tests): restructure into layered POM architecture with Allure reporting
- Split framework into core/ (config, logger, db, driver factories, screenshot, allure integration) and pages/ (PO layer: base/admin/driver); flatten test files per platform (web/admin, app/driver_android, cross_end) - Slim root conftest.py 656 -> ~100 lines: drop inline CN HTML report, add Allure severity mapping (p0/p1/p2 -> blocker/normal/minor) and environment.properties; support both tests.*-prefixed and bare imports - Preserve TC-D2S-001/002 cross-end E2E cases with business logic unchanged, add allure epic/feature/story/step annotations - Deduplicate: single makereport hook, shared failure-screenshot helpers, single SCREENSHOTS_DIR constant; deterministic auth-state role loading - Move DB credentials from db_helper.py into test_config.yaml (database section) - Move pytest.ini to repo root; switch reporting to allure-pytest (drop pytest-html/junitxml); update requirements.txt accordingly - Delete deprecated scaffolding: test_freight_full_flow + 6 stale page objects, iOS/shipper empty shells, dead utils - Fix flaky vxe-table action-row wait: wait for a visible td instead of hidden placeholder rows (fixed shipper-payment timeouts) - Verified end-to-end against live env: both E2E cases pass (2 passed 3m12s); run artifacts (logs/screenshots/allure) included per repo convention
|
After Width: | Height: | Size: 375 KiB |
|
After Width: | Height: | Size: 336 KiB |
@@ -0,0 +1 @@
|
||||
{"name": "TC-D2S-001 司机APP接单到管理端核算打款完整流程", "status": "passed", "description": "\n 用例ID: TC-D2S-001\n 用例名称: 司机APP接单到管理端核算打款完整流程\n 优先级: P0\n 标签: cross_end, smoke\n\n 验证从司机 APP 接单到管理端核算打款的完整跨端业务流程。\n ", "steps": [{"name": "Phase 1: 司机 APP — 接单流程", "status": "passed", "attachments": [{"name": "step_accept_order", "source": "fb375f07-77e4-4c9c-9eea-32bbb1d6d7e7-attachment.png", "type": "image/png"}], "start": 1786934016328, "stop": 1786934024642}, {"name": "Phase 1: 司机 APP — 装货流程", "status": "passed", "attachments": [{"name": "step_load_goods", "source": "c0f3c89c-1537-47c5-adca-f8ad2b6f0911-attachment.png", "type": "image/png"}], "start": 1786934024642, "stop": 1786934047412}, {"name": "Phase 1: 司机 APP — 卸货流程", "status": "passed", "attachments": [{"name": "step_unload_goods", "source": "0c9e15e6-9f3b-4cf8-86d1-249db82e25ea-attachment.png", "type": "image/png"}], "start": 1786934047412, "stop": 1786934061530}, {"name": "Phase 1: 司机 APP — 获取运输单号", "status": "passed", "start": 1786934061530, "stop": 1786934067973}, {"name": "Phase 2: Web管理端 — 运费核算(首次查询无数据时自动 SQL 重试)", "status": "passed", "attachments": [{"name": "freight_accounting_done", "source": "90d014c4-48d6-4bcc-91e9-2d24313e7598-attachment.png", "type": "image/png"}], "start": 1786934067973, "stop": 1786934079069}, {"name": "Phase 2: Web管理端 — 运单审核", "status": "passed", "attachments": [{"name": "waybill_audit_done", "source": "dfc7e87f-ead8-499a-a7af-a3982f0ae5f9-attachment.png", "type": "image/png"}], "start": 1786934079069, "stop": 1786934085850}, {"name": "Phase 2: Web管理端 — 垫资-财务打款", "status": "passed", "attachments": [{"name": "finance_payment_done", "source": "4962d607-95e6-4ecb-b522-9ad7dbf8280a-attachment.png", "type": "image/png"}], "start": 1786934085850, "stop": 1786934093832}, {"name": "Phase 2: Web管理端 — 垫资-货主打款", "status": "passed", "attachments": [{"name": "shipper_payment_done", "source": "96ae7622-3ad5-4b69-a154-2883f327ff97-attachment.png", "type": "image/png"}], "start": 1786934093832, "stop": 1786934101384}], "attachments": [{"name": "log", "source": "95e05bb0-197e-4662-85d6-4224b0e4a427-attachment.txt", "type": "text/plain"}], "start": 1786934007632, "stop": 1786934101414, "uuid": "77514abb-865c-424d-801d-65edba8090fb", "historyId": "d60b1693bd6ca247bf6278f0d4980cb3", "testCaseId": "d60b1693bd6ca247bf6278f0d4980cb3", "fullName": "tests.cross_end.test_driver_to_settlement.TestDriverToSettlement#test_driver_to_settlement_full_flow", "labels": [{"name": "feature", "value": "跨端 E2E — 司机接单到管理端核算打款"}, {"name": "story", "value": "司机APP接单到管理端核算打款完整流程"}, {"name": "tag", "value": "cross_end"}, {"name": "tag", "value": "smoke"}, {"name": "severity", "value": "blocker"}, {"name": "epic", "value": "运八网络货运平台"}, {"name": "tag", "value": "cross_end"}, {"name": "tag", "value": "p0"}, {"name": "tag", "value": "smoke"}, {"name": "parentSuite", "value": "tests.cross_end"}, {"name": "suite", "value": "test_driver_to_settlement"}, {"name": "subSuite", "value": "TestDriverToSettlement"}, {"name": "host", "value": "yunba-126"}, {"name": "thread", "value": "31316-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "tests.cross_end.test_driver_to_settlement"}], "titlePath": ["tests", "cross_end", "test_driver_to_settlement.py", "TestDriverToSettlement"]}
|
||||
|
After Width: | Height: | Size: 65 KiB |
@@ -0,0 +1 @@
|
||||
{"uuid": "773e6517-8b9c-4a10-ada2-4c578c945693", "children": ["7ddd6617-6303-48e4-b117-5f979df44be6"], "befores": [{"name": "admin_page", "status": "passed", "start": 1786934102545, "stop": 1786934103090}], "afters": [{"name": "admin_page::1", "status": "passed", "attachments": [{"name": "失败截图-admin_chromium", "source": "1d3adb1a-3535-4c0e-855b-9a0542c31dbb-attachment.png", "type": "image/png"}], "start": 1786934221102, "stop": 1786934221949}, {"name": "admin_page::<lambda>", "start": 1786934221949}], "start": 1786934102545, "stop": 1786934221949}
|
||||
@@ -0,0 +1 @@
|
||||
{"uuid": "0aeed1cc-6597-4513-a623-b021a72faec0", "children": ["77514abb-865c-424d-801d-65edba8090fb"], "befores": [{"name": "logger", "status": "passed", "start": 1786934007628, "stop": 1786934007632}], "afters": [{"name": "logger::<lambda>", "start": 1786934101417}], "start": 1786934007628, "stop": 1786934101417}
|
||||
|
After Width: | Height: | Size: 310 KiB |
|
After Width: | Height: | Size: 299 KiB |
@@ -0,0 +1 @@
|
||||
{"uuid": "ff78dc57-44b2-4c8c-8654-122680984bc0", "children": ["7ddd6617-6303-48e4-b117-5f979df44be6"], "befores": [{"name": "cross_end_context", "status": "passed", "start": 1786934107557, "stop": 1786934107557}], "afters": [{"name": "cross_end_context::<lambda>", "start": 1786934220511}], "start": 1786934107557, "stop": 1786934220511}
|
||||
@@ -0,0 +1 @@
|
||||
{"uuid": "d1ec18e1-e048-4c95-b1a1-f12d7e0f508f", "children": ["77514abb-865c-424d-801d-65edba8090fb", "7ddd6617-6303-48e4-b117-5f979df44be6"], "befores": [{"name": "config", "status": "passed", "start": 1786934001738, "stop": 1786934001742}], "afters": [{"name": "config::<lambda>", "start": 1786934221952}], "start": 1786934001738, "stop": 1786934221952}
|
||||
@@ -0,0 +1 @@
|
||||
{"uuid": "22611261-d282-45fe-ac8e-e788106017e2", "children": ["77514abb-865c-424d-801d-65edba8090fb"], "befores": [{"name": "cross_end_context", "status": "passed", "start": 1786934007628, "stop": 1786934007628}], "afters": [{"name": "cross_end_context::<lambda>", "start": 1786934101418}], "start": 1786934007628, "stop": 1786934101418}
|
||||
|
After Width: | Height: | Size: 336 KiB |
|
After Width: | Height: | Size: 90 KiB |
@@ -0,0 +1 @@
|
||||
{"uuid": "76bab243-771c-4cff-9547-e7e0fa175cd1", "children": ["77514abb-865c-424d-801d-65edba8090fb"], "befores": [{"name": "app_driver", "status": "passed", "start": 1786934002251, "stop": 1786934007627}], "afters": [{"name": "app_driver::1", "status": "passed", "start": 1786934101422, "stop": 1786934101706}, {"name": "app_driver::<lambda>", "start": 1786934101706}], "start": 1786934002251, "stop": 1786934101706}
|
||||
@@ -0,0 +1 @@
|
||||
{"uuid": "a0aa26d0-b619-4d40-860f-7e9eff4eb99e", "children": ["77514abb-865c-424d-801d-65edba8090fb"], "befores": [{"name": "admin_page", "status": "passed", "start": 1786934001742, "stop": 1786934002251}], "afters": [{"name": "admin_page::1", "status": "passed", "start": 1786934101707, "stop": 1786934102526}, {"name": "admin_page::<lambda>", "start": 1786934102527}], "start": 1786934001742, "stop": 1786934102527}
|
||||
|
After Width: | Height: | Size: 65 KiB |
|
After Width: | Height: | Size: 65 KiB |
@@ -0,0 +1,17 @@
|
||||
[32mINFO [0m tests.cross_end.test_driver_to_settlement:test_driver_to_settlement.py:83 ============================================================
|
||||
[32mINFO [0m tests.cross_end.test_driver_to_settlement:test_driver_to_settlement.py:84 跨端 E2E: 司机APP → 管理端核算打款 完整流程开始
|
||||
[32mINFO [0m tests.cross_end.test_driver_to_settlement:test_driver_to_settlement.py:85 ============================================================
|
||||
[32mINFO [0m tests.cross_end.test_driver_to_settlement:test_driver_to_settlement.py:102 -> 接单流程完成
|
||||
[32mINFO [0m tests.cross_end.test_driver_to_settlement:test_driver_to_settlement.py:107 -> 装货流程完成
|
||||
[32mINFO [0m tests.cross_end.test_driver_to_settlement:test_driver_to_settlement.py:112 -> 卸货流程完成
|
||||
[32mINFO [0m tests.cross_end.test_driver_to_settlement:test_driver_to_settlement.py:117 -> 运输单号: RHJC040026081300021030440013
|
||||
[32mINFO [0m tests.cross_end.test_driver_to_settlement:test_driver_to_settlement.py:129 -> 运费核算完成: RHJC040026081300021030440013
|
||||
[32mINFO [0m tests.cross_end.test_driver_to_settlement:test_driver_to_settlement.py:134 -> 运单审核完成: RHJC040026081300021030440013
|
||||
[32mINFO [0m tests.cross_end.test_driver_to_settlement:test_driver_to_settlement.py:138 -> 垫资-财务打款完成: RHJC040026081300021030440013
|
||||
[32mINFO [0m tests.cross_end.test_driver_to_settlement:test_driver_to_settlement.py:142 -> 垫资-货主打款完成: RHJC040026081300021030440013
|
||||
[32mINFO [0m tests.cross_end.test_driver_to_settlement:test_driver_to_settlement.py:147 ============================================================
|
||||
[32mINFO [0m tests.cross_end.test_driver_to_settlement:test_driver_to_settlement.py:148 跨端 E2E: 司机APP → 管理端核算打款 完整流程结束!
|
||||
[32mINFO [0m tests.cross_end.test_driver_to_settlement:test_driver_to_settlement.py:149 运输单号: RHJC040026081300021030440013
|
||||
[32mINFO [0m tests.cross_end.test_driver_to_settlement:test_driver_to_settlement.py:150 核算完成: True
|
||||
[32mINFO [0m tests.cross_end.test_driver_to_settlement:test_driver_to_settlement.py:151 审核完成: True
|
||||
[32mINFO [0m tests.cross_end.test_driver_to_settlement:test_driver_to_settlement.py:152 ============================================================
|
||||
|
After Width: | Height: | Size: 78 KiB |
@@ -0,0 +1 @@
|
||||
{"uuid": "f4adfd0f-a510-4886-ad09-13655906a531", "children": ["77514abb-865c-424d-801d-65edba8090fb", "7ddd6617-6303-48e4-b117-5f979df44be6"], "befores": [{"name": "admin_config", "status": "passed", "start": 1786934001742, "stop": 1786934001742}], "afters": [{"name": "admin_config::<lambda>", "start": 1786934221952}], "start": 1786934001742, "stop": 1786934221952}
|
||||
@@ -0,0 +1,10 @@
|
||||
[32mINFO [0m tests.cross_end.test_driver_to_settlement:test_driver_to_settlement.py:196 ============================================================
|
||||
[32mINFO [0m tests.cross_end.test_driver_to_settlement:test_driver_to_settlement.py:197 跨端 E2E: 司机APP → 管理端核算打款(车队长全额收款)完整流程开始
|
||||
[32mINFO [0m tests.cross_end.test_driver_to_settlement:test_driver_to_settlement.py:198 ============================================================
|
||||
[32mINFO [0m tests.cross_end.test_driver_to_settlement:test_driver_to_settlement.py:215 -> 接单流程完成
|
||||
[32mINFO [0m tests.cross_end.test_driver_to_settlement:test_driver_to_settlement.py:220 -> 装货流程完成
|
||||
[32mINFO [0m tests.cross_end.test_driver_to_settlement:test_driver_to_settlement.py:225 -> 卸货流程完成
|
||||
[32mINFO [0m tests.cross_end.test_driver_to_settlement:test_driver_to_settlement.py:230 -> 运输单号: RHJC040026081300021032230014
|
||||
[32mINFO [0m tests.cross_end.test_driver_to_settlement:test_driver_to_settlement.py:243 -> 运费核算完成(车队长全额收款): RHJC040026081300021032230014
|
||||
[32mINFO [0m tests.cross_end.test_driver_to_settlement:test_driver_to_settlement.py:248 -> 运单审核完成: RHJC040026081300021032230014
|
||||
[32mINFO [0m tests.cross_end.test_driver_to_settlement:test_driver_to_settlement.py:252 -> 垫资-财务打款完成: RHJC040026081300021032230014
|
||||
@@ -0,0 +1 @@
|
||||
{"uuid": "d35f80a5-503a-49fa-9c5a-c1f8b9511ec1", "children": ["77514abb-865c-424d-801d-65edba8090fb"], "befores": [{"name": "ensure_admin_login", "status": "passed", "start": 1786934007628, "stop": 1786934007628}], "afters": [{"name": "ensure_admin_login::<lambda>", "start": 1786934101419}], "start": 1786934007628, "stop": 1786934101419}
|
||||
@@ -0,0 +1 @@
|
||||
{"uuid": "ed843a71-f2fd-4e3f-be14-f21cc777def2", "children": ["77514abb-865c-424d-801d-65edba8090fb", "7ddd6617-6303-48e4-b117-5f979df44be6"], "befores": [{"name": "driver_android_config", "status": "passed", "start": 1786934001742, "stop": 1786934001742}], "afters": [{"name": "driver_android_config::<lambda>", "start": 1786934221951}], "start": 1786934001742, "stop": 1786934221951}
|
||||
@@ -0,0 +1 @@
|
||||
{"uuid": "4794fd5a-f710-41ff-9285-9b06c5fe5716", "children": ["7ddd6617-6303-48e4-b117-5f979df44be6"], "befores": [{"name": "ensure_admin_login", "status": "passed", "start": 1786934107557, "stop": 1786934107557}], "afters": [{"name": "ensure_admin_login::<lambda>", "start": 1786934220512}], "start": 1786934107557, "stop": 1786934220512}
|
||||
@@ -0,0 +1 @@
|
||||
{"uuid": "6e9ee2ee-e31e-49cd-ac2d-0c6cc03f3bce", "children": ["7ddd6617-6303-48e4-b117-5f979df44be6"], "befores": [{"name": "app_driver", "status": "passed", "start": 1786934103090, "stop": 1786934107557}], "afters": [{"name": "app_driver::1", "status": "passed", "attachments": [{"name": "失败截图-android", "source": "2d7b012c-4a60-4740-b595-3d5c033ed16e-attachment.png", "type": "image/png"}], "start": 1786934220513, "stop": 1786934221100}, {"name": "app_driver::<lambda>", "start": 1786934221100}], "start": 1786934103090, "stop": 1786934221100}
|
||||
@@ -0,0 +1 @@
|
||||
{"uuid": "084008e2-d4f2-4380-8623-a86224003c19", "children": ["77514abb-865c-424d-801d-65edba8090fb"], "befores": [{"name": "ensure_driver_login", "status": "passed", "start": 1786934007628, "stop": 1786934007628}], "afters": [{"name": "ensure_driver_login::<lambda>", "start": 1786934101419}], "start": 1786934007628, "stop": 1786934101419}
|
||||
|
After Width: | Height: | Size: 374 KiB |
|
After Width: | Height: | Size: 63 KiB |
|
After Width: | Height: | Size: 73 KiB |
|
After Width: | Height: | Size: 64 KiB |
@@ -0,0 +1 @@
|
||||
{"uuid": "d94d588b-344e-4864-8a6a-dff5d57c291b", "children": ["7ddd6617-6303-48e4-b117-5f979df44be6"], "befores": [{"name": "logger", "status": "passed", "start": 1786934107557, "stop": 1786934107557}], "afters": [{"name": "logger::<lambda>", "start": 1786934220509}], "start": 1786934107557, "stop": 1786934220509}
|
||||
@@ -0,0 +1,5 @@
|
||||
base_url=https://ybxcx.ynyun8.com:8000/admin
|
||||
browsers=chromium,firefox
|
||||
skip_login=True
|
||||
platform=Windows
|
||||
project=\u8fd0\u516b\u7f51\u7edc\u8d27\u8fd0\u5e73\u53f0
|
||||
@@ -0,0 +1 @@
|
||||
{"uuid": "db3b44eb-71d9-40bb-88c9-4a982d4b614f", "children": ["7ddd6617-6303-48e4-b117-5f979df44be6"], "befores": [{"name": "ensure_driver_login", "status": "passed", "start": 1786934107557, "stop": 1786934107557}], "afters": [{"name": "ensure_driver_login::<lambda>", "start": 1786934220512}], "start": 1786934107557, "stop": 1786934220512}
|
||||
|
After Width: | Height: | Size: 66 KiB |