Sar*_*rit 12 python django pytest django-unittest pytest-django
我是新来的Django unittest和pytest.但是,我开始觉得pytest测试用例更紧凑,更清晰.
这是我的测试用例:
class OrderEndpointTest(TestCase):
def setUp(self):
user = User.objects.create_superuser(username='admin', password='password', email='pencil@gmail.com')
mommy.make(CarData, _quantity=1)
mommy.make(UserProfile, _quantity=1, user=user)
def test_get_order(self):
mommy.make(Shop, _quantity=1)
mommy.make(Staff, _quantity=1, shop=Shop.objects.first())
mommy.make(Order, _quantity=1, car_info={"color": "Black"}, customer={"name": "Lord Elcolie"},
staff=Staff.objects.first(), shop=Shop.objects.first())
factory = APIRequestFactory()
user = User.objects.get(username='admin')
view = OrderViewSet.as_view({'get': 'list'})
request = factory.get('/api/orders/')
force_authenticate(request, user=user)
response = view(request)
assert 200 == response.status_code
assert 1 == len(response.data.get('results'))
Run Code Online (Sandbox Code Playgroud)
这是pytest版本
def test_get_order(car_data, admin_user, orders):
factory = APIRequestFactory()
user = User.objects.get(username='admin')
view = OrderViewSet.as_view({'get': 'list'})
request = factory.get('/api/orders/')
force_authenticate(request, user=user)
response = view(request)
assert 200 == response.status_code
assert 1 == len(response.data.get('results'))
Run Code Online (Sandbox Code Playgroud)
好处pytest是fixture在另一个文件中.它让我的测试用例变得紧凑,让它们成为我的输入参数.
使用Django unittest比使用它们有什么好处pytest吗?
更新:1July2017
更新:5July2017
更新:1Sep2017
更新:29Sep2017
更新:26Dec2017
testcases了单独通过的运行,但是在彻底运行时失败了.Python和基础gitlab-ciPytest Docker作为跑步者.问题Lua*_*eca 10
我一生都在使用 Django 测试,现在我正在使用 Py.test。我同意 pytest 比 django 本身干净得多。
pytest 的好处是固定在另一个文件中。通过让它们作为我的输入参数,它使我的测试用例变得紧凑。
在 Django unittest 中,您仍然可以通过使用属性来使用其他文件中的装置fixtures = ['appname/fixtures/my_fixture.json']
如果发生错误,Pytest 将向您显示断言输出。Django 单元测试没有。我必须自己设置断点并调查错误。
您是否尝试更改--verboseparam python manage.py tests?
一些提示:
有一个名为 的包pytest-django可以帮助您将 django 与 pytest 集成和使用。
我认为如果你使用类,你就不需要使用factory = APIRequestFactory()测试方法本身,它们有一个名为的参数client,它是 python 模块的接口requests来访问你的视图。
import pytest
from model_mommy import mommy
@pytest.fixture()
def user(db):
return mommy.make(User)
class SiteAPIViewTestSuite:
def test_create_view(self, client, user):
assert Site.objects.count() == 0
post_data = {
'name': 'Stackoverflow'
'url': 'http://stackoverflow.com',
'user_id': user.id,
}
response = client.post(
reverse('sites:create'),
json.dumps(post_data),
content_type='application/json',
)
data = response.json()
assert response.status_code == 201
assert Site.objects.count() == 1
assert data == {
'count': 1,
'next': None,
'previous': None
'results': [{
'pk': 1,
'name': 'Stackoverflow',
'url': 'http://stackoverflow.com',
'user_id': user.id
}]
}
Run Code Online (Sandbox Code Playgroud)