1. 写在前面:为什么需要“智能断言”?
传统自动化测试的断言通常是:
assert page.locator("#title").inner_text() == "Order Completed"
但现实情况是:
-
• UI文案可能新增空格/标点 -
• 部分字段可能动态变化(如欢迎语、时间补全) -
• 页面布局可能调整导致选择器变化 -
• 多语言环境导致文案略有不同 -
• 后端返回提示可能随机(如“轻度错误恢复”)
这些情况导致:
-
• ✔ 用例逻辑本身是对的 -
• ❌ 断言因“过于严格”而失败 -
• ❌ QA 花大量时间修复断言
👉 于是,“智能断言” 的需求出现了:
-
• 使用 LLM(DeepSeek)自动生成断言意图 -
• 使用 模糊判断 / 多层断言结构 增强鲁棒性 -
• 使用 页面上下文 + 历史数据 自动修复断言
本篇我们要做的,就是开发一个:
-
• AI辅助的断言生成器(AI Assertion Generator)
它将帮助测试人员: -
• 输入成功页面截图或 HTML -
• 让 DeepSeek 自动输出可执行的断言代码 -
• 避免“过拟合断言” -
• 通过“多重断言策略”提升稳定性
支持“自动修复断言失败”能力
2. 整体流程:AI 智能断言工作流
流程如下:
(1)捕获测试页面 HTML / 文案 / 元素结构
↓
(2)发送至 DeepSeek,让其分析成功状态核心要点
↓
(3)DeepSeek 输出智能断言:
- 最小必要断言(核心逻辑)
- 次级断言(可选)
- 允许变化范围(模糊匹配)
↓
(4)将断言写入测试脚本
↓
(5)执行时如失败 → 进入 AI 自动修复模块(可选)
优势:
-
• 不再依赖固定文案 -
• 不再害怕 UI微调 -
• 可自动生成一整套测试断言结构 -
• 断言失败后还能自动修复
3. DeepSeek Prompt 模板:生成智能断言
以下 Prompt 经过你前面文章体系优化,可进一步复用 👇
Prompt:输入给 DeepSeek 的模板
你是专业的自动化测试工程师。
现在我提供给你一次测试成功后的页面内容(HTML + 文案)。
请你分析:
1. 用户真正“完成任务”的核心成功标准是什么?
2. 生成 Playwright + Python 可执行断言代码,要求:
- 使用 expect() 而不是 assert
- 不对文案进行严格匹配,可用正则或包含判断
- 断言数量不要超过 5 条
- 每条断言解释“为什么要这么写”
3. 输出格式必须为:
{
"assertions": [
{"reason": "...", "code": "..."},
...
]
}
下面是页面 HTML:
<<<HTML_START>>>
{{html_content}}
<<<HTML_END>>>
4. Python 示例:调用 DeepSeek 自动生成断言
import os
from openai import OpenAI
client = OpenAI(api_key=os.getenv("DEEPSEEK_API_KEY"),
base_url="https://api.deepseek.com")
def generate_assertions(html_text: str):
prompt = open("prompt_assertion.txt").read().replace("{{html_content}}", html_text)
response = client.chat.completions.create(
model="deepseek-chat",
messages=[{"role": "user", "content": prompt}],
temperature=0
)
return response.choices[0].message.content
运行示例:
html = open("success_page.html").read()
result = generate_assertions(html)
print(result)
DeepSeek 将返回 JSON:
{
"assertions": [
{
"reason": "确认订单成功提示出现",
"code": "expect(page.get_by_text(re.compile('order.*success', re.I))).to_be_visible()"
},
{
"reason": "确认订单编号显示",
"code": "expect(page.locator('#order-id')).not_to_be_empty()"
}
]
}
5. 生成后的智能断言如何加入测试脚本?
实践版用法如下 👇
import json
from playwright.sync_api import Page, expect
def run_ai_assertions(page: Page, ai_json: str):
data = json.loads(ai_json)
for item in data["assertions"]:
print(f"AI 判断理由:{item['reason']}")
exec(item['code'])
集成到用例:
def test_checkout_success(page: Page):
# 前置步骤 …
page.goto("https://demo/checkout/success")
# 导入 DeepSeek 的断言 JSON
ai_json = open("assertion_output.json").read()
run_ai_assertions(page, ai_json)
你会得到:
-
• ✔ 断言自动生成 -
• ✔ 自动解释 -
• ✔ 自动执行 -
• ✔ 更稳健
6. 可选:断言失败时自动修复(进阶)
你可以在异常捕获时:
-
• 把报错文本 -
• 断言上下文 -
• 页面截图 HTML -
• 再一次发送给 DeepSeek,让其输出更新后的断言。
def self_heal_assert(page, assertion_json):
try:
run_ai_assertions(page, assertion_json)
except Exception as e:
repair_input = {
"error": str(e),
"html": page.content(),
"old_assertions": assertion_json
}
# 再次请求 deepseek 生成修复版断言
repaired = repair_assertions(repair_input)
with open("assertion_repaired.json", "w") as f:
f.write(repaired)
raise e
你可以在下一次 CI 执行时自动应用修复。
7. 最佳实践
-
• ✔ 1. 深度总结页面“成功状态” 确保 DeepSeek 理解“业务成功”的核心标准。
-
• ✔ 2. 不要让 AI 生成过多断言
4–5 条足够。
-
• ✔ 3. 使用 expect() 而非 assert Playwright 内置等待更稳。
-
• ✔ 4. 反复迭代 Prompt,养成自己的“团队断言风格” -
• ✔ 5. 自动修复断言建议放在 CI 每夜任务
减少回归成本。
8. 示例文件打包结构
ai_assertions/
│— prompt_assertion.txt
│— generate_assertions.py
│— run_test.py
│— success_page.html
│— assertion_output.json
你可以在前面“AI 自动生成 POM”“AI 自动修复用例”等教程之上继续扩展这个能力。
9. 小结:智能断言,是 AI 自动化测试最容易落地的一块
本篇教程帮助你:
用 DeepSeek 生成稳健断言
-
• 大幅降低“断言失败”误报 -
• 打造 AI自适应测试 -
• 为后续的“ AI质量周报”“AI 自愈系统”打基础

