如何阻止Pytest运行测试时追加到已生成的CSV文件?
结合你描述的现象,核心问题大概率出在状态残留上,具体分以下几种可能:
被测试的函数类存在未重置的状态
如果你的转换类是带状态的(比如初始化时创建了S3客户端实例、保存了输出文件的键名/本地路径,或者内部维护了输出内容的缓存),且测试类中复用了同一个类实例(比如把实例放在类级变量里,而非每个测试方法重新创建),那么后续测试会在之前的输出基础上追加内容。比如类里的转换方法没有每次生成新文件,而是持续往同一个文件句柄或S3键里写数据。Fixture未清理转换后的输出文件
你提到在levels_etl_with_test_csv_data里清理了test_data.csv,但没处理转换生成的新CSV文件。如果Fixture的作用域是class或session,整个测试类共用同一个S3桶,那么第一个测试生成的输出文件会留在桶里。如果你的转换函数逻辑是「如果输出文件存在则追加内容」(而非直接覆盖),后续测试就会往已有文件里加数据,导致断言失败。S3写入逻辑的模式问题
检查转换函数写入S3的代码:如果用了追加模式(比如通过Multipart Upload实现追加,或者先下载已有文件再追加后重新上传),那么即使每次测试重新调用方法,也会在已有输出文件基础上追加内容(boto3的put_object默认是覆盖,但自定义逻辑可能改变了这个行为)。测试类未在每次测试前重置环境
如果测试类没有在setup_method(或@pytest.fixture(scope="function"))中重新初始化被测试对象、清理本地临时文件,那么上一次测试的本地输出文件会被复用,导致上传到S3的内容是追加后的结果。
内容的提问来源于stack exchange,提问作者Jacob

