Status: backlog
作为测试开发者, 我想要验证跨端数据同步测试的稳定性和可靠性, 以便确保测试在各种条件下都能正确运行并返回一致结果。
Given 跨端测试涉及后台和小程序 When 执行多次跨端数据同步操作 Then 测试应验证以下场景:
Given 多个测试可能同时运行 When 执行并发跨端测试 Then 测试应验证以下场景:
Given 系统可能遇到各种边界情况 When 执行跨端测试 Then 测试应验证以下场景:
Given 跨端测试需要在各种情况下保持稳定 When 连续运行测试 10 次 Then 测试应满足以下标准:
Given 测试过程中可能出现错误 When 发生错误或失败 Then 测试应验证以下场景:
Given 遵循项目测试规范 When 编写测试代码 Then 代码应符合以下标准:
cross-platform-stability.spec.tspnpm typecheck 类型检查[ ] 任务 1: 创建稳定性测试文件 (AC: #6)
web/tests/e2e/specs/cross-platform/cross-platform-stability.spec.ts[ ] 任务 2: 实现数据一致性验证测试 (AC: #1)
[ ] 任务 3: 实现并发操作验证测试 (AC: #2)
[ ] 任务 4: 实现边界情况验证测试 (AC: #3)
[ ] 任务 5: 实现错误恢复验证测试 (AC: #5)
pnpm typecheck 验证类型检查Epic 13: 跨端数据同步测试 (Epic E)
Epic 13 Story 依赖关系:
Story 13.1: 后台创建订单 → 企业小程序验证 ✅
Story 13.2: 后台编辑订单 → 企业小程序验证
Story 13.3: 后台添加人员 → 人才小程序验证
Story 13.4: 后台更新状态 → 双小程序验证
Story 13.5: 跨端测试稳定性验证 ← 当前 Story
Story 13.6: 首页看板数据联动专项测试 ✅
Story 13.7: 首页导航和交互测试
测试执行模式:
// 使用 Playwright 的 test.describe.parallel 实现并发测试
test.describe.parallel('跨端数据同步稳定性验证', () => {
test('并发测试 1: 创建订单', async ({ adminPage, miniPage }) => {
// 测试代码
});
test('并发测试 2: 编辑订单', async ({ adminPage, miniPage }) => {
// 测试代码
});
test('并发测试 3: 添加人员', async ({ adminPage, miniPage }) => {
// 测试代码
});
});
稳定性测试脚本:
#!/bin/bash
# run-cross-platform-stability-test.sh
PASSED=0
FAILED=0
TIMES=()
for i in {1..10}; do
echo "=== 运行 #$i ==="
START=$(date +%s)
if pnpm test:e2e:chromium cross-platform-stability; then
PASSED=$((PASSED + 1))
echo "✅ 运行 #$i 通过"
else
FAILED=$((FAILED + 1))
echo "❌ 运行 #$i 失败"
fi
END=$(date +%s)
DURATION=$((END - START))
TIMES+=($DURATION)
echo "⏱️ 耗时: ${DURATION}s"
echo ""
done
echo "=== 稳定性测试结果 ==="
echo "通过: $PASSED/10"
echo "失败: $FAILED/10"
echo "平均时间: $(awk '{sum+=$1} END {print sum/NR}' <<< "${TIMES[@]}")s"
if [ $PASSED -eq 10 ]; then
echo "✅ 100% 稳定性通过!"
exit 0
else
echo "❌ 稳定性不足,需要修复"
exit 1
fi
使用 Playwright 模拟慢速网络:
test('网络延迟情况下数据同步', async ({ adminPage, miniPage }) => {
// 模拟慢速 3G 网络
await adminPage.context().setOffline(false);
await miniPage.context().setOffline(false);
const slow3G = {
download: 500 * 1024 / 8, // 500 Kbps
upload: 500 * 1024 / 8, // 500 Kbps
latency: 100, // 100ms 延迟
};
await adminPage.route('**/*', async (route) => {
// 应用网络限制
await route.continue();
});
// 执行测试...
// 验证数据在慢速网络下仍能正确同步
});
字段级数据对比:
async verifyDataConsistency(
adminData: OrderData,
miniData: OrderData
): Promise<boolean> {
// 验证所有字段一致
expect(adminData.name).toBe(miniData.name);
expect(adminData.status).toBe(miniData.status);
expect(adminData.workStatus).toBe(miniData.workStatus);
expect(adminData.expectedStartDate).toBe(miniData.expectedStartDate);
// 验证人员列表一致
expect(adminData.persons.length).toBe(miniData.persons.length);
for (let i = 0; i < adminData.persons.length; i++) {
expect(adminData.persons[i].id).toBe(miniData.persons[i].id);
expect(adminData.persons[i].workStatus).toBe(miniData.persons[i].workStatus);
}
return true;
}
创建包含多个人员的订单:
test('大数据量情况下数据同步', async ({ orderManagementPage, enterpriseMiniPage }) => {
// 创建包含 10 个人员的订单
const persons = [];
for (let i = 0; i < 10; i++) {
persons.push({
name: `测试人员_${Date.now()}_${i}`,
idCard: generateUniqueIdCard(Date.now() + i),
});
}
const orderData = {
name: `大数据量测试订单_${Date.now()}`,
persons: persons,
};
await orderManagementPage.createOrder(orderData);
// 验证小程序能正确显示所有人员
const miniOrderData = await enterpriseMiniPage.getOrderDetail(orderData.name);
expect(miniOrderData.persons.length).toBe(10);
});
Unicode 和 Emoji 测试:
test('特殊字符处理', async ({ orderManagementPage, enterpriseMiniPage }) => {
const orderData = {
name: `测试订单_🎉_${Date.now()}_中文_日本語_한국어`,
description: '包含 emoji: 😊👍❤️ 和特殊符号: @#$%^&*()',
};
await orderManagementPage.createOrder(orderData);
// 验证小程序正确显示特殊字符
const miniOrderData = await enterpriseMiniPage.getOrderDetail(orderData.name);
expect(miniOrderData.name).toContain('🎉');
expect(miniOrderData.name).toContain('中文');
expect(miniOrderData.description).toContain('😊');
});
确保测试之间不相互干扰:
// 使用唯一时间戳确保数据唯一
const timestamp = Date.now();
const testId = `test_${timestamp}_${Math.random().toString(36).substr(2, 9)}`;
// 使用 test.each 进行参数化测试
test.each([
{ scenario: '创建订单', action: 'create' },
{ scenario: '编辑订单', action: 'edit' },
{ scenario: '添加人员', action: 'addPerson' },
])('并发测试: $scenario', async ({ adminPage, miniPage, action }) => {
// 每个测试使用独立的数据
const testData = {
name: `${action}_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,
};
// ...
});
测试失败后的清理:
test.afterEach(async ({ orderManagementPage, testData }) => {
try {
// 清理测试数据
await orderManagementPage.deleteOrder(testData.orderName);
} catch (error) {
// 清理失败,记录但不影响其他测试
console.error('清理失败:', error);
}
});
test('单个测试失败不影响其他测试', async ({ adminPage, miniPage }) => {
// 测试代码
});
架构文档:
_bmad-output/planning-artifacts/epics.md#Epic 13_bmad-output/project-context.mddocs/standards/e2e-radix-testing.md相关 Story 文档:
10-14-order-stability-test.md (订单管理稳定性验证)13-1-order-create-sync.md (订单列表同步测试)13-2-order-edit-sync.md (订单编辑同步测试)13-3-person-add-sync.md (人员添加同步测试)13-4-status-update-sync.md (状态更新同步测试)Created by create-story workflow
Story 13.5 created - not yet started
Story 13.5 创建完成,状态:backlog
Created files:
/mnt/code/188-179-template-6/_bmad-output/implementation-artifacts/13-5-cross-platform-stability.md