前言

今日休假,不加班。家里也没有什么事,算是难得的给自己放空大脑的机会。过去的 1 年多是 AI 爆炸的风口,我们本身就在 AI 领域人的人应该可以体会到这是多么疯狂的一个时期。所有人都在马不停蹄的奔跑,大家怕抢不到这个风口,怕被淘汰,甚至害怕自己的职位被 AI 取代掉。在我星球的小伙伴们, 可以从我更新的速度感受到现在的态势。

我对 AI 的态度

在几年前的时候,我虽然在 AI 领域中工作,但在当时我是反对 AI 应用在测试领域中的先锋了,早年间我还写过一个帖子开喷。

之所以开喷,是因为当时的 AI 真的不行。即便几年后 GPT 火了起来,也还是不行。直到去年年初,我开始重新调研 cursor,用 30 分钟就写出了以前需要几天才能开发完的工具,那时我开始确定,AI 要颠覆整个行业了。

cursor,codebuddy,codex,claude code, 这一年多以来我体验了业内半数的 AI 代码辅助工具。如今我已经把 90% 的工作交给了 AI,完成了以前需要 4,5 个我才能完成的工作量。当然,指挥 AI 也是个不小的工作量。现在行业内疯狂的卷 harness,也是为了能把指挥 AI 的成本降低。

老实说,我一开始内心里也有很大的抵触,毕竟自己练了很多年的东西说让 AI 给替代了,我心里不服,也不愿意接受。但世界总是不以个人的意志为转移。不接受现实的人,终将是走不远的。

大厂的人都在做什么

在我还没有进入大厂之前,我有个习惯,当我迷茫不知道要怎么发展的时候,就去找大厂的朋友聊天。我把大厂当风向标,摸着大厂的技术栈过河。他们卷什么,我就卷什么,因为我发现大厂总是比普通公司布局的更早,很多时候我们兴高采烈的去分享一些新的发现的事后,会发现这些是大厂内部已经布局了一年甚至几年的东西了。

当年测试行业还在争论技术无用论的的时候,大厂早就把集团员工测试岗位的招聘标准,焊死在技术工种这个标准上了。即便是在当年,你说你代码写的不好?那这辈子就别想跨进大厂的门槛了。

所以,AI 编程大火是在今年开始的,但其实去年我们就已经大范围铺开 AI 辅助了,中心内部各种 AI 的实践分享就已经开展了起来。几乎所有人的看法都非常一致,这一波 AI 变革,会改变很多个工种的工作方式和人员去留。

在几个月的年前,公司就已经定下了 特种兵 +AI 的发展路线,也就是我一直在说的,未来混得好的技术人员,是专家 +Agent的工作模式。专家的行业经验,加上 AI 提升的工作效率,将进一步拉开普通人和专家的差距。我一直在讲,AI 是需要人来指导的,AI 是可以把人的能力数倍的放大的,但如果人的能力是零,那 AI 再怎么放大,还是零。这也是为什么现在好些人仍然觉得 AI 是扯淡的,是某些领导的 KPI 工程的原因。因为受限于工作内容的简单单一和个人能力的限制,这部分人是感受不到 AI 带来的变革的。甚至说,多年前坚持技术无用论的,可能也是这一波人。所以不要说 AI 了,这些同学甚至感受不到技术力带来的变革。

所以还在观望 AI 的同学,可以看看大厂的人都在做什么,尤其大厂的人用 AI 做了什么。

我现在的工作模式,已经变成了遇事不管决不决,都先去找 AI的习惯。AI 的提效,已经把以前我们想做但没有时间和成本去做的事情,变成了可实现的路径。 比如我们都希望有 UI 自动化,因为只有端到端的测试,才是最保险的,最贴近用户的。但我们都知道维护 UI 自动化的成本有多高,手工去写代码和 xpath 的成本,产品需求变化的成本,前端元素变动的成本。这些都让实践 UI 自动化变成了一件很难的事。 但现在呢?我给大家看一下我的的工作内容:

我只需要像上图一样,把执行步骤输送给 AI。AI 就会帮我写 UI 自动化测试的代码,定位控件,启动浏览器测试,纠错等工作。而我们担心的前端控件会变化的事情,也最大程度上被避免了, 因为现在的控件定位,都是用 AI 来定位的。 如下:

// 在模型搜索框中输入
await agent.aiInput(
  "模型搜索弹窗中的搜索输入框",
  { value: modelName }
);

程序运行的时候,会动态截图,并传送给大模型,大模型接收到就会找到用户用自然语言描述的那个控件在哪个位置。这样,我不用像以前一样去费尽的写 xpath,也不用担心前端程序重构后,xpath 会变。 因为现在控件定位就不依赖 xpath。而 AI 写出来的程序,是张这个样子的:

describe("模型广场 - 自定义 OpenAI 模型 (P0)", () => {
  const ctx = usePlaywrightWithAuth();

  test(
    "添加自定义 OpenAI 模型并在查看弹框中验证",
    { tags: ["private"], timeout: 180_000 },
    async () => {
      const svc = new ModelMarketService(ctx.page);

      // 生成唯一的模型名称(遵循命名规范:含 _qta 后缀,≤15 字符)
      const suffix = String(Date.now()).slice(-6);
      const modelName = `m_${suffix}_qta`; // 12 字符
      console.log("[Test] 模型名称:", modelName);

      // 从环境变量读取配置,避免硬编码敏感信息
      const modelId = process.env.MODEL_MARKET_MODEL_ID!;
      const apiUrl = process.env.MODEL_MARKET_API_URL!;
      const apiKey = process.env.MODEL_MARKET_API_KEY!;

      // Step 1-2: 导航到模型广场
      await svc.navigateToModelMarket();

      // Step 3-12: 点击 OpenAI Compatible 添加按钮,填写表单并提交
      await svc.addCustomOpenAIModel({
        modelName,
        modelId,
        apiUrl,
        apiKey,
        contextLength: 32,
        inputLengthLimit: 16,
        tag: "全模态",
      });

      console.log("[Test] 模型已添加,准备验证");

      // Step 14-16: 点击查看按钮,验证模型信息
      await svc.viewOpenAIModels();

      // 验证模型名称显示在查看弹窗中
      const exists = await svc.verifyModelExists(modelName);
      expect(
        exists,
        `模型"${modelName}"应该在查看弹框中显示`
      ).toBe(true);

      console.log("[Test] 模型验证成功 ✓");
    }
  );
});

可以看到,svc.addCustomOpenAIModel 这个方法是一系列的控件操作的组合。我的手工 case 里并没有告诉他要抽象一个公共方法,但 AI 认为这个表单是可以封装成公共的方法的,所以它就这么做了。尽量避免了我们后续 case 多了,变成屎山代码的可能。 当然要让 AI 做到完全只需要一个手工测试用例步骤,就生成这样的 UI 自动化代码, 这需要编写一个很专业的 skill 来指导 AI。 这也是我在上一篇文章讲的:万字长文:如何用 harness 的理念设计一个 AI 驱动的 UI 自动化工程 。

AI 把编写和维护 UI 自动化测试的成本,磨到了一个十分低的程度,这让一切都变的有更大的可能。

而如果我想做性能测试,我只需要对调教好的 Agent 说明需要测试的场景, 它就会自动编写造数脚本和 locust 压测脚本,执行后给我一个汇总报告:


而如果我想做高可用测试(容灾测试),我仍然只需要跟我调教好的 Agent 表达这个意思,它就会:


确定执行后,它会帮我到每个机器上安装故障注入工具:

注入工具后,它会运行业务脚本(也是 AI 生成的)并检查测试情况:

所以这就是我的工作状态, 每天不是在调教 AI(写 skill),就是在指挥 AI 干活。或者在去探索使用 AI 的更多的可能性。所以为什么我刚才说,现在我干的活是以前 4,5 个我才能干的。因为真正干活的是 AI,而不是我。如果没有 AI 的能力, 就我们现在这个迭代速度和已经交付了上百个 TO B 私有化客户的规模,就是累死我,我也测不完。

调整心态

早年的我,在一段时间里也有一个毛病 -- 世人皆醉我独醒。 但现在想想,我当时是挺可笑的。这些国内的顶级公司,在这个行业占据龙头位置十数年,有无数高学历,高认知的人才为之效力。我竟然会觉得我一个人的思考会比他们更强?这是何等狂妄的心态。而这种心态,往往会让我拒绝去接受那些在未来对我十分有帮助的知识。说白了,这就是一种认真缺陷。大厂们探索,实践并总结出有效的经验,我却弃之如敝履。

这种世人皆醉我独醒的心态,曾经让我走过不少弯路。而在 AI 浪潮刚开始的时候,我也仍然有这个心态。就像我上面说的,最开始的时候我不服,我不接受 AI 能强到那种程度。他们一定是骗人的,他们做这些事是为了忽悠领导,搞 KPI 工程,出来卖课割韭菜。

然后我就想起了我的这个毛病,我就在想,我凭什么认为那么多优秀的人都认为有价值的东西,是假的?尤其是在我还没有认真去调研的情况下,就下了这个定论?所以,去年的时候我去找到同事,开始请教,开始在群里找有经验的人,开始在 B 占看教程。仅仅几天时间,AI 的强大就让我后悔 -- 我为什么没有更早的开始使用 AI 完成工作。

有些时候就是这样的,以前如大山一般的偏见,往往在极短的时间内就被轰碎。

我总说人一旦开窍了,进步就一日千里。而开窍的契机,往往先从心态的改变开始。正如我这篇文章的标题:世界不以个人的意志为转移。 不论我们再怎么否定一件事,这个世界不会因为我们不乐意,就改变它的运作法则。就如同当今的行业,不论我们有多不甘心,多不认可。特种兵 + AI 的模式,就会是未来的主流趋势。

所以调整心态,不要再跟大势对抗。我说的直白点,大家出来工作为了什么?不就是赚钱么。古人都说:学成文武艺,卖与帝王家。那整个测试行业,以前要卷的是技术,现在要卷的是 AI。标准答案就在这摆着,难道大家就要这么白白错过这个上车的机会?俗话说的好,跟什么作对也别跟钱作对。即便内心可能是不认可 AI 的,但咱先进去把钱挣了好不好?我们是要顺应大势,进入主流公司拿高薪。还是坚持自己那可能不是很正确的真理吃土?我选择前者。 我没有那么多的理想主义,我出来工作,只为了挣钱。

结尾

我们的行业就是这样,逆水行舟,不进则退。不论已经积累了多少年, 永远都有新的技术栈在等着我们。不去拥抱最新的技术和潮流,就会被后浪拍死在沙滩上。现在的后浪技术一个比一个猛,底子一个比一个好,想法一个比一个大胆。今天想写这个文章,也是看到最近还有很多同学不认可 AI,所以有感而发。就说道这里吧。 最后再宣传一下我的知识星球,更多的 AI 测试实践都会发表在星球里。


↙↙↙阅读原文可查看相关链接,并与作者交流