py.test:会话范围的临时文件夹 - python

py.test中的tmpdir固定装置使用function范围,因此在范围更广的固定装置(例如session)中不可用。但是,这在某些情况下很有用,例如设置临时PostgreSQL服务器(当然,不应为每个测试都重新创建该服务器)。

有没有一种干净的方法来获得更广泛范围的临时文件夹,而无需编写我自己的装置和访问py.test的内部API?

参考方案

不幸的是,目前尚无法很好地做到这一点。将来py.test会引入一个新的“any”范围或与此类似的东西,但这就是未来。

现在,您必须自己手动执行此操作。但是,正如您注意到的那样,您失去了很多不错的功能:/ tmp中的符号链接到上一个测试,几次测试运行后自动清除,合理命名的目录等。如果目录不太昂贵,我通常将会话和函数作用域的夹具结合在一起通过以下方式:

@pytest.fixture(scope='session')
def sessiondir(request):
    dir = py.path.local(tempfile.mkdtemp())
    request.addfinalizer(lambda: dir.remove(rec=1))
    # Any extra setup here
    return dir

@pytest.fixture
def dir(sessiondir, tmpdir):
    sessiondir.copy(tmpdir)
    return tmpdir

这将创建一个临时目录,该目录在测试运行后将被清除,但是对于每个实际需要的测试(通过请求dir)将获得一个副本,并使用tmpdir语义保存该副本。

如果测试实际上需要通过此目录共享状态,则dir的终结器必须将内容复制回sessiondir。但是,这不是一个好主意,因为它使测试依赖于执行顺序,并且在使用pytest-xdist时也会引起问题。

py.test:如何从设置方法中获取当前测试的名称? - python

我正在使用py.test,想知道是否/如何在运行每个测试之前调用的setup方法内检索当前执行的测试的名称。考虑以下代码:class TestSomething(object): def setup(self): test_name = ... def teardown(self): pass def test_the_power(self): assert…

Coverage.py:如何为从外壳程序脚本调用的多个python脚本附加结果 - python

我正在使用带有参数调用多个python代码的shell脚本。现在,我的要求是收集整个项目的报告。任何想法如何在整个代码上运行coverage.py并生成合并的报告。以下是我正在使用的shell脚本的高级模板。如果有人可以指导如何实现上述要求。#!/bin/bash variable=$1 /usr/bin/python python1.py $variabl…

从另一个Python脚本运行一个Python脚本,并传入参数 - python

                                我想从另一个Python脚本运行一个Python脚本。我想像使用命令行一样传递变量。例如,我将运行我的第一个脚本,该脚本将遍历值列表(0、1、2、3),并将其传递给第二个脚本,依次为script2.py 0和script2.py 1,依此类推。我发现了Stack Overflow questio…

更改joind_at时区discord.py - python

我已经尝试了许多涉及pytz的方法来更改discord.py user.joined_at时间的时区。它在UTC中,我需要在EST中使用。我所做的是eastern = timezone('US/Eastern') eastern.zone fmt='%#c jointime=eastern.localize(datetime(u…

编译程序时无法包含图标 - python

我正在使用pyinstaller编译程序。我不能使用-i选项包含文件。它不编译而是给出一个错误。整个编译器崩溃。我的错误代码在这里:https://pastebin.com/raw/UBTTMmke在按住+右键单击资源管理器中的目录后,我正在使用Powershell。 参考方案 确保首先在脚本的文件夹目标位置“ cd”。确保将图像文件转换为.ico文件,也将…