网易首页 > 网易号 > 正文 申请入驻

初级测试和高级测试,差的不是工具,是这7个习惯

0
分享至

刚入行时我以为,高级测试工程师厉害在“会得多”——更牛的框架、更花哨的 mock、更高级的压测。我拼命学这些,以为学会就能升级。

后来我跟一群真正的测试老兵共事。我发现他们的用例,一点都不炫。

但奇怪的是——需求变了一轮又一轮,别人用例改崩了,他们的用例永远稳稳跑通,每次都能精准截住回归 Bug。



后来我才明白:初级和高级的差距,根本不在“会多少工具”,而在 7 个习惯。跟用 Pytest 还是 JUnit 没关系,它们决定的就三件事——漏测多不多、报错好不好查、用例别人接手要花多久看懂。

下面这 7 条,每一条配一个真实业务场景,一起来康康。



习惯1、先把“不满足条件”的情况拦在外面

场景:你要测试“退款”功能。前提是:订单已支付、而且还没退过。

新手常常这么写——像套娃一样,每个条件套一层:

def 测试退款():
订单 = 创建订单()
if 订单存在:
支付(订单)
if 订单状态 == "已支付":
if 订单没退过:
退款(订单)
assert 退款成功
else:
报错("已退过")
else:
报错("没支付")
else:
报错("没订单")

刚写完觉得没问题。但后来产品说要加“风控检查”,你再套一层;再过两周加“优惠券退回”,又套一层。最后真正干活的“退款”那行代码被埋在最里面,你自己过两个月回来看都得懵。

高级测试怎么干?反过来——把不满足条件的全部先踢出去:

def 测试退款():
订单 = 创建订单()
assert 订单 is not None, "订单都没生成,跑啥?"
支付(订单)
assert 订单状态 == "已支付", "没付钱不能退"
assert 订单没退过, "重复退了,兄弟"
# 走到这里,说明前面都OK,放心测
退款(订单)
assert 退款成功

TIPS: 前置条件先卡死,主逻辑顶格写,谁看都清楚。

习惯2、给测试用例起个备注名字

场景:你要测“给有效订阅用户发续费提醒”。

新手经常写:

def test_1():
...

半年后你自己看都不知道这是测什么。更可怕的是,跑完自动化测试,报告里一堆 test_1、test_2,失败了都不知道是哪个业务场景挂了。

高级测试这么写名字——直接用业务场景当名字:

def test_给有效订阅发续费提醒_应该成功():
...
def test_给过期订阅发续费提醒_应该跳过():
...

TIPS: 用例名就是你的报告,要让人一眼看懂测的是什么业务。

习惯3、在“外部依赖”外面包一层,别硬编码

场景:你的测试要模拟微信支付的回调。

新手直接硬写:

def 测试微信回调():
请求数据 = {
"user_name": "张三",
"status": "ACTIVE"
}
调用接口(请求数据)
assert 返回成功

一个用例这么写没事,十个用例都这么写就有事了。突然有一天微信把字段名 user_name 改成了 userName,你的十个用例全挂,一个一个改到吐血。

高级测试怎么做?在外面包一个“翻译函数”:

def 造微信数据(用户):
return {
"user_name": 用户.名字, # 如果微信改名,我只改这一行
"status": 用户.状态
}
def 测试微信回调():
请求数据 = 造微信数据(测试用户)
调用接口(请求数据)
assert 返回成功

TIPS: 外部的东西变数大,用一层函数隔开,你的测试代码就稳了。

习惯4、别让“不可能存在”的订单状态出现在测试里

场景:你要测试退款,需要各种状态的订单。

新手图省事,用个字典,所有字段都可填可不填:

订单 = {
"id": None,
"状态": "已支付",
"已退款": False
}

因为全是可选的,你随便乱组合都行。结果有一天你手滑造了一个“已退款”但“状态”还是“已支付”的怪物订单,测试居然跑过了,但线上真实逻辑根本不会出现这种组合,结果漏测了一个严重 Bug。

高级测试会怎么干?用工厂函数,只生成“合法的”订单:

def 造已支付订单():
return 订单(id=生成ID(), 状态="已支付", 已退款=False)
def 造已退款订单():
return 订单(id=生成ID(), 状态="已退款", 已退款=True)

这样你测试退款时,只能传“已支付订单”,你传“已退款订单”的话,写代码时就会报错(或者断言失败),根本轮不到上线才发现。

TIPS: 让测试数据只允许合法的状态,错误在写的时候就暴露,比线上炸了再查强一万倍。

习惯5、把“期望结果”算清楚,和“实际操作”分开来

场景:测试退款成功后,账户余额对不对。

新手这么写:

def 测试退款():
订单 = 造已支付订单(金额100)
退款(订单)
assert 账户余额 == 100 - 手续费 # 这里直接算,但手续费规则可能变

如果手续费计算规则改了,你得改所有测试里的断言,烦不烦?

高级测试会单独写一个“计算期望”的函数:

def 计算退款后余额(原金额, 费率=0.006):
return 原金额 - 原金额 * 费率
def 测试退款():
订单 = 造已支付订单(金额100)
退款(订单)
期望余额 = 计算退款后余额(100)
assert 账户余额 == 期望余额

这样,如果手续费规则变了,我只改一个函数,所有用到这个计算的测试自动跟着变。

TIPS: 把“算期望”和“执行操作”分开,你的测试更好维护,也更容易单独验证规则对不对。

习惯6、测试失败时,让报错信息出提示

场景:你断言接口返回 200,结果返回了 500。

新手报错就是一句话:

AssertionError: assert 500 == 200

你看到这个信息能干嘛?只能去翻日志,猜是哪个订单、什么参数、为什么失败。半夜出问题,简直想哭。

高级测试会这样写断言——把上下文全带出来:

def 断言退款成功(响应, 订单):
if 响应.status != 200:
raise AssertionError(
f"退款失败!订单号:{订单.id},状态:{订单.状态},"
f"请求参数:{请求数据},返回内容:{响应.text},"
f"追踪ID:{响应.headers.get('X-Request-Id')}"
)

这样一失败,你立刻知道是哪个订单、发了什么、返回了什么,拿着追踪 ID 去日志里一搜,分分钟定位问题。

TIPS: 别让你的断言只输出“对还是错”,要让失败信息自带诊断报告。

习惯7、提交测试代码时,一次只干一件事

场景:你完成了一个退款功能,跑通了,很开心,提交了一个 PR,里面塞了:

  • 新增退款测试
  • 改动了订单工厂
  • 顺手重构了登录测试
  • 更新了配置文件
  • 加了个风控测试

审查你代码的同事一脸懵:哪些改动是必须的?哪些是顺手改的?万一出问题要回滚,一撤销把登录测试也给撤了,那不乱套?

高级测试会把这些拆成好几个小 PR:

  1. 第一个 PR:只重构订单工厂(不改任何测试结果)
  2. 第二个 PR:只新增退款测试(依赖第一个)
  3. 第三个 PR:只加风控测试(独立)
  4. 第四个 PR:清理旧配置(独立)

每个 PR 讲一个清楚的故事:“我改了啥,为啥改,对测试有什么影响”。审查的人看得清楚,出问题回滚也安全。

TIPS: 代码不是在你电脑上跑通了就算完,而是要“别人能看懂、能审查、能安全回滚”才算完。

别急着学那些高大上的工具。从今天起,写下一个测试用例时,挑一个习惯用上。半年后再看,你写的用例会稳定、好懂、不坑人。

这,就是变强的样子。想涨薪、想走得更远,最稳妥的办法永远是投资自己的技能。

☑想涨薪、想走得更远,最稳妥的办法永远是投资自己的技能。

☑可如果行业的天花板已经压到头顶,与其在原地内卷,不如借AI的东风换个赛道。

☑AI,正是个低门槛、高成长的方向。

可以戳⬇️⬇️⬇️

公主号【Atstudy技术社区】,内含项目实战等各种资料包

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
男按摩师给我按到一半突然停下,红着脸说:对不起,我有点心动了

男按摩师给我按到一半突然停下,红着脸说:对不起,我有点心动了

千秋历史
2026-09-14 20:11:24
前日本羽球国手「神级火辣片疯传」

前日本羽球国手「神级火辣片疯传」

吃瓜党二号头目
2026-09-14 20:57:12
70人团伙明码标价搞垮80家店,直接放狠话:“敢反抗就查死你!”

70人团伙明码标价搞垮80家店,直接放狠话:“敢反抗就查死你!”

麓谷隐士
2026-09-15 00:10:03
开国元帅和大将中,有3位与彭德怀不睦,背后到底藏了什么梁子?

开国元帅和大将中,有3位与彭德怀不睦,背后到底藏了什么梁子?

纪史行者
2026-08-31 01:25:03
泽连斯基发出正式威胁:俄罗斯今冬再炸乌克兰电网,我们会对等报复

泽连斯基发出正式威胁:俄罗斯今冬再炸乌克兰电网,我们会对等报复

鹰眼Defence
2026-09-13 17:41:05
输不起了!菲律宾主帅疯狂找借口,残缺阵容掩盖不了心态崩盘

输不起了!菲律宾主帅疯狂找借口,残缺阵容掩盖不了心态崩盘

独坐山巅前
2026-09-15 03:02:44
微软亲手废掉的播放器,被开源社区捡起来了

微软亲手废掉的播放器,被开源社区捡起来了

碳基打工人
2026-09-14 22:35:07
“还不分床,等着看德国骨科?”家长晒姐弟俩午睡一幕,让过来人直言:你会后悔的

“还不分床,等着看德国骨科?”家长晒姐弟俩午睡一幕,让过来人直言:你会后悔的

妍妍教育日记
2026-09-14 21:18:41
央视网下架郭德纲作品,相声专场禁止录音录像,演出市场走向何处?

央视网下架郭德纲作品,相声专场禁止录音录像,演出市场走向何处?

一盅情怀
2026-09-14 12:36:38
45岁男子与女友合租一年吃30次他达拉非,一年后房颤,医生:无知

45岁男子与女友合租一年吃30次他达拉非,一年后房颤,医生:无知

垚垚分享健康
2026-09-06 06:50:20
乌克兰:盟友已干扰俄获取中国无人机发动机,最快型号时速600公里

乌克兰:盟友已干扰俄获取中国无人机发动机,最快型号时速600公里

桂系007
2026-09-14 10:05:12
大腿拉伤!亚运会报销啊!中国男篮的首发3号位

大腿拉伤!亚运会报销啊!中国男篮的首发3号位

篮球实战宝典
2026-09-14 17:57:17
越南新娘嫁到浙江18年,第一次回娘家,丈夫给了她一箱方便面

越南新娘嫁到浙江18年,第一次回娘家,丈夫给了她一箱方便面

流萤叙情
2025-09-05 18:22:25
中越围绕白龙尾岛激烈交锋:中国借给越南的白龙尾岛还能要回来吗?

中越围绕白龙尾岛激烈交锋:中国借给越南的白龙尾岛还能要回来吗?

元哥说历史
2026-09-13 08:10:06
震惊!网传百度启动代号“930”人员优化,9月30日前清退十年老员工,底层、中层均有涉及

震惊!网传百度启动代号“930”人员优化,9月30日前清退十年老员工,底层、中层均有涉及

火山詩话
2026-09-13 04:59:47
广州大学城一男子持刀伤人,有网友称凶手专伤人眼睛,学生发帖提醒同学不要外出

广州大学城一男子持刀伤人,有网友称凶手专伤人眼睛,学生发帖提醒同学不要外出

Mr王的饭后茶
2026-09-14 20:57:00
76岁还要唱!谭咏麟表面风光,背地里“一屋两妻”生活一地鸡毛

76岁还要唱!谭咏麟表面风光,背地里“一屋两妻”生活一地鸡毛

林轻吟
2026-09-13 07:25:46
骑士:关键时刻可以不要哈登!心寒了....

骑士:关键时刻可以不要哈登!心寒了....

柚子说球
2026-09-14 23:07:23
《牛来》续作官宣!母子二人继续手搓 牛来草原开跑

《牛来》续作官宣!母子二人继续手搓 牛来草原开跑

游侠网
2026-09-14 17:03:59
重磅!查尔斯国王发重要文件,与哈里梅根彻底切割,再无HRH头衔

重磅!查尔斯国王发重要文件,与哈里梅根彻底切割,再无HRH头衔

草莓解说体育
2026-09-15 00:38:04
2026-09-15 04:12:49
51Testing软件测试网 incentive-icons
51Testing软件测试网
中国软件测试人的精神家园
1644文章数 13285关注度
往期回顾 全部

头条要闻

17岁女孩成"挂壁青年":初中毕业放弃升学 父母已断供

头条要闻

17岁女孩成"挂壁青年":初中毕业放弃升学 父母已断供

体育要闻

兹维列夫,从三十年0冠到一百天2冠

娱乐要闻

敬一丹采访视频曝光,原来早有预兆

财经要闻

东莞证券原副总裁主动投案

科技要闻

时隔近9年,特斯拉新款Roadster拟十一发布

汽车要闻

纯电续航960km/迪迪虾上车 腾势N8L纯电售29.98万元起

态度原创

游戏
艺术
家居
房产
旅游

FS社新游上手试玩 西部版《黑暗之魂》硬核来袭!

艺术要闻

笔精墨妙有情怀,丁玉蝶画马,看完直呼绝了!

家居要闻

2026建博会(广州) 公装联探展交流活动

房产要闻

网易房产|《让爱驻下》云首发!以一首歌,致敬广州赶路人

旅游要闻

房车穿北疆 高铁串名城 中秋国庆长假这样玩

无障碍浏览 进入关怀版