在pytest中,我的测试脚本将计算出的结果与通过基线加载的基线结果进行比较
SCRIPTLOC = os.path.dirname(__file__) TESTBASELINE = os.path.join(SCRIPTLOC, 'baseline', 'baseline.csv') baseline = pandas.DataFrame.from_csv(TESTBASELINE)
是否有一种非样板的方法告诉pytest从脚本的根目录开始查找,而不是通过SCRIPTLOC获取绝对位置?
如果您只是在寻找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)