具有全局范围的py.test固定装置

时间:2018-09-10 08:45:55

标签: python testing pytest fixtures

我正在寻找一种在py.test中使用“全局固定装置”之类的方法。似乎scope="session"最接近我的需求,但它的工作原理类似于scope="module"级别的选项。夹具总共启动了n次,其中n是模块数。

基本上,我有这种初始化缓慢且资源匮乏的服务,可以进行形态分析

@pytest.fixture(scope='session', autouse=True)
def morfanalyzer():
    from myapp.nlp.morfservice import MorfAnalyzerService
    morfservice = MorfAnalyzerService()

    def f():
        morfservice.run(debug=True)

    thread = Thread(target=f)
    thread.start()

    yield morfservice

    morfservice.stop()
    thread.join()

我像这样使用它

@pytest.mark.usefixtures(morfanalyzer.__name__)
def test_this_stage(morfanalyzer):
    assert False

我想拥有的是,将在运行所有测试之前将服务的一个副本准确地旋转,并在一切运行之后将其删除。

1 个答案:

答案 0 :(得分:1)

通过在灯具中指定scope="session",您将拥有一个会话范围的实例。 您可以使用setup-show cli标志检查灯具的设置和拆卸,如3.0 Changelog

所示

正如@hoefling在评论中所指出的那样,一旦设置autouse=True并用usefixtures标记测试,就不再需要了。