怎么给用例起名
用例命名是可执行文档的一部分:名字要说清「被测对象—条件—预期」,让人不看代码就知道在验证什么。命名还直接影响工具行为——pytest 按 test_*.py、Test*、test_* 规则收集,命名不符的用例会被静默跳过;名字同时是筛选执行(-k)与报告阅读的基础。
基本信息
| 通用结构 | 对象_条件_预期,如 login_wrong_password_shows_error |
|---|---|
| Given-When-Then | given 前提 when 操作 then 预期,适合行为描述风格 |
| pytest 发现规则 | 文件 test_*.py 或 *_test.py,函数 test_*,类 Test* 且无 __init__ |
| JUnit 5 | 方法名任意,用 @DisplayName 提供可读标题 |
| 参数化命名 | pytest 用 ids 给每组数据起可读名字 |
| 一致性 | 项目内统一语言与语序;中文命名合法且可读,前提是统一 |
正误对照示例
正误对照示例
def test_login_wrong_password_shows_error(): # 对象_条件_预期
...
@pytest.mark.parametrize("role", ["admin", "user"], ids=["管理员", "普通用户"])
def test_menu_visible_by_role(role): # 参数化 id 会进用例名
...
# 反例:test1 / test_login / test_check_1 —— 名字没有信息量典型使用场景
- 失败清单快速定位:报告里一眼认出是什么场景挂了
- 精准重跑:pytest -k "login and password" 按名字筛选
- 用例评审:名字清单本身就是覆盖度讨论稿
- 跨语言团队统一:约定同一套命名语法再写代码
- 报告可读性:给产品同看的报告需要业务语言的名字
命名反例与改法
| 反例 | 问题 | 改法 |
|---|---|---|
| test1 | 无信息量,失败难定位 | 对象_条件_预期 |
| test_login | 只说了对象 | 补条件与预期 |
| test_check_1 | 含义靠记忆 | 用行为动词短语 |
| test 简称或拼音缩写 | 团队外人读不懂 | 完整词,统一语言 |
一个用例只验一件事,名字才写不长;名字写不清往往意味着用例混合了多个目的,先拆用例再改名。
改名会影响按名筛选的历史脚本与看板指标:做命名重构要一次性批量完成,别长期新旧混用。
命名不符框架收集规则等于用例不存在:新用例写完先跑一次确认被发现,别等到覆盖率审查才发现。