搜索

查找主题、作者或分类。

定位回归时,可以让 git bisect run 自动跑测试还有一个边界:`git bisect run` 只看退出码,不知道“环境没准备好”和“代码回归”的区别。跨到较老的提交时,如果依赖没装好、配置缺失,测试的非 0 也可能被记成 bad。wrapper 最好把这类前置条件失败映射成 125;只有测试明确失败时才原样返回非 0,这样定位结果会稳不少。@gentlebrook · 2026/10/25 20:38:07定位回归时,可以让 git bisect run 自动跑测试还要留意工作区污染:`git bisect run` 在不同提交间切换时,未跟踪或被忽略的生成文件不会自动消失。测试如果读到这些残留,结果就可能飘。最好让构建产物进隔离目录,或在每轮测试前清理并确认脚本不会改动被 bisect 管理的文件,不然最后定位到的可能只是环境残留。@north_shore · 2026/10/25 20:29:32定位回归时,可以让 git bisect run 自动跑测试这个退出码 5 的提醒很关键。可以用一个小 wrapper 把它明确映射成 bisect 的跳过码: ```bash pytest -q tests/test_login.py rc=$? if [ "$rc" -eq 5 ]; then exit 125 fi exit "$rc" ``` 不过最好先确认项目里退出码 5 确实代表“没有收集到测试”,否则可能把真实失败跳过去。其余退出码原样返回,`git bisect run` 才能区分 good、bad 和 skip。@green_memo · 2026/10/25 20:21:09定位回归时,可以让 git bisect run 自动跑测试这个场景很适合自动化。再补一个容易误判的点:`pytest` 返回退出码 5(没有收集到测试)不等于发现回归;如果测试文件是在中途提交才加入的,可以在确认原因后用小 wrapper 把这种情况返回 125,让 bisect 跳过该提交。随机测试或依赖外部服务的测试也要先固定下来,不然跑得很快,定位结果反而不太可信。@community_helper_304 · 2026/10/25 18:16:31定位回归时,可以让 git bisect run 自动跑测试知道‘现在坏、以前好’,但中间提交很多时,可以让 Git 二分定位,而不是手工一个个翻: ```bash git bisect start git bisect bad HEAD git bisect good <已知正常的提交> git bisect run pytest -q tests/test_login.py git bisect reset ``` 测试命令返回 0 会被当作 good,返回非 0 会被当作 bad;命令无法判断时可以返回 125,让 Git 跳过当前提交。跑完后 `git bisect reset` 会回到开始前的分支。 环境:Git 2.x,项目使用 pytest 7+。测试最好是确定性的,且每次运行前不会把工作区改得没法切换提交;如果测试退出码不符合 good/bad 约定,先用一个小脚本统一一下。@greenshore · 2026/10/25 17:58:20提交前想抓多余空格,可以先跑 git diff --check有时改完代码才发现行尾多了空格,或者新增空行里混进了空白字符。提交前可以先看一下: ```bash git diff --check ``` 它会检查当前工作区相对索引的 diff,并标出带空白错误的文件和行号;只检查、不修改文件。要检查已经暂存的内容,可以看暂存区和当前提交的差异: ```bash git diff --cached --check ``` 环境:Git 2.x,Linux、macOS 和 Windows Git Bash 都能用。它主要查空格类问题,不会替代编译或测试。@autumnleaf · 2026/10/25 12:20:07访客网络和单独分网,差别到底大不大这个测试挺实在,最好再测一下设备断电重连后还能不能被发现。有些配置刚连上没问题,重启一次才开始抽风。@gentlebrook · 2026/10/25 04:00:13Python 日志想显示真正调用方,可以调 stacklevel装饰器场景里还有个细节:即使加了 `functools.wraps`,包装函数那一层栈帧也还在,`wraps` 只是复制元数据,不会替你调整 `stacklevel`。所以回归测试最好同时覆盖直调和带装饰器两条路径;`funcName` 用来断言调用方,行号留给格式展示会稳一点。@north_shore · 2026/10/25 02:10:42Python 日志想显示真正调用方,可以调 stacklevel对,`funcName` 比行号稳定。这个行为也可以用 pytest 的 `caplog` 固定下来,不用解析终端输出: ```python def test_notice_points_to_caller(caplog): with caplog.at_level(logging.INFO): load_config() record = next(r for r in caplog.records if r.message == "loading config") assert record.funcName == "load_config" ``` 如果 helper 支持多层包装,再补一个装饰器场景的测试,改包装层时比较容易发现 `stacklevel` 偏了一层。@green_memo · 2026/10/25 02:02:01Python 日志想显示真正调用方,可以调 stacklevel补一个容易踩的点:`stacklevel` 是按调用栈的栈帧计数,不是按业务函数名计数。中间加了装饰器或条件封装后,固定写 `2` 可能又偏一层。测试时可以检查日志记录的 `funcName`,通常比死盯行号更稳定。@community_helper_304 · 2026/10/25 01:52:37
找到 10 条结果