当前位置:  开发笔记 > 编程语言 > 正文

获取pytest以在测试脚本的基本目录中查找

如何解决《获取pytest以在测试脚本的基本目录中查找》经验,为你挑选了1个好方法。

在pytest中,我的测试脚本将计算出的结果与通过基线加载的基线结果进行比较

SCRIPTLOC = os.path.dirname(__file__)
TESTBASELINE = os.path.join(SCRIPTLOC, 'baseline', 'baseline.csv')
baseline = pandas.DataFrame.from_csv(TESTBASELINE)

是否有一种非样板的方法告诉pytest从脚本的根目录开始查找,而不是通过SCRIPTLOC获取绝对位置?



1> 小智..:

如果您只是在寻找pytest的等效项__file__,则可以将request固定装置添加到测试中并使用request.fspath

从文档:

class FixtureRequest
    ...
    fspath
        the file system path of the test module which collected this test.

因此,一个示例可能看起来像:

def test_script_loc(request):
    baseline = os.path.join(request.fspath.dirname, 'baseline', 'baseline.cvs')
    print(baseline)

但是,如果您想避免样板,那么这样做将不会带来任何好处(假设我理解您所说的“非样板”的意思)

就个人而言,我认为使用夹具更明确(在pytest习惯用法内),但是我更喜欢将请求操作包装在另一个夹具中,因此我知道我只是通过查看测试的方法签名来捕获样本测试数据。

这是我使用的代码片段(已修改为匹配您的问题,我使用子目录层次结构):

# in conftest.py
import pytest

@pytest.fixture(scope="module")
def script_loc(request):
    '''Return the directory of the currently running test script'''

    # uses .join instead of .dirname so we get a LocalPath object instead of
    # a string. LocalPath.join calls normpath for us when joining the path
    return request.fspath.join('..') 

和样品用法

def test_script_loc(script_loc):
    baseline = script_loc.join('baseline/baseline.cvs')
    print(baseline)

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有