很多人以为性能测试是“功能测完之后顺手压一下”。这个认知会导致报价时按一份算,进场后发现是两份活,最后工期和预算双双失控。
更准确的说法是:它们依据的是同一份标准(GB/T 25000.51-2016),但干的是两套完全不同的活,用的是两拨人,耗的也是两种资源。 标准里“功能性”和“性能效率”是两个独立的质量特性,各有各的测试细则。

GB/T 25000.51-2016
功能测试问的是:系统能不能做这件事,做得对不对。
它的结论是定性的:“在××条件下,××业务场景可正常完成,结果符合需求规格说明。”对或不对,基本没有中间地带。
性能测试问的是:这件事做多少次、做多快、扛不扛得住。
它的结论必须是定量的:“500并发下订单提交成功率≥99.9%,P95响应时间1.8秒,CPU峰值72%。”这里没有“对”,只有数字。
所以功能报告里写“运行稳定”还能勉强过关,性能报告里写“性能良好”就等于没写。功能看对错,性能看数字,这是两者最根本的分野,后面所有差异都从这里长出来。
这是最容易翻车的地方。
功能测试对环境相对宽容。测试服务器配置低一点、数据少一点、网络慢一点,通常不影响“这个按钮能不能点”的判断。甚至很多时候用客户的预发环境就能跑。
性能测试不行。环境必须能代表生产:机器规格、网络拓扑、中间件版本、数据库参数、数据量级,任何一项对不上,测出来的数字就只是“这台机器在这个下午的表现”,拿到验收会上经不起追问。我们常被要求“先用现有环境测一下看看”,这种话听着省事,实际测完往往得重做,因为专家第一句就会问“你这环境和生产一致吗”。
连带的影响是:功能测试可以随时插队、分批做;性能测试必须预约窗口期,还要协调运维、数据库、网络,一旦排不上就只能等。
功能用例是枚举:正常流程、异常流程、边界值、权限分支,一条条列出来,追求覆盖率。
性能用例是提炼:从几十个业务场景里挑出三五个“最要命”的,通常是高频、重计算、跨库关联、涉及外部接口的那几个。全量场景去压,既没必要也不现实,还可能把非瓶颈的地方先压垮,反而掩盖真问题。
这也意味着,性能测试的前期沟通成本远高于功能测试。功能测试拿着需求规格说明书就能开工;性能测试必须先跟客户把“几个场景、多少并发、成功率阈值、要不要长压”定死,否则脚本根本写不出来。指标写得越含糊,返工概率越高。
功能测试的执行主体是人(辅以自动化脚本),发现问题→提缺陷→开发修→回归验证。这条链路很成熟,一轮下来几天到两周。
性能测试的执行主体是工具加监控(JMeter/LoadRunner 之类配合 APM、数据库慢查询、系统资源采集)。而且发现“慢”不等于找到原因。功能测试可以说“这个接口报错”,性能测试只能说“这个接口P95是7秒”,至于为什么是7秒,是SQL没走索引、连接池不够、缓存没命中,还是底层虚机资源争抢,需要另外定位。
这就带来一个关键区别:功能测试的返工是“修bug”,性能测试的返工往往是“调优+重测”的循环。改一条索引可能只要十分钟,但排队、搭环境、跑脚本、出报告这一套流程又要走一遍。所以性能测试的周期波动远大于功能测试,报价时如果按功能测试的节奏估,十有八九会超。

功能测试VS性能测试
功能测试交付的是缺陷清单加符合性结论;性能测试交付的是基线数据加指标判定,外加一份往往比结论更有价值的东西:瓶颈落在哪一层。
也正因如此,负责任的机构会在性能报告里明确写清“本次不包含”,比如生产极限容量、依赖真实业务量的指标、超出环境能力的组合。这不是推脱,而是划边界。功能测试很少需要这么写,因为功能的边界天然就在需求规格里。
1.别把两项合并成一个总价去比价。拆开报,你才能看出谁在性能上虚标并发数、谁在功能上偷了异常分支。
2.性能部分提前锁窗口。把“测试—定位—调优—复测—签发”整条链路算进去,年底扎堆期尤其如此。
3.基线做一次就够,但要可复现。场景脚本、数据量级、环境配置、监控口径全部留档,否则调完对不上数,等于白测。
4.核心路径全测,边缘模块抽样。把钱花在评审一定会问到的地方,而不是花在“看起来更完整”的地方。
如果你那边正在准备这两块,可以把需求文档里的功能模块清单和验收文件里的性能要求一起发我。我帮你拆成两份独立的范围说明,标出哪些能抽样、哪些必须全测,再给一版能直接拿去比价的计价因子表,这一步我们免费服务,因为范围对齐了,后面才不至于互相猜。
标签:功能测试、性能测试