Skip to content

需求怎么写,测试就怎么写。 ​

一幅题为“精确匹配”的四格漫画。一位开发者写了个测试,检查提示框的精确文本,心想只要有人动文案,它马上就会挂。两周后,产品经理把错误信息改得更友好了,测试果然失败。开发者把新字符串粘了进去。又过了一周,产品经理把文案改了回来,问测试是不是又挂了。开发者说没有,他们找到了更好的测试方法,屏幕上是一条通过的断言:提示框告诉用户如何恢复。

semantic-assert(意为“语义化的断言”)让你直接断言需求本身。照着产品文档的说法写下陈述,交给一个充当裁判的模型,让你的测试不再依赖 HTML 标签和其中的文字。靠着最新的 Jev 模型,这个过程飞快、可靠,而且便宜得像是免费的。

ts
const alert = page.getByRole("alert");
await alert.waitFor({ state: "visible" });
await judge.expectPageTo("The alert explains how to recover from the error", {
  region: alert,
});

这是 Playwright fixture 的写法。对于 API 响应和其他 JSON,使用与框架无关的核心裁判。

从你多半遇到过的问题开始 ​

或者看看这些:

工作原理 ​

每条语义断言都遵循同样的三步:

  1. 捕获状态。 从你的应用返回 JSON,或者让 Playwright 适配器给页面拍个快照。
  2. 写下陈述。 描述用户应该能从这个状态中看出什么。相关的陈述放在同一个请求里发送。
  3. 断言结果。 裁判把返回的概率和你的阈值比较,某条陈述没过线,测试就失败。

谁来当裁判? ​

默认是 Jev,TypeSafe 的第一个System One 模型。Jev 不生成文本。你给它状态和一个是非题或选择题,它返回一个带类型的答案,并且提供可靠的信心值(我们用这个值和阈值比较,来判断测试是否通过)。任何 Provider 实现都可以替代它,参见 provider。

语义断言适合用在哪里 ​

用语义断言检查用普通断言检查
错误信息是否给出了具体恢复步骤提示框是否可见
回复是否承诺了退款精确的订单 ID 和状态码
回复是否回答了客户的问题数量、总额和算术
高亮段落是否支持某个陈述精确的 CSS 值和 class 名称

模型的判断是概率性的

你可以在自己的应用里测试一遍,再决定具体针对不同场景用什么样的阈值。

开始使用 ​

跟着快速开始跑通一个检查,然后为 HTML 和浏览器测试加上Playwright 适配器。