You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pytest参数化Fixture传入相同参数时仅执行一次的问题求助

Pytest参数化Fixture传入相同参数时仅执行一次的问题求助

我有一个pytest fixture(它还依赖其他fixture作为参数),用于通过dynamodb客户端插入Order条目:

@pytest.fixture(scope="function")
def function_order(request, dynamodb_client, cleanup_orders):
    delivery_date = "01-01-2022"
    if hasattr(request, "param"):
        delivery_date = request.param.get("delivery_date")

    order_id = f"ORDER-{str(uuid.uuid4())}"

    records = [
        {
            "order_id": {"S": order_id},
            "delivery_date": {"S": delivery_date},
        }
    ]

    for record in records:
        dynamodb_client.put_item(
            TableName="orders",
            Item=record,
        )

    cleanup_orders.append(order_id)

    return {"order_id": order_id, "records": records}

我还定义了一个集成测试,给这个function_order fixture传入参数。这个测试的目的是验证:当尝试给某个配送日期创建第三个订单时,post订单接口应该返回400错误。换句话说,如果12-12-2024这个日期已经有两个订单了,第三次尝试给该日期创建订单就会触发错误请求。

@pytest.mark.parametrize(
    "function_order",
    [
        {"delivery_date": "12-12-2024"},
        {"delivery_date": "12-12-2024"},
    ],
    indirect=True,
)
def test_post_v1_orders_exceeds_order_limit_returns_400(
    request_helper, function_order
):
    delivery_date = "12-12-2024"
    response = request_helper.post(
        "/v1/orders",
        body=order.order_record(delivery_date=delivery_date),
    )
    assert response.status_code == 400
    assert (
        response.json().get("error")
        == f"Order limit exceeded for date: {delivery_date}. Max orders: 2"
    )

现在遇到的问题是:当两次传入相同的配送日期参数时,function_order fixture只执行了一次;但如果传入不同的配送日期,它就会正常执行两次。请问这是为什么?我要怎么让fixture即使在参数相同的情况下也执行两次?


备注:内容来源于stack exchange,提问作者Tony96

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 17:58:03