如何让 pytest 不删除成功的测试目录

huangapple go评论56阅读模式
英文:

How to get pytest to not delete successful test directories

问题

I'm using pytest and it's been great. My tests use the tmp_path fixture to hold a bunch of outputs (log files, plots, etc.). I want to keep these so I have a record of what the performance of all tests are, not just pass/fail. That way as I make changes I can see whether things are faster or slower, diff the logs, etc. Currently pytest only keeps the directories for tests that fail. I've been through the documentation and can't find any flags that will convince it to do otherwise.

Here's a sample test:

from pathlib import Path

def test_file_to_keep(tmp_path):

    # write some outputs from the test.
    my_file_to_keep = Path(tmp_path) / "my_file.txt";
    with open(my_file_to_keep, 'w') as out_file:
        out_file.writelines("some good output.")

    assert my_file_to_keep.exists()

I want to be able to look at the tmp_path directory and examine the contents of my_file.txt.

英文:

I'm using pytest and it's been great. My tests use the tmp_path fixture to hold a bunch of outputs (log files, plots, etc.). I want to keep these so I have a record of what the performance of all tests are, not just pass/fail. That way as I make changes I can see whether things are faster or slower, diff the logs, etc. Currently pytest only keeps the directories for tests that fail. I've been through the documentation and can't find any flags that will convince it to do otherwise.

Here's a sample test:

from pathlib import Path


def test_file_to_keep(tmp_path):

    # write some outputs from the test.
    my_file_to_keep = Path(tmp_path) / "my_file.txt"
    with open(my_file_to_keep, 'w') as out_file:
        out_file.writelines("some good output.")
        
    assert my_file_to_keep.exists()

I want to be able to look at the tmp_path directory and examine the contents of my_file.txt.

答案1

得分: 2

使用tmp_path创建的临时目录会在每次测试运行后保留,即使测试通过。

运行你的示例代码,我可以在终端中执行:

marco@sol:/tmp/pytest-of-marco/pytest-current/test_file_to_keep0$ cat my_file.txt 
some good output.

请注意,保留策略可以通过tmp_path_retention_counttmp_path_retention_policy变量进行配置,如文档中所述 here

还请注意,你不需要使用 Path(tmp_path) 创建一个 Path 对象,因为 tmp_path 是一个 pathlib.Path 对象,如文档中描述的 documentation

你甚至可以简化它:

def test_file_to_keep(tmp_path):

    # 写入测试中的一些输出。
    my_file_to_keep = tmp_path / "my_file.txt"
    my_file_to_keep.write_text("some good output.")

    assert my_file_to_keep.exists()
英文:

The temporary directories created with tmp_path are kept after each test run even if the test passes.

Running your example code, I can go to a terminal and do:

marco@sol:/tmp/pytest-of-marco/pytest-current/test_file_to_keep0$ cat my_file.txt 
some good output.

Please note that the retention policy can be configured with the tmp_path_retention_count and tmp_path_retention_policy variables, as described in the documentation here.

Also please note that you don't need to create a Path object with Path(tmp_path), as tmp_path is a pathlib.Path object, as described on the documentation.

You could even simplify it with:

def test_file_to_keep(tmp_path):

    # write some outputs from the test.
    my_file_to_keep = tmp_path / "my_file.txt"
    my_file_to_keep.write_text("some good output.")

    assert my_file_to_keep.exists()

huangapple
  • 本文由 发表于 2023年3月31日 02:39:43
  • 转载请务必保留本文链接:https://go.coder-hub.com/75891862.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定