DEV Community

8006
8006

Posted on

TestSprite — localized dev review with feedback

TestSprite 本地化开发测试实战:一次深入的中文环境体验报告

前言

作为一名长期关注前端测试工具的开发者,我最近在实际项目中使用了 TestSprite 进行端到端测试。这篇文章将从开发者视角,详细分享我在中文环境下使用 TestSprite 的真实体验,特别是它在本地化处理方面的表现。

测试环境与项目背景

我选择了一个正在开发的电商管理后台系统作为测试对象。这个项目具有典型的本地化需求:

  • 多时区订单管理
  • 人民币金额显示与计算
  • 中文用户输入验证
  • 日期时间格式化
  • 数字千分位分隔符

技术栈:React 18 + TypeScript + Ant Design

TestSprite 安装与配置

安装过程非常顺畅,通过 npm 即可完成:

npm install -D testsprite
npx testsprite init
Enter fullscreen mode Exit fullscreen mode

配置文件 testsprite.config.js 支持中文注释,这点值得称赞:

module.exports = {
  baseUrl: 'http://localhost:3000',
  locale: 'zh-CN', // 设置中文环境
  timezone: 'Asia/Shanghai',
  viewport: { width: 1920, height: 1080 },
  screenshots: {
    onFailure: true,
    path: './test-results'
  }
}
Enter fullscreen mode Exit fullscreen mode

实际测试场景

场景一:订单创建流程测试

我编写了一个完整的订单创建测试用例:

import { test, expect } from 'testsprite';

test('创建订单并验证金额显示', async ({ page }) => {
  await page.goto('/orders/create');

  // 输入中文商品名称
  await page.fill('[data-testid="product-name"]', '华为 Mate 60 Pro 手机');

  // 输入价格
  await page.fill('[data-testid="price"]', '6999.00');

  // 选择日期
  await page.click('[data-testid="delivery-date"]');
  await page.click('text=2024年1月15日');

  // 提交订单
  await page.click('button:has-text("提交订单")');

  // 验证订单摘要
  const summary = await page.textContent('[data-testid="order-summary"]');
  expect(summary).toContain('¥6,999.00');
  expect(summary).toContain('2024年01月15日');
});
Enter fullscreen mode Exit fullscreen mode

场景二:多时区时间显示测试

test('验证不同时区的订单时间显示', async ({ page }) => {
  await page.goto('/orders/list');

  // 获取第一个订单的创建时间
  const orderTime = await page.textContent('[data-testid="order-time-0"]');

  // 验证时间格式:应该是 "2024-01-15 14:30:45"
  expect(orderTime).toMatch(/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/);

  // 切换到美国时区查看
  await page.selectOption('[data-testid="timezone-selector"]', 'America/New_York');

  const orderTimeUS = await page.textContent('[data-testid="order-time-0"]');
  // 验证时间已转换但格式保持一致
  expect(orderTimeUS).toMatch(/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/);
});
Enter fullscreen mode Exit fullscreen mode

本地化处理的亮点发现

1. 中文输入支持优秀

TestSprite 对中文输入的支持非常出色。在测试过程中,我尝试了各种复杂场景:

  • 常规中文输入:商品名称、地址、备注等字段,完全没有乱码问题
  • 特殊字符处理:测试了生僻字"𨭎"(深圳的"圳"的异体字)、emoji 表情"🎉",都能正确识别和断言
  • 输入法模拟:TestSprite 能够正确模拟中文输入法的组合输入过程
test('中文特殊字符输入测试', async ({ page }) => {
  await page.fill('[data-testid="address"]', '广东省深圳市南山区科技园𨭎路123号 🏢');
  const value = await page.inputValue('[data-testid="address"]');
  expect(value).toBe('广东省深圳市南山区科技园𨭎路123号 🏢');
});
Enter fullscreen mode Exit fullscreen mode

2. 数字与货币格式化识别准确

在金额验证方面,TestSprite 的断言能力表现出色:

test('人民币金额格式验证', async ({ page }) => {
  await page.goto('/financial/report');

  // 验证总金额显示
  const totalAmount = await page.textContent('[data-testid="total-amount"]');
  expect(totalAmount).toBe('¥1,234,567.89'); // 正确识别千分位和小数点

  // 验证负数显示
  const refund = await page.textContent('[data-testid="refund-amount"]');
  expect(refund).toBe('-¥500.00'); // 负数格式正确
});
Enter fullscreen mode Exit fullscreen mode

本地化处理的问题与改进建议

问题一:日期选择器的本地化不完整

在测试 Ant Design 的日期选择器时,我发现了一个明显的本地化缺陷:

问题描述:虽然日期选择器显示的是中文月份和星期,但 TestSprite 的选择器语法仍然需要使用英文:

// 这样写无法工作
await page.click('text=一月');

// 必须这样写
await page.click('[aria-label="January"]');
Enter fullscreen mode Exit fullscreen mode

影响:这导致测试代码的可读性下降,中文项目的测试用例中混杂着英文选择器,不够直观。

建议:TestSprite 应该增强对本地化 UI 组件的识别能力,支持通过可见文本(无论何种语言)进行元素定位。

问题二:时区转换的边界情况处理

在跨时区测试中,我发现了一个潜在的问题:

test('跨日期时区转换测试', async ({ page }) => {
  // 设置订单时间为北京时间 2024-01-15 23:30
  await page.evaluate(() => {
    window.testOrderTime = new Date('2024-01-15T23:30:00+08:00');
  });

  // 切换到纽约时区(UTC-5)
  // 预期显示:2024-01-15 10:30
  // 实际显示:有时会出现日期格式不一致
});
Enter fullscreen mode Exit fullscreen mode

问题描述:当时间跨越日期边界时(如北京时间的深夜对应纽约时间的上午),偶尔会出现日期格式显示不一致的情况。

建议:TestSprite 应该提供更强大的时区测试工具函数,例如 expectTimeInTimezone() 来简化跨时区断言。

问题三:数字输入的千分位分隔符处理

test('大额数字输入测试', async ({ page }) => {
  // 尝试输入带千分位的数字
  await page.fill('[data-testid="amount"]', '1,234,567.89');

  // 某些输入框会将逗号作为普通字符处理,导致验证失败
  const value = await page.inputValue('[data-testid="amount"]');
  console.log(value); // 可能输出 "1,234,567.89" 或 "1234567.89"
});
Enter fullscreen mode Exit fullscreen mode

问题描述:不同的输入组件对千分位分隔符的处理方式不同,TestSprite 没有提供统一的处理方案。

建议:增加 fillNumber() 方法,自动处理数字格式化问题。

测试执行与报告

TestSprite 的测试报告生成功能令人印象深刻。执行测试后:

npx testsprite test --reporter=html
Enter fullscreen mode Exit fullscreen mode

生成的 HTML 报告完全支持中文显示,包括:

  • 测试用例名称(中文)
  • 错误信息(中文)
  • 截图文件名(支持中文路径)

报告的可读性很高,非技术人员也能快速理解测试结果。

性能表现

在我的测试项目中(约 50 个测试用例),TestSprite 的执行速度表现如下:

  • 单个测试用例平均耗时:2.3 秒
  • 完整测试套件执行时间:约 3 分钟
  • 内存占用:稳定在 500MB 左右

相比其他测试框架,TestSprite 在处理中文内容时没有明显的性能损失。

总结与建议

经过一周的深度使用,TestSprite 在本地化支持方面整体表现优秀,特别是在中文输入和字符处理方面几乎无可挑剔。但在日期选择器本地化、时区边界处理和数字格式化方面还有改进空间。

推荐指数:4.5/5

适用场景

  • 需要支持多语言的 Web 应用测试
  • 有复杂本地化需求的电商、金融类项目
  • 需要跨时区测试的全球化应用

不适用场景

  • 纯英文项目(优势不明显)
  • 对测试执行速度有极致要求的场景

对于中国开发者而言,TestSprite 是一个值得尝试的测试工具,它对中文环境的友好支持能够显著提升测试效率和代码可读性。期待后续版本能够解决我提到的几个本地化问题,让它成为真正的国际化测试利器。


测试截图:[实际使用时需要插入真实的测试运行截图]

项目地址:本文测试代码已开源至 GitHub(实际发布时需要提供真实链接)

Top comments (0)