从狂热到理性:大模型在测试内部落地的实战复盘

一、理想与现实的差距

推动大模型技术在组织内部落地,从来不是一帆风顺的浪漫之旅。最初以为这只是"水到渠成的小工程",毕竟开源工具和云服务触手可及。然而真正推进时才发现,这是一场旷日持久的"拉锯战",其艰难程度远超传统的 DevOps 转型。

两类根深蒂固的阻力

第一类:害怕而拒绝

AI 技术带来的效率跃升,也伴随着岗位重组的焦虑。许多资深工程师担心大模型的"黑箱"性质会削弱测试过程的可控性,本能地筑起防线,表面点头称是,私下却"阳奉阴违"。

第二类:不相信

不相信大模型的能力,也不相信它能真正帮助工作。这种不信任源于对技术的未知和误解。


二、第一阶段:消除疑惑,拥抱智能化

策略:从 RAG 开始,化繁为简

第一次大规模推广时,选择了基于 Dify 平台的测试用例生成智能体作为切入点。

反直觉的策略设计

  • 故意打乱传统知识点讲解顺序,避免入门级劝退
  • 直接从 RAG 内容讲起,展示如何快速搭建 RAG 应用
  • 简化配置步骤,省略潜在调试坑点
  • 让现场观众产生"原来这么简单"的错觉

成果:意外的繁荣

  • 一周内,测试团队对大模型的"芥蒂"烟消云散
  • 跨团队的用例生成采纳率稳定在 60% 左右
  • 各团队开始主动构建自己的专属智能体
  • 需求完善智能体、测试分析智能体、多智能体协同系统如雨后春笋

三、第二阶段:乐极生悲,进入绝望之谷

大胆尝试:自研接口测试生成系统

在 Dify 智能体繁荣的鼓舞下,测试开发团队决定从零搭建完整的大模型生成接口测试功能体系:

  • API 规格文档解析
  • 大模型提示工程优化
  • 输出测试脚本的自动化校验
  • 无缝集成到现有测试管理平台

现实打击:从热捧到冷场

平台正式开放后,从零星试用到迅速冷却至无人问津,整个过程不超过两周。

用户吐槽点总结

问题类别 具体表现
流程刚性 缺乏灵活干预机制(暂停、参数调整、临时调试)
等待时间长 LLM 处理复杂任务耗时久,尤其高负载下
产出不稳定 受模型性能、输入数据、算力影响,质量不一致
缺乏个性化 流程与配置过于通用,无法适配不同项目需求
反馈循环不足 问题反馈机制迟缓,长期痛点未解

根本原因

禀赋效应的影响:Dify 智能体的繁荣影响了团队的正确思考。大家对大模型生成接口测试功能的要求和测试管理平台一样,容忍度一点也没有变化。

禀赋效应:人们一旦拥有某样东西,就会不由自主地高估它的价值。谁都想让别人知道"我的想法有多优秀",因此一直推销自己设计的智能体,满足成就感。

步子迈大了,太着急了——没有真正将"大模型能够帮助我们提升效率"的理念植入每个人心里。


四、第三阶段:重整出发,开悟之坡

MCP 的启示

MCP(Model Context Protocol)的横空出世提供了新的思路。开始打造自己的 MCP Servers,但吸取了前面的教训:

  • 提供已经封装好的 MCP Server
  • 分享使用例子
  • 但不分享如何开发——避免重蹈 Dify 的覆辙

MCP Server 封装的最佳实践

1. 控制加载数量,整合相关 API
# 不好的做法:为每个 API 单独创建 MCP Server
# mcp-server-login, mcp-server-logout, mcp-server-get-user...

# 好的做法:将相关 API 整合到一个 MCP Server
@mcp.tool()
async def user_login(credentials: dict) -> str:
    """用户登录"""
    pass

@mcp.tool()
async def user_logout(user_id: str) -> str:
    """用户登出"""
    pass

@mcp.tool()
async def get_user_info(user_id: str) -> str:
    """获取用户信息"""
    pass
2. 命名要有具体含义
不好的命名 好的命名
tool1, api_call jira_search, browser_navigate
get_data shell_execute_command

命名也是工具提示词的一部分,要做到见名知意。参考 Claude 的做法:

  • 浏览器相关工具以 browser_ 开头
  • 命令行相关工具以 shell_ 开头
3. 返回有价值的信息
# 不好的做法:返回原始平台 API 的完整响应
{
    "id": "10001",
    "di": "xyz123",  # 无语义内容,占 Tokens
    "name": "test_case_001",
    "created_at": "2024-01-01T00:00:00Z",
    # ... 大量无关字段
}

# 好的做法:二次加工,只返回最有用的内容
{
    "test_case_name": "用户登录成功场景",
    "test_steps": [
        "输入有效用户名和密码",
        "点击登录按钮",
        "验证跳转至首页"
    ],
    "expected_result": "登录成功,进入系统首页"
}
4. 错误返回要有意义
# 不好的做法:返回错误码
{
    "errorCode": "90001"
}

# 好的做法:返回语义信息
{
    "errorMessage": "数据库访问超时,请检查网络连接或稍后重试",
    "suggestion": "可尝试:1) 检查数据库服务状态 2) 查看网络连接 3) 联系 DBA"
}

五、关键教训总结

推广策略

阶段 策略 结果
第一阶段 从简单入手(Dify 智能体),化繁为简 成功,用户接受度高
第二阶段 自研复杂系统,期望一步到位 失败,用户弃用
第三阶段 提供封装好的 MCP Server,控制开放程度 成功,避免重蹈覆辙

技术要点

  1. 不要直接把平台 API 变成 MCP Server——需要二次加工
  2. 控制返回内容大小——避免挤爆大模型上下文
  3. 整合相关功能——减少智能体加载的工具数量
  4. 命名清晰——帮助大模型正确选择工具
  5. 错误信息语义化——让大模型能理解并给出建议

六、未来展望

大模型和软件测试结合的形态,既不会淘汰测试平台,也不会淘汰测试智能体,而是相辅相成的关系:

  • 各种 Agentic 模式的智能体完成测试的各个实践
  • 将测试过程数据、结果数据存入测试平台
  • 知识库选择更新平台留存的数据,继续服务智能体完成测试任务

七、结语

从狂热到理性,大模型在测试内部的落地是一场关于期望管理、用户心理和工程实践的综合性挑战。充分利用禀赋效应可以调动积极性,但也要注意避免"步子迈太大"。MCP Server 封装的注意事项是实践中总结的避坑指南,希望能帮助更多团队少走弯路。

可靠是底线,其他的都是底线之上的能力展现。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐