首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >用 Playwright + LLM 搭建你的第一个测试 Harness:让 AI 看懂代码,自动写白盒测试

用 Playwright + LLM 搭建你的第一个测试 Harness:让 AI 看懂代码,自动写白盒测试

作者头像
沈宥
发布2026-04-14 18:13:54
发布2026-04-14 18:13:54
940
举报

摘要 你是否希望:

  • 开发改了一行代码,AI 就自动补上对应的单元测试?
  • 不用手动翻逻辑,AI 就能告诉你“哪些老功能要回归”?

这不是幻想!本文手把手教你用 Playwright(自动化) + 本地大模型(LLM),搭建一个 轻量级白盒测试 Harness。 ✅ 无需复杂框架 ✅ 所有代码可本地运行 ✅ 聚焦真实代码变更场景 ✅ 输出可执行的测试用例 **10 分钟,让你的 AI 学会“读代码、写测试、做验证”**。


一、什么是“白盒测试 Harness”?

先说人话:

  • 白盒测试:看代码内部逻辑写测试(比如 if-else 每条路径都要覆盖)
  • Harness:给 AI 搭的一套“工作台”,让它能:
    • 📖 读代码
    • 🧠 理解逻辑
    • ✍️ 写测试
    • 自己验证对不对

💡 传统方式:你读代码 → 人工设计用例 → 手写断言 Harness 方式:AI 读代码 → 自动推导用例 → 自动生成测试 → 自动运行验证


二、为什么选 Playwright + LLM?

表格

工具

角色

优势

Playwright

执行引擎

不仅能测 UI,还能调接口、跑脚本、抓日志

本地 LLM(如 Qwen)

智能大脑

数据不出内网,可深度理解你的业务代码

✅ 组合效果: **Playwright 负责“动手”,LLM 负责“动脑”**, 二者通过 Python 脚本无缝协作。


三、实战:搭建你的第一个白盒测试 Harness

场景设定

你有一个 Java 服务,MR 中修改了如下方法:

java编辑

代码语言:javascript
复制
// 原逻辑
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; // 会员免验证码
}

目标:自动生成覆盖新旧逻辑的测试用例


步骤 1:准备你的“代码知识包”

把被测方法和相关上下文保存为 code_context.txt

text编辑

代码语言:javascript
复制
【方法名】UserService.needCaptcha
【输入】String phone
【输出】boolean
【业务规则】
- 若手机号为空,返回 true(需验证码)
- 若手机号对应已注册会员,返回 false(免验证码)
- 否则返回 true

【依赖服务】
- memberService.getMember(phone): 返回 MemberDto 或 null

📌 提示:未来可用 AST 自动提取,初期手动整理即可。


步骤 2:安装基础环境

bash编辑

代码语言:javascript
复制
# 1. 安装 Playwright
pip install playwright
playwright install chromium

# 2. 安装 Ollama(运行本地大模型)
curl -fsSL https://ollama.com/install.sh | sh

# 3. 拉取 Qwen 模型(中文友好)
ollama run qwen:latest

步骤 3:编写 Harness 核心脚本(whitebox_harness.py

python编辑

代码语言:javascript
复制
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"])

步骤 4:运行!见证 AI 写白盒测试

bash编辑

代码语言:javascript
复制
python whitebox_harness.py

输出示例

java编辑

代码语言:javascript
复制
@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"));
}

完美覆盖所有分支


四、进阶:让 Harness 更智能

1. 自动解析 Git Diff

git diff 提取 MR 变更,自动填充 code_context.txt

2. 集成静态分析

CodeQLSonarQube 找出未覆盖的分支,喂给 LLM 补测。

3. 失败自修复

若测试编译失败,把错误日志再喂给 LLM:“请修正语法错误”。


五、为什么这比 Copilot 更强?

表格

能力

GitHub Copilot

你的 Harness

上下文深度

当前文件

可注入完整业务规则

验证闭环

自动生成 + 编译验证

数据安全

代码可能上传云端

纯本地运行

可定制性

黑盒

完全掌控 Prompt 和流程

💡 核心优势: **你不是在“请求 AI 帮忙”,而是在“训练一个专属测试助手”**。


六、给测试工程师的建议

  1. 从工具类方法开始试点(如日期转换、金额计算),逻辑清晰,易验证。
  2. **逐步构建你的“业务规则库”**,这是 AI 理解复杂逻辑的关键。
  3. 不要追求 100% 自动生成,目标是 减少 70% 机械劳动,你专注高价值设计。

结语:白盒测试的未来,是“人机协同”

**你负责定义“什么是对的”, AI 负责穷尽“怎么验证对”**。

用 Playwright + LLM 搭建的这个小 Harness, 或许就是你迈向 AI 原生质量工程 的第一步。

现在,就去试试—— 让 AI 为你写第一个白盒测试吧


环境:Python 3.10 + Playwright 1.42 + Ollama Qwen 资源

  • Playwright 官网:https://playwright.dev
  • Ollama:https://ollama.com
  • 示例代码 GitHub:github.com/yourname/whitebox-harness-demo(可自行创建)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-03-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 质量工程与测开技术栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、什么是“白盒测试 Harness”?
  • 二、为什么选 Playwright + LLM?
  • 三、实战:搭建你的第一个白盒测试 Harness
    • 场景设定
    • 步骤 1:准备你的“代码知识包”
    • 步骤 2:安装基础环境
    • 步骤 3:编写 Harness 核心脚本(whitebox_harness.py)
    • 步骤 4:运行!见证 AI 写白盒测试
  • 四、进阶:让 Harness 更智能
    • 1. 自动解析 Git Diff
    • 2. 集成静态分析
    • 3. 失败自修复
  • 五、为什么这比 Copilot 更强?
  • 六、给测试工程师的建议
  • 结语:白盒测试的未来,是“人机协同”
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档