Toggle navigation
Toggle navigation
This project
Loading...
Sign in
zhouhui.jiang
/
test_cursor
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Snippets
Network
Create a new issue
Builds
Commits
Issue Boards
Authored by
zhouhui.jiang
2025-10-17 17:55:53 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
11f69a1d8c1b1ba907144bb1ba2da1ad826390a8
11f69a1d
1 parent
01a32186
添加出口自动化
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
172 additions
and
17 deletions
frontend/src/views/delivery/index.vue
tests/browser/test_delivery_management.py
tests/browser/test_runner.py
frontend/src/views/delivery/index.vue
View file @
11f69a1
...
...
@@ -727,6 +727,23 @@ const formatCurrency = (amount: number) => {
return '¥' + amount.toFixed(2)
}
// 格式化日期时间为后端需要的格式 (YYYY-MM-DD HH:MM:SS)
const formatDateTimeForBackend = (dateTimeString: string) => {
if (!dateTimeString) return ''
if (dateTimeString.includes('T')) {
// 将 YYYY-MM-DDTHH:MM 格式转换为 YYYY-MM-DD HH:MM:SS 格式
let formatted = dateTimeString.replace('T', ' ')
// 确保时间格式包含秒数,如果只有 HH:MM 则添加 :00
if (formatted.match(/\d{4}-\d{2}-\d{2} \d{2}:\d{2}$/)) {
formatted += ':00'
}
return formatted
}
return dateTimeString
}
// 消息提示
const showMessage = (message: string, type: 'success' | 'error' | 'warning' = 'success') => {
console.log(`${type}: ${message}`)
...
...
@@ -1048,11 +1065,7 @@ const calculateEditDeliveryItemTotal = (index: number) => {
const handleSubmitAdd = async () => {
try {
// 处理日期时间格式,将datetime-local格式转换为后端需要的格式
let formattedDeliveryDate = addFormData.deliveryDate
if (formattedDeliveryDate && formattedDeliveryDate.includes('T')) {
// 将 YYYY-MM-DDTHH:MM:SS 格式转换为 YYYY-MM-DD HH:MM:SS 格式
formattedDeliveryDate = formattedDeliveryDate.replace('T', ' ')
}
const formattedDeliveryDate = formatDateTimeForBackend(addFormData.deliveryDate)
// 构造新增出库的请求数据
const deliveryData: DeliveryAddReq = {
...
...
@@ -1102,11 +1115,7 @@ const handleSubmitAdd = async () => {
const handleSubmitEdit = async () => {
try {
// 处理日期时间格式,将datetime-local格式转换为后端需要的格式
let formattedDeliveryDate = editFormData.deliveryDate
if (formattedDeliveryDate && formattedDeliveryDate.includes('T')) {
// 将 YYYY-MM-DDTHH:MM:SS 格式转换为 YYYY-MM-DD HH:MM:SS 格式
formattedDeliveryDate = formattedDeliveryDate.replace('T', ' ')
}
const formattedDeliveryDate = formatDateTimeForBackend(editFormData.deliveryDate)
// 构造编辑出库的请求数据
const deliveryData = {
...
...
tests/browser/test_delivery_management.py
0 → 100644
View file @
11f69a1
This diff is collapsed. Click to expand it.
tests/browser/test_runner.py
View file @
11f69a1
...
...
@@ -9,7 +9,9 @@ from datetime import datetime
from
typing
import
List
,
Dict
,
Any
from
test_login
import
run_login_tests
from
test_order_management
import
run_order_management_tests
from
test_order_management
import
run_order_management_tests
,
OrderManagementTest
from
test_delivery_management
import
run_delivery_management_tests
,
DeliveryManagementTest
from
base_test
import
BaseBrowserTest
class
SimpleTestRunner
:
...
...
@@ -282,6 +284,150 @@ class SimpleTestRunner:
return
report_file
def
run_shared_browser_tests
(
self
)
->
List
[
Dict
[
str
,
Any
]]:
"""运行共享浏览器实例的测试(订单管理 + 出库管理)"""
print
(
"🚀 开始运行共享浏览器测试..."
)
print
(
"="
*
60
)
all_results
=
[]
shared_browser
=
None
try
:
# 创建共享的浏览器实例
shared_browser
=
BaseBrowserTest
(
headless
=
False
,
slow_mo
=
500
)
shared_browser
.
setup_browser
()
# 手动登录一次
print
(
"开始登录..."
)
shared_browser
.
navigate_to
(
shared_browser
.
base_url
)
shared_browser
.
fill_input
(
'input[placeholder="请输入用户名"]'
,
'admin'
)
shared_browser
.
fill_input
(
'input[placeholder="请输入密码"]'
,
'password'
)
shared_browser
.
click_element
(
'button:has-text("登录")'
)
shared_browser
.
page
.
wait_for_timeout
(
5000
)
# 检查登录是否成功
current_url
=
shared_browser
.
page
.
url
if
'dashboard'
in
current_url
:
print
(
"✅ 登录成功"
)
login_success
=
True
else
:
print
(
f
"❌ 登录失败,当前URL: {current_url}"
)
login_success
=
False
if
not
login_success
:
print
(
"❌ 登录失败,无法运行共享浏览器测试"
)
return
[]
# 1. 运行订单管理测试(使用共享浏览器)
print
(
"
\n
📋 运行订单管理测试(共享浏览器)..."
)
try
:
order_test
=
OrderManagementTest
(
headless
=
False
,
slow_mo
=
500
)
# 直接使用已创建的浏览器实例
order_test
.
browser
=
shared_browser
.
browser
order_test
.
page
=
shared_browser
.
page
order_test
.
context
=
shared_browser
.
context
# 导航到订单管理页面
order_test
.
navigate_to
(
f
'{order_test.base_url}/main/order'
)
order_test
.
wait_for_element
(
'.order-container'
,
timeout
=
15000
)
print
(
"✅ 成功进入订单管理页面"
)
# 运行订单管理测试用例
order_results
=
self
.
_run_test_cases
(
order_test
,
[
(
"订单列表显示测试"
,
order_test
.
test_order_list_display
),
(
"按订单编号搜索测试"
,
order_test
.
test_order_search_by_order_no
),
(
"按经销商搜索测试"
,
order_test
.
test_order_search_by_dealer
),
(
"订单状态筛选测试"
,
order_test
.
test_order_status_filter
),
(
"重置搜索测试"
,
order_test
.
test_reset_search
),
(
"分页功能测试"
,
order_test
.
test_pagination
),
(
"表格操作测试"
,
order_test
.
test_table_operations
),
(
"新增订单功能测试"
,
order_test
.
test_add_order
),
(
"编辑订单功能测试"
,
order_test
.
test_edit_order
),
(
"查看订单功能测试"
,
order_test
.
test_view_order
),
])
all_results
.
extend
(
order_results
)
print
(
f
"✅ 订单管理测试完成,共 {len(order_results)} 个测试"
)
except
Exception
as
e
:
print
(
f
"❌ 订单管理测试执行失败: {e}"
)
# 2. 运行出库管理测试(使用同一个浏览器实例)
print
(
"
\n
📋 运行出库管理测试(共享浏览器)..."
)
try
:
delivery_test
=
DeliveryManagementTest
(
headless
=
False
,
slow_mo
=
500
)
# 直接使用已创建的浏览器实例
delivery_test
.
browser
=
shared_browser
.
browser
delivery_test
.
page
=
shared_browser
.
page
delivery_test
.
context
=
shared_browser
.
context
# 导航到出库管理页面
delivery_test
.
navigate_to
(
f
'{delivery_test.base_url}/main/delivery'
)
delivery_test
.
wait_for_element
(
'.delivery-container'
,
timeout
=
15000
)
print
(
"✅ 成功进入出库管理页面"
)
# 运行出库管理测试用例
delivery_results
=
self
.
_run_test_cases
(
delivery_test
,
[
(
"按出库单编号搜索测试"
,
delivery_test
.
test_delivery_search_by_delivery_no
),
(
"按经销商搜索测试"
,
delivery_test
.
test_delivery_search_by_dealer
),
(
"出库状态筛选测试"
,
delivery_test
.
test_delivery_status_filter
),
(
"重置搜索测试"
,
delivery_test
.
test_delivery_reset_search
),
(
"表格操作测试"
,
delivery_test
.
test_delivery_table_operations
),
(
"新增出库功能测试"
,
delivery_test
.
test_add_delivery
),
(
"编辑出库功能测试"
,
delivery_test
.
test_edit_delivery
),
(
"查看出库功能测试"
,
delivery_test
.
test_view_delivery
),
])
all_results
.
extend
(
delivery_results
)
print
(
f
"✅ 出库管理测试完成,共 {len(delivery_results)} 个测试"
)
except
Exception
as
e
:
print
(
f
"❌ 出库管理测试执行失败: {e}"
)
finally
:
# 最后关闭共享浏览器
if
shared_browser
:
shared_browser
.
teardown_browser
()
print
(
"✅ 共享浏览器已关闭"
)
return
all_results
def
_run_test_cases
(
self
,
test_instance
,
test_cases
):
"""运行测试用例的通用方法"""
results
=
[]
for
test_name
,
test_func
in
test_cases
:
print
(
f
"
\n
{'='*50}"
)
print
(
f
"开始测试: {test_name}"
)
print
(
f
"{'='*50}"
)
start_time
=
datetime
.
now
()
result
=
{
'test_name'
:
test_name
,
'start_time'
:
start_time
.
isoformat
(),
'success'
:
False
,
'error'
:
None
,
'screenshots'
:
[],
'duration'
:
0
}
try
:
test_func
()
result
[
'success'
]
=
True
print
(
f
"✅ 测试通过: {test_name}"
)
except
Exception
as
e
:
result
[
'error'
]
=
str
(
e
)
print
(
f
"❌ 测试失败: {test_name}"
)
print
(
f
"错误信息: {e}"
)
screenshot_path
=
test_instance
.
take_screenshot
(
f
'{test_name}_error'
)
result
[
'screenshots'
]
.
append
(
screenshot_path
)
finally
:
end_time
=
datetime
.
now
()
result
[
'end_time'
]
=
end_time
.
isoformat
()
result
[
'duration'
]
=
(
end_time
-
start_time
)
.
total_seconds
()
print
(
f
"测试耗时: {result['duration']:.2f}秒"
)
results
.
append
(
result
)
return
results
def
run_all_tests
(
self
)
->
List
[
Dict
[
str
,
Any
]]:
"""运行所有测试 - 顺序执行"""
print
(
"🚀 开始运行浏览器自动化测试..."
)
...
...
@@ -298,14 +444,14 @@ class SimpleTestRunner:
except
Exception
as
e
:
print
(
f
"❌ 登录测试执行失败: {e}"
)
# 2. 运行
订单管理测试
print
(
"
\n
📋 运行
订单管理
测试..."
)
# 2. 运行
共享浏览器测试(订单管理 + 出库管理)
print
(
"
\n
📋 运行
共享浏览器
测试..."
)
try
:
order_results
=
run_order_management
_tests
()
all_results
.
extend
(
order
_results
)
print
(
f
"✅
订单管理测试完成,共 {len(order
_results)} 个测试"
)
shared_results
=
self
.
run_shared_browser
_tests
()
all_results
.
extend
(
shared
_results
)
print
(
f
"✅
共享浏览器测试完成,共 {len(shared
_results)} 个测试"
)
except
Exception
as
e
:
print
(
f
"❌
订单管理
测试执行失败: {e}"
)
print
(
f
"❌
共享浏览器
测试执行失败: {e}"
)
# 生成报告
print
(
"
\n
📊 生成测试报告..."
)
...
...
Please
register
or
login
to post a comment