
摘要 你是否希望:
这不是幻想!本文手把手教你用 Playwright(自动化) + 本地大模型(LLM),搭建一个 轻量级白盒测试 Harness。 ✅ 无需复杂框架 ✅ 所有代码可本地运行 ✅ 聚焦真实代码变更场景 ✅ 输出可执行的测试用例 **10 分钟,让你的 AI 学会“读代码、写测试、做验证”**。
先说人话:
💡 传统方式:你读代码 → 人工设计用例 → 手写断言 Harness 方式:AI 读代码 → 自动推导用例 → 自动生成测试 → 自动运行验证
表格
工具 | 角色 | 优势 |
|---|---|---|
Playwright | 执行引擎 | 不仅能测 UI,还能调接口、跑脚本、抓日志 |
本地 LLM(如 Qwen) | 智能大脑 | 数据不出内网,可深度理解你的业务代码 |
✅ 组合效果: **Playwright 负责“动手”,LLM 负责“动脑”**, 二者通过 Python 脚本无缝协作。
你有一个 Java 服务,MR 中修改了如下方法:
java编辑
// 原逻辑
public boolean needCaptcha(String phone) {
return true;
}
// MR 新增逻辑
public boolean needCaptcha(String phone) {
if (phone == null || phone.isEmpty()) {
return true;
}
MemberDto member = memberService.getMember(phone);
return member == null; // 会员免验证码
}
目标:自动生成覆盖新旧逻辑的测试用例。
把被测方法和相关上下文保存为 code_context.txt:
text编辑
【方法名】UserService.needCaptcha
【输入】String phone
【输出】boolean
【业务规则】
- 若手机号为空,返回 true(需验证码)
- 若手机号对应已注册会员,返回 false(免验证码)
- 否则返回 true
【依赖服务】
- memberService.getMember(phone): 返回 MemberDto 或 null
📌 提示:未来可用 AST 自动提取,初期手动整理即可。
bash编辑
# 1. 安装 Playwright
pip install playwright
playwright install chromium
# 2. 安装 Ollama(运行本地大模型)
curl -fsSL https://ollama.com/install.sh | sh
# 3. 拉取 Qwen 模型(中文友好)
ollama run qwen:latest
whitebox_harness.py)python编辑
import requests
import subprocess
import tempfile
import os
# 1. 让 LLM 读代码,生成测试
def generate_test(code_context: str):
prompt = f"""
你是一名资深 Java QA 工程师,请为以下方法生成 JUnit 5 单元测试:
{code_context}
要求:
- 覆盖所有分支:空手机号、会员、非会员
- 使用 Mockito mock memberService
- 输出完整可运行的 Java 代码,不要解释
"""
resp = requests.post("http://localhost:11434/api/generate", json={
"model": "qwen",
"prompt": prompt,
"stream": False
})
return resp.json()["response"]
# 2. 用 Playwright 执行测试(模拟 CI 环境)
def run_test(java_code: str):
# 创建临时测试文件
with tempfile.NamedTemporaryFile(mode='w', suffix='.java', delete=False) as f:
f.write(java_code)
test_file = f.name
try:
# 编译并运行(简化示例,实际可用 Maven/Gradle)
compile_result = subprocess.run(
["javac", test_file],
capture_output=True, text=True
)
if compile_result.returncode != 0:
return {"status": "compile_error", "log": compile_result.stderr}
# 运行测试(此处省略,实际可调用 mvn test)
return {"status": "success", "message": "Test generated and compiled."}
finally:
os.unlink(test_file)
# 3. 主流程
if __name__ == "__main__":
# 读取代码上下文
with open("code_context.txt", "r") as f:
context = f.read()
# 生成测试
test_code = generate_test(context)
print("✅ AI 生成的测试用例:\n")
print(test_code)
# 验证(可选)
result = run_test(test_code)
print("\n🔍 验证结果:", result["status"])
bash编辑
python whitebox_harness.py
输出示例:
java编辑
@Test
void needCaptcha_nullPhone_returnsTrue() {
assertTrue(userService.needCaptcha(null));
}
@Test
void needCaptcha_emptyPhone_returnsTrue() {
assertTrue(userService.needCaptcha(""));
}
@Test
void needCaptcha_registeredMember_returnsFalse() {
when(memberService.getMember("13800138000")).thenReturn(new MemberDto());
assertFalse(userService.needCaptcha("13800138000"));
}
@Test
void needCaptcha_newUser_returnsTrue() {
when(memberService.getMember("13900139000")).thenReturn(null);
assertTrue(userService.needCaptcha("13900139000"));
}
✅ 完美覆盖所有分支!
用 git diff 提取 MR 变更,自动填充 code_context.txt。
用 CodeQL 或 SonarQube 找出未覆盖的分支,喂给 LLM 补测。
若测试编译失败,把错误日志再喂给 LLM:“请修正语法错误”。
表格
能力 | GitHub Copilot | 你的 Harness |
|---|---|---|
上下文深度 | 当前文件 | 可注入完整业务规则 |
验证闭环 | 无 | 自动生成 + 编译验证 |
数据安全 | 代码可能上传云端 | 纯本地运行 |
可定制性 | 黑盒 | 完全掌控 Prompt 和流程 |
💡 核心优势: **你不是在“请求 AI 帮忙”,而是在“训练一个专属测试助手”**。
**你负责定义“什么是对的”, AI 负责穷尽“怎么验证对”**。
用 Playwright + LLM 搭建的这个小 Harness, 或许就是你迈向 AI 原生质量工程 的第一步。
现在,就去试试—— 让 AI 为你写第一个白盒测试吧!
环境:Python 3.10 + Playwright 1.42 + Ollama Qwen 资源: