本文作者是「测试套件」功能的产品负责人,旨在分享该功能背后的设计思路,包括我们为什么这样设计产品、决策的理由是什么。欢迎所有关心 Apifox 产品设计理念的朋友阅读了解&讨论。
先说一些我们经常听到的真实用户反馈。

你会不会有同样的想法?或者你是不是也有印象在我们的群里看到类似的言论?
这些需求有一个共同点: 用户不是要“运行用例”,而是要“按条件组织用例,然后运行”。
现有的功能是按“用例”维度设计的——你选择用例,然后运行。但用户需要的是按“规则”维度:告诉系统一个条件,符合条件的用例自动执行。

场景用例是我们自动化测试能力的核心。它允许你自由编排多个接口请求,按照真实的业务流程顺序执行——登录、创建订单、支付、查询订单状态。这套能力我们打磨了很长时间,用户反馈也相当正向。围绕场景用例,我们还提供了丰富的运行方式:
这些能力覆盖了“怎么跑”的问题。但 用户的需求并没有完全被满足。所以我们收到了上面的那些吐槽。
我们一直在思考:如何让用户在 Apifox 上完成从 API 设计、开发、调试到测试的完整闭环?
设计阶段有 API 文档,开发阶段有 Mock 服务,调试阶段有接口测试,那测试阶段呢?场景用例解决了“如何编排一个完整的业务流程”,但没有解决“如何在不同阶段、不同需求下灵活组织测试范围”。
于是我们把自动化测试的需求拆分为两个层次:
| 层次 | 核心问题 | 对应功能 |
|---|---|---|
| 编排层 | 如何把多个接口按业务流程串起来? | 场景用例 |
| 执行层 | 如何按条件灵活选择“跑哪些用例”? | 测试套件 |
两者不是替代关系,而是 分层协作。场景用例管“内容”,测试套件管“组织和执行”。以上就是测试套件这个新资源类型诞生的背景。

在设计测试套件时,我们面临一个根本性的问题:
用户把用例加入套件后,套件里的内容是固定的,还是会跟着变化的?
“冒烟测试”这个词来自硬件行业:给一块新电路板通电,如果没有冒烟,说明起码没有短路,可以进行下一步测试。
在软件行业,冒烟测试的核心思想是: 用最小的成本验证系统是否“基本正常”。它不追求覆盖所有功能,只验证最核心的业务路径——用户能登录吗?能下单吗?能支付吗?
冒烟测试有几个典型特点:
这种场景需要“ 静态模式”:我指定了哪些用例,就永远跑这些用例,除非我手动修改。
假设你负责支付模块,有一个文件夹叫“支付功能”,里面有 50 个用例。每周可能新增几个,也可能删除几个。你希望每次回归都覆盖这个模块下的所有用例,不用每次都去检查有没有新增的。
这种场景需要“ 动态模式”:我告诉系统一个规则(支付功能目录下的所有用例),系统每次运行时自动匹配。 这个设计在 AI 时代尤为重要。 随着 Copilot、Cursor 等 AI 编程工具的普及,代码生成的速度在加快,测试用例的产出也在提速。如果每次新增用例都要手动维护回归列表,维护成本会随着 AI 生产力的提升而线性增长。动态模式让用例的“生产”和“组织”解耦——你只管写用例,套件会自动把符合条件的新用例纳入进来。

经过长时间研究、收集用户反馈与调研,我们认为两种模式都是真实需求, 我们选择都支持。
但这带来一个用户体验问题:选项太多会让人困惑。所以,在产品界面的设计上,我们加上了很多的思考:
这样设计的好处是:用户不需要花过多的精力去思考与理解“静态”和“动态”的概念差异,阅读大量文本,只需要按自己的场景操作,在操作的过程中就自然而然的对这两个模式有个基本的理解。
每个测试场景可能有自己的运行配置:用开发环境、测试环境还是预发环境?循环多少次?这些配置在创建场景时已经设置好了。现在把多个场景放到一个套件里,问题来了: 用谁的配置?
诉求 A:“我想让套件里的所有用例都跑测试环境,不管它们原来的配置是什么。”
这在全量回归时很常见。你希望有一个统一的“回归环境”,消除环境差异带来的干扰。
诉求 B:“每个场景跑自己的环境就行,我设置好了的。”
这在日常执行时很常见。支付服务跑支付测试环境,用户服务跑用户测试环境,配置早就设好了,没必要改。
这两种诉求看似矛盾,但我们发现可以用“**默认值 + 可选覆盖”**的模式来调和。
关键问题是: 默认值选哪个?
默认情况下,每个场景按自己保存的配置运行(除了环境)——这是最“符合直觉”的行为。你之前怎么配的,现在还怎么跑。
环境配置会很特殊,因为在测试套件的运行配置里,是很直观可见的一个配置。而且针对不同类型的资源,使用环境的方法差别很大:
如果用户需要统一配置,可以选择“使用相同配置运行”,然后指定一套独立配置。这个选项的位置放在“高级配置”里,不干扰常规使用路径。
当测试套件增长到数百个时,串行执行会成为自动化交付的瓶颈。一个完整的回归测试可能需要一小时才能完成,这会延迟发布流程并减慢生产监控中的问题检测。

测试套件默认支持并行执行。只需在串行和并行模式之间一键切换——系统会根据运行机器可用资源自动确定最佳并发性。无需手动调整。这可以将 60 分钟的回归测试缩短至 30 分钟以下,而无需更改测试逻辑。
并行执行自动处理依赖隔离。每个场景都在自己的上下文中运行,确保一个场景的共享变量或环境状态不会干扰另一个场景。对于真正相互依赖的场景,你需要将其分组为具有顺序步骤的单个场景。

Apifox 已经有“测试场景”的批量运行功能——在场景目录上右键,可以批量运行整个目录下的场景。
测试套件不就是换了个名字吗?有什么区别?

举个 🌰:
这种灵活性是目录结构做不到的。
你可能会问:场景用例已经可以跑了,目录批量运行也有了,为什么还要专门做一个“测试套件”?
答案是:
我们在为“场景化测试”的未来做准备。
现代软件开发的一个趋势是:测试场景的数量随着 AI 生产代码会越来越多,但测试方法是会越来越标准化的。
想想看,你的团队可能面临这些情况:
这些场景对“跑哪些用例”的要求完全不同,但底层的用例是同一批。你只应该编排功能的业务流程并保存为一个个用例,为了“回归”这种测试的执行需求,从而编排一个用例来解决,这是不合逻辑、也不好维护的。

更重要的是,这种“积木化”的思路可以 大幅降低测试环境的模拟成本。过去你可能需要为每个测试场景搭建专属的沙箱环境,现在你可以用同一套环境、同一批用例,只是组合方式不同。套件成为连接“测试资产”和“测试需求”的桥梁。
这就是我们做测试套件的真正意图:不只是让自动化测试 “能跑”,而是让自动化测试 “可复用”、“能按期望自动运行”。
| 功能 | 定位 | 适用场景 |
|---|---|---|
| 场景用例 | 业务场景的请求流程编排 | 自动化测试基础搭建、构成业务功能单元 |
| 场景目录 | 用例的物理归档位置 | 日常用例管理、团队协作 |
| 目录批量运行 | 快速跑一个目录下的所有用例 | 功能回归、全量回归、探索性测试 |
| 测试套件 | 可复用的测试执行单元 | 版本回归、冒烟测试、定期巡检 |
做产品需要取舍。以下是我们讨论过但决定暂时不做的功能:
❓ 你有“套件套套件”的需求吗?如果有,你的场景是什么?
❓ 你觉得自动重试是必要的吗?你更希望看到“干净的结果”还是“真实的结果”?
测试套件这个功能,从用户反馈到产品上线,我们思考了很多,也放弃了很多。但我们深知, 真正好的产品不是设计出来的,而是用出来的。
我们可能漏掉了你最需要的功能,也可能把某个细节设计得让你用着别扭。这些问题,只有你告诉我们,我们才知道。
如果你试用了测试套件,欢迎告诉我们:
你的反馈会直接影响我们下一版的优先级排序(真心!)期待听到你的声音!
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70049315/viewspace-3111532/ ,如需转载,请注明出处,否则将追究法律责任。