You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在所有测试执行完毕后自动运行delete_prj清理函数?

测试执行后全局自动清理项目的解决思路

核心要覆盖单测试文件独立运行、全测试目录批量运行两种场景,同时保证清理逻辑只在全部测试跑完后触发1次,不重复执行也不漏执行,具体思路如下:

  • 用测试框架的会话级生命周期钩子承载清理逻辑,不要用模块级、用例级的teardown逻辑:会话级钩子在整个测试执行会话完全结束后才会触发,不管是跑1个测试文件还是跑整个tests目录下的所有用例,整个执行流程只会触发1次,不会出现跑多文件时反复删除项目、干扰其他用例正常运行的问题。
  • 把钩子实现统一放到tests/目录下的conftest.py文件中:pytest执行任意测试时,会自动查找加载执行路径下的conftest.py配置,哪怕单独运行tests/test_first.py这类单文件,也能正常加载到里面的清理逻辑,不会出现单跑文件时清理逻辑不生效的问题。
  • 给清理逻辑加执行前置判断:设置一个全局标记位,测试过程中如果真的调用了创建项目的逻辑,就把标记位置为有效状态,会话收尾触发delete_prj前先判断标记位,只有确实创建过测试项目才执行清理,避免无意义的操作调用。
  • 加异常兜底保障:选择的会话收尾钩子要满足无论测试成功、失败、中途报错中断都会触发的特性,不要把清理逻辑绑定在所有用例执行成功的分支上;额外可以加一层进程退出级别的兜底回调,就算测试进程异常崩溃,也能最大概率触发清理逻辑,避免残留测试项目。

注意不要把delete_prj的调用写到单个测试文件的收尾逻辑里,否则跑全目录测试时,每个文件跑完都会触发一次清理,会删掉其他测试文件还在使用的测试项目,导致跨文件的用例执行失败。

内容的提问来源于stack exchange,提问作者Fedor March

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 01:51:45