我想使用 pytest 创建一个 python 测试。在测试中,我将创建一个临时 JSON 文件并对 json 文件执行一些操作。完成此测试后如何删除该文件?
def test_can_do_something():
tmp_json = create_some_tmp_json_file()
do_something(tmp_json)
assert some_statement
Run Code Online (Sandbox Code Playgroud)
基本上我想保证无论测试如何结束临时 JSON 文件都会被删除。即使 do_something() 抛出一些异常。RAII 惯用法是一个不错的选择。但是如何在Python中实现呢?
对于这种需要与文件系统交互的用例,pytest 有一个很棒的功能:tmp_pathfixture。它将创建一个临时目录,您可以在其中写入文件,该文件将被自动删除。
只需传递tmp_path给您的测试并在测试中使用它,就像将其传递给写入 json 文件的方法一样。
def test_can_do_something(tmp_path):
tmp_json = create_some_tmp_json_file(tmp_path)
do_something(tmp_json)
assert some_statement
Run Code Online (Sandbox Code Playgroud)
这样您就不必处理删除临时文件夹的问题。它们将在系统临时目录中创建,该目录将在重新启动或运行超过 3 个测试时清除。这样,当出现问题时,您甚至可以调试测试并查看临时文件夹中发生的情况。
请参阅文档:
临时目录默认创建为系统临时目录的子目录。基本名称将为 pytest-NUM,其中 NUM 将随着每次测试运行而递增。此外,超过 3 个临时目录的条目将被删除。