首页 > 解决方案 > 如何使用 pytest 为类范围的固定装置创建工厂?

问题描述

我有一组装置,它们都做同样的事情,打开一个 json 文件并使其可用于测试类。

@pytest.fixture(scope="class")
def category_params(request):
    base_path = os.path.abspath(..)
    path = os.path.join(base_path, "data/category_params.json")
    with open(path, "r") as fp:
        category_params = json.load(f)
    return category_params

我为测试域中的所有不同测试类别重复此设置。这似乎是我应该为它编写一个函数的东西,但我不确定如何使用 pytest 来完成它。我相信我应该问如何制作夹具工厂,即制作其他夹具对象的 pytest 夹具对象。

标签: pythonpytestfixtures

解决方案


你可以参数化你的fixture函数,这意味着每个测试可以给它一个不同的JSON文件来加载:

import pytest
import os
import json


@pytest.fixture(scope="class")
def json_content(request):
    base_path = os.path.abspath(..)
    path = os.path.join(base_path, request.param)

    with open(path, "r") as fp:
        data = json.load(fp)

    return data


@pytest.mark.parametrize("json_content", ["abc.json"], indirect=True)
def test_a(json_content):
    print(json_content)


@pytest.mark.parametrize("json_content", ["xyz.json"], indirect=True)
def test_b(json_content):
    print(json_content)

注意:测试示例没有显示每个类使用相同的夹具,但这不是演示参数化所必需的。


推荐阅读