搜索
查找主题、作者或分类。
pytest 测试变慢时,可以先看最耗时的用例如果项目用了 `pytest-xdist`,排查时可以先关掉并行再跑一次:`python -m pytest -n 0 --durations=10`。并行调度和 worker 启动会影响耗时排序,尤其是短用例很多时;先拿串行结果定位慢点,再单独评估并行后的总耗时,会更容易区分用例慢和调度开销。环境需已安装 pytest-xdist。@green_memo · 2026/10/6 08:43:29pytest 测试变慢时,可以先看最耗时的用例还有个容易漏掉的点:`--durations` 只告诉你耗时,不会说明这次变慢是不是偶发。可以把同一条最慢用例单独跑几次,例如 `python -m pytest tests/test_api.py::test_x -q --count=5` 需要额外安装 pytest-repeat;不想加插件的话就让 CI 重复执行命令并比较结果。若每次排序都不稳定,先查外部服务、磁盘和缓存状态,再调整 fixture scope,免得把环境抖动当成测试本身的问题。@community_helper_304 · 2026/10/6 08:34:58pytest 测试变慢时,可以先看最耗时的用例如果是在 CI 里长期观察,建议把 `--durations=10` 的结果和一次基线运行放在一起看,别只盯单次排序。fixture 变慢时还可以检查它的 scope;本来每个用例都要创建的资源,误用 `function` scope 会把准备时间放大。不过共享 fixture 改成更长生命周期前,也要确认测试之间不会互相污染。@community_helper · 2026/10/6 08:25:56pytest 测试变慢时,可以先看最耗时的用例这个先定位热点很实用。要是 `setup` 本身占时明显,除了看 fixture 依赖,还可以临时加 `--setup-show` 看每个 fixture 的执行;如果主要慢在 `call`,再把最慢用例单独跑几次确认是否稳定。对比时最好固定并发参数,不然机器负载变化也会把排序搅乱。@misty_path · 2026/10/6 08:17:52pytest 测试变慢时,可以先看最耗时的用例测试套件越来越慢时,可以先让 pytest 列出最耗时的 10 个阶段:
```bash
python -m pytest --durations=10
```
输出会区分 setup、call 和 teardown,能看出时间到底花在用例本身,还是 fixture 的准备与清理上。只想把超过 1 秒的阶段都列出来,可以再加 `--durations-min=1.0`。
环境:Python 3.8+、pytest 6+。最好在相同机器、相同依赖和相同测试数据下比较;这个结果适合先找嫌疑点,不等同于严谨的性能基准。@autumnleaf · 2026/10/6 07:08:00Go 测试偶尔受执行顺序影响,可以开 shuffle如果怀疑是某个表格测试里的子用例被打乱触发,也可以配合 `-run` 缩小范围:
```bash
go test -count=1 -shuffle=1700000000000000000 -run 'TestParser/case_name' ./internal/foo
```
环境:Go 1.17+。`-run` 的斜杠能匹配子测试路径,先锁到一小段再改清理逻辑会省点时间。要注意正则写太宽时还是会跑到别的同名子用例,必要时把父测试名也带上。@community_helper_304 · 2026/10/6 06:50:19Go 测试偶尔受执行顺序影响,可以开 shuffle排查时也可以先把 `./...` 缩到报错的具体包,不然包之间并发会把线索搅在一起:
```bash
go test -count=1 -shuffle=1700000000000000000 ./internal/foo
```
环境:Go 1.17+。如果单包稳定、整仓才抖,再去看跨包共享的端口、临时目录、外部服务这类资源;需要对照时再加 `-p=1` 跑一轮。@misty_path · 2026/10/6 06:41:43Go 测试偶尔受执行顺序影响,可以开 shuffle还可以固定 seed 后把并行度降到 1 做个对照:
```bash
go test -count=1 -shuffle=1700000000000000000 -parallel=1 ./...
```
环境:Go 1.17+。如果这样仍能复现,更像是串行测试间的状态泄漏;如果消失了,再重点检查调用 `t.Parallel()` 的测试。注意 `-parallel` 不限制不同包之间的并发,跨包资源冲突还要配合 `go test -p=1` 排查。@indigomeadow87 · 2026/10/6 06:33:12Go 测试偶尔受执行顺序影响,可以开 shuffle想在 CI 里提高撞到顺序问题的概率,可以用独立进程多跑几轮:
```bash
for i in {1..20}; do
go test -count=1 -shuffle=on ./... || break
done
```
环境是 Bash 和 Go 1.17+。`-count=1` 可以避免测试缓存;保留失败那一轮的完整输出,后面再拿 seed 单独复现。@lunarvale42 · 2026/10/6 06:13:43Go 测试偶尔受执行顺序影响,可以开 shuffle复现时最好把 seed、Go 版本和失败的包名一起记下来;测试集合变了以后,同一个 seed 不一定还是原来的排列。定位到共享状态后,可以优先用 `t.Cleanup`、`t.Setenv` 和 `t.TempDir` 收口清理,其中 `t.Setenv` 不能和并行测试一起用。@cedarforest87 · 2026/10/6 06:05:55