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

初级测试和高级测试,差的不是工具,是这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.

相关推荐
热点推荐
40岁陈赫公布病情!已暂停工作,"疼痛到无法直起身子",早前妻子张子萱一句话,差点让大家吵翻?

40岁陈赫公布病情!已暂停工作,"疼痛到无法直起身子",早前妻子张子萱一句话,差点让大家吵翻?

美芽
2026-09-10 19:34:30
刘翔再谈买断:98万全捐,但事还没完

刘翔再谈买断:98万全捐,但事还没完

三言科技
2026-09-10 18:50:40
火力全开,几度哽咽,扎哈罗娃五分钟怒斥日本:“你们不应该跪下来道歉吗”,屠杀中国、苏联平民时,戴的不正是菊花纹章吗

火力全开,几度哽咽,扎哈罗娃五分钟怒斥日本:“你们不应该跪下来道歉吗”,屠杀中国、苏联平民时,戴的不正是菊花纹章吗

第一财经资讯
2026-09-10 14:22:34
“我已经蠢的不像人了!”女大学生报道路上崩溃,网友:社会化程度太低了!

“我已经蠢的不像人了!”女大学生报道路上崩溃,网友:社会化程度太低了!

林林先生
2026-09-11 07:40:03
印度会超过中国吗?事实证明,印度在四个方面已经领先于中国

印度会超过中国吗?事实证明,印度在四个方面已经领先于中国

混沌录
2026-09-11 00:10:09
微信最新潜规则:你发的每一条朋友圈,别人其实根本看不到

微信最新潜规则:你发的每一条朋友圈,别人其实根本看不到

十指说情
2026-09-11 08:44:59
打假网红“铁头”,判刑8年!曾向卖货主播勒索数百克黄金

打假网红“铁头”,判刑8年!曾向卖货主播勒索数百克黄金

听心堂
2026-09-11 17:01:36
工信部发布规划:到2030年在高速公路、城市快速路等场景将实现高度自动驾驶

工信部发布规划:到2030年在高速公路、城市快速路等场景将实现高度自动驾驶

每日经济新闻
2026-09-11 20:57:50
深挖身价上亿的郭德纲,不查不知道,私下生活竟如此奢华

深挖身价上亿的郭德纲,不查不知道,私下生活竟如此奢华

搞笑娱乐笑话
2026-09-09 18:28:27
苹果突然官宣:9月11日,iPhone17Pro抵扣价6400元

苹果突然官宣:9月11日,iPhone17Pro抵扣价6400元

搞机小帝
2026-09-11 10:53:02
安徽小伙在湖南做水族造景师,最高一单卖了4万元!本人:卖的不仅是景观,更是情绪价值

安徽小伙在湖南做水族造景师,最高一单卖了4万元!本人:卖的不仅是景观,更是情绪价值

极目新闻
2026-09-11 20:38:32
国内将逐渐停止 “痔疮手术”?做完人就废了?医生讲出实情

国内将逐渐停止 “痔疮手术”?做完人就废了?医生讲出实情

健康科普365
2026-09-08 21:30:05
上海体育局给了刘翔多项选择,名记:每个职位都不错但他一个都没看上,旧日情分恐到此为止

上海体育局给了刘翔多项选择,名记:每个职位都不错但他一个都没看上,旧日情分恐到此为止

尘语者
2026-09-11 09:22:16
最高9.3分,夯爆了

最高9.3分,夯爆了

来看美剧
2026-09-11 21:01:56
5-6!周跃龙连丢三赛点遭卡特逆转绝杀,中国名将无缘英格兰公开赛四强

5-6!周跃龙连丢三赛点遭卡特逆转绝杀,中国名将无缘英格兰公开赛四强

世界体坛观察家
2026-09-12 00:08:01
iPhone 17线下大降价!

iPhone 17线下大降价!

中国商界杂志社
2026-09-11 15:58:41
张雪公开致歉:由于个人管理能力不足,修养不足,让大家失望了

张雪公开致歉:由于个人管理能力不足,修养不足,让大家失望了

毒sir财经
2026-09-09 18:32:42
乌克兰特工曝光2648名俄罗斯榛树导弹工程师!定点清除?

乌克兰特工曝光2648名俄罗斯榛树导弹工程师!定点清除?

项鹏飞
2026-09-10 18:42:48
刚刚,上海今年最大IPO来了

刚刚,上海今年最大IPO来了

新浪财经
2026-09-11 10:03:59
大叔买了100多克黄金“给儿子结婚用” 价值12万余元 儿子懵了:我怎么不知道要结婚?面对警方劝阻 大叔才知被骗

大叔买了100多克黄金“给儿子结婚用” 价值12万余元 儿子懵了:我怎么不知道要结婚?面对警方劝阻 大叔才知被骗

闪电新闻
2026-09-11 14:14:27
2026-09-12 00:31:00
51Testing软件测试网 incentive-icons
51Testing软件测试网
中国软件测试人的精神家园
1641文章数 13285关注度
往期回顾 全部

头条要闻

中方赴印代表团规模有多大 外交部回应

头条要闻

中方赴印代表团规模有多大 外交部回应

体育要闻

37岁还能场场进球,还能翻跟头!

娱乐要闻

黄晓明直言帮太多白眼狼,杨颖遭殃

财经要闻

女装“玖姿”母公司跨境贸易迷局:安正时尚说谎了吗?

科技要闻

苹果折叠屏比小米华为贵5000元,该怎么选

汽车要闻

买菜车也有小乐趣 风云T7不止是台合格家用SUV

态度原创

本地
房产
时尚
数码
艺术

本地新闻

Onestage x 乐华娱乐暑期巡回选拔2026

房产要闻

别再等了!广州改善好房,正在进入“卖一套少一套”时代

衣服别总是只穿黑色,看看这几款蓝色单品,清爽高级不过时

数码要闻

机械革命无界14S 2026笔记本锐龙版上架,国补价3994.15元

艺术要闻

费欣画自家闺女,拍了330多万!

无障碍浏览 进入关怀版