gpt4 book ai didi

python - pytest:使用固定装置对基于类的测试进行参数化(pytest-django)

转载 作者:行者123 更新时间:2023-12-04 10:39:33 27 4
gpt4 key购买 nike

我正在尝试像这样参数化我的类测试:

@pytest.mark.parametrize('current_user', ["test_profile_premium", "test_profile_free"], indirect=True)
class TestFeedItemsType:

@pytest.fixture(autouse=True)
def setup(self, current_user, logged_in_client, dummy_object):
self.client = logged_in_client
self.test_profile = current_user
self.object = dummy_object

但是,我遇到了错误:

fixture 'current_user' not found

test_profile_premiumtest_profile_free 都是 conftest.py 中现有的有效装置。我需要这个基于类的套件中的所有功能(测试)都针对 test_profile_premiumtest_profile_free 运行。

最佳答案

您不能将固定装置作为参数化参数传递,请参阅 open issue #349了解详情。作为解决方法,在您的示例中,您可以引入一个 current_user fixture ,它根据 fixture 名称执行 fixture 选择:

import pytest


@pytest.fixture
def current_user(request):
return request.getfixturevalue(request.param)


@pytest.fixture
def test_profile_premium():
return "premiumfizz"


@pytest.fixture
def test_profile_free():
return "freefizz"


@pytest.mark.parametrize('current_user', ["test_profile_premium", "test_profile_free"], indirect=True)
class TestFeedItemsType:

@pytest.fixture(autouse=True)
def setup(self, current_user):
self.test_profile = current_user

def test_spam(self):
assert self.test_profile in ("premiumfizz", "freefizz")

def test_eggs(self):
assert self.test_profile in ("premiumfizz", "freefizz")

运行这个例子会产生四个测试:

test_spam.py::TestFeedItemsType::test_spam[test_profile_premium] PASSED
test_spam.py::TestFeedItemsType::test_spam[test_profile_free] PASSED
test_spam.py::TestFeedItemsType::test_eggs[test_profile_premium] PASSED
test_spam.py::TestFeedItemsType::test_eggs[test_profile_free] PASSED

关于python - pytest:使用固定装置对基于类的测试进行参数化(pytest-django),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59994657/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com