zhouhui.jiang

添加出口自动化

......@@ -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 = {
......
This diff is collapsed. Click to expand it.
......@@ -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📊 生成测试报告...")
......