[英]Django test VS pytest
我是 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'))
这是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'))
pytest
的好处是fixture
在另一个文件中。 通过让它们成为我的输入参数,它使我的测试用例变得紧凑。
使用 Django unittest
比使用pytest
有什么好处吗?
更新:2017 年 7 月 1 日
更新:2017 年 7 月 5 日
更新:2017 年 9 月 1 日
更新:2017 年 9 月 29 日
更新:2017 年 12 月 26 日
testcases
,但在彻底运行时失败了。Python
及以下Docker
作为跑步者使用时,Unittest 在gitlab-ci
上的优势超过 Pytest,无需任何额外配置即可顺利执行。 问题我一生都在使用Django测试,现在我正在使用Py.test。 我同意pytest比django本身更清洁。
pytest的好处是另一个文件夹具。 它让我的测试用例变得紧凑,让它们成为我的输入参数。
在Django unittest中你仍然可以使用属性fixtures = ['appname/fixtures/my_fixture.json']
在其他文件中使用fixtures = ['appname/fixtures/my_fixture.json']
如果发生错误,Pytest将显示断言输出。 Django unittest没有。 我必须自己设置断点并调查错误。
您是否尝试在python manage.py tests
更改--verbose
参数?
一些提示:
有一个名为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 }] }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.