我正在使用混合器来生成我的模型并使用 pytest 运行它们。我想做的就是只生成我的模型一次,然后用我生成的同一个模型运行几个测试。
这是我想要的:
代码
import pytest
from mixer.backend.django import mixer
from weddings.models import Wedding
@pytest.mark.django_db
class TestProductApi(object):
@pytest.fixture(scope="module")
def wedding(self):
wedding = mixer.blend(
'weddings.Wedding',
)
mixer.cycle(12).blend(
'weddings.Product',
wedding=wedding,
)
mixer.cycle(4).blend(
'weddings.Product',
wedding=wedding,
is_visible=False,
)
mixer.blend(
'weddings.Product',
wedding=wedding,
is_active=False,
)
return wedding
def test_number_one(self, wedding):
print 'running test_number_one'
print 'wedding.id == {}'.format(wedding.id)
print 'Wedding.objects.all().count() == {}'.format(Wedding.objects.all().count())
print 'finished test_number_one'
def test_number_two(self, wedding):
print 'running test_number_two'
print 'wedding.id == {}'.format(wedding.id)
print 'Wedding.objects.all().count() == {}'.format(Wedding.objects.all().count())
print 'finished test_number_two'
输出
tests/weddings/api/test_products.pyTestProductApi.test_number_one 0% running test_number_one
wedding.id == 1
Wedding.objects.all().count() == 1
finished test_number_one
tests/weddings/api/test_products.pyTestProductApi.test_number_one ✓ 50% █████
tests/weddings/api/test_products.pyTestProductApi.test_number_two 50% █████ running test_number_two
wedding.id == 1
Wedding.objects.all().count() == 0
finished test_number_two
我在测试中所做的并不那么重要,但是,我希望它们都使用相同的生成wedding
对象运行。当我运行我的测试时,wedding
每次我创建一个测试时都会创建一个新的。
这是我正在使用的版本:
pytest==2.7.1
pytest-django==2.9.1
Django==1.8.8
mixer==5.3.1
python==2.7.6
编辑 1:我也尝试为我的夹具添加一个范围,但该工作仅适用于第一次测试。如果我在第二个测试中进行查询,则模型不存在,即使您的夹具工作正常。
编辑 2:将 插入scope="module"
夹具并显示运行测试的结果。