如何在conftest.py

时间:2018-05-14 11:51:58

标签: python testing pytest

假设在这个例子中,如何在使用pytest执行测试套件时访问conftest fixture中的相应config.json文件。

$ pwd

/家庭/用户/回购/主

$ pytest testcases / project_(1/2)/ test_suite_(1/2).py。

目录结构:

  • 主要 -
    • conftest.py#conftest file for my fixture
    • 测试用例
      • PROJECT_1 (包含这些文件 - test_suite_1.py,config.json)
      • project_2 (包含这些文件 - test_suite_2.py,config.json)
    • 工作流
      • libs

1 个答案:

答案 0 :(得分:1)

您可以通过keys = (first.keys + second.keys).uniq keys.each do |key| first[key] ||= nil second[key] ||= nil end 访问当前执行模块的路径,并构建相对于它的request.node.fspath路径。 config.sjon是由request提供的固定装置。这是基于您提供的目录结构的示例。

pytest

如果您将上面的代码复制到# main/conftest.py import json import pathlib import pytest @pytest.fixture(autouse=True) def read_config(request): file = pathlib.Path(request.node.fspath) print('current test file:', file) config = file.with_name('config.json') print('current config file:', config) with config.open() as fp: contents = json.load(fp) print('config contents:', contents) 并使用conftest.py运行测试,则应获得与此类似的输出:

-s

使用已解析的配置值

您可以通过将其返回到fixture中并使用fixture作为测试参数之一来访问已解析的JSON数据。我稍微修改了上面的夹具,因此返回解析后的数据并删除了$ pytest -sv =============================== test session starts =============================== platform linux -- Python 3.6.5, pytest-3.4.1, py-1.5.3, pluggy-0.6.0 -- /data/gentoo64/usr/bin/python3.6 cachedir: .pytest_cache rootdir: /data/gentoo64/tmp/so-50329629, inifile: collected 2 items main/project1/test_one.py::test_spam current file: /data/gentoo64/tmp/so-50329629/main/project1/test_one.py current config: /data/gentoo64/tmp/so-50329629/main/project1/config.json config contents: {'name': 'spam'} PASSED main/project2/test_two.py::test_eggs current file: /data/gentoo64/tmp/so-50329629/main/project2/test_two.py current config: /data/gentoo64/tmp/so-50329629/main/project2/config.json config contents: {'name': 'eggs'} PASSED ============================= 2 passed in 0.08 seconds ============================

autouse=True

现在只需在测试参数中使用fixture名称,该值将是fixture返回的值。例如:

@pytest.fixture
def json_config(request):
    file = pathlib.Path(request.node.fspath.strpath)
    config = file.with_name('config.json')
    with config.open() as fp:
        return json.load(fp)