繁体   English   中英

Pytest-为 mark.parametrize 使用生成器

[英]Pytest- use a generator for mark.parametrize

我有一个带有非常大集合的 mongo db,我需要使用 Pytest 运行测试。 我正在尝试使用 mark.parametrize 检测器的通常路线,但使用 pymongo.cursor Cursor object:

def get_all_data():
    return db["collection"].find({}) # query to retrieve all documents from the collection

@pytest.mark.parametrize("doc", get_all_data())
def test_1(doc):
    assert doc["val"] == 1
    ....

此代码的问题是 pytest 在运行测试之前的收集阶段自动将生成器转换为列表。 我不想要这个,因为有两个原因:

  1. 由于集合非常大,这非常慢。
  2. 堆栈溢出 - 无论如何都没有足够的 RAM 来加载所有这些数据。

这意味着我不能使用 mark.parametrize,但是我如何仍然使用生成器一次运行测试 1,而不是将所有内容立即加载到 memory 中? Pytest 甚至可能吗?

我可以想到这个解决方法 - 编写一个夹具将生成器传递给单个测试。 然后使用pytest-check在同一个测试中单独check每个条目(因为我猜你需要单独assert每个条目并继续,即使某些条目失败)。

@pytest.fixture
def get_all_data():
    yield db["collection"].find({})

def test_1(get_all_data):
    for each in get_all_data:
        check.is_(each["val"], 1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM