我是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
有什么好处吗?
更新:1July2017
更新:5July2017
更新:1Sep2017
更新:29Sep2017
更新:26Dec2017
testcases
单独运行,但运行时失败
彻底。Python
和infra gitlab-ci
作为跑步者时,Unittest利用Docker
优先于Pytest,无需任何额外配置即可顺利执行。 problem 答案 0 :(得分:1)
我一生都在使用Django测试,现在我正在使用Py.test。我同意pytest比django本身更清洁。
pytest的好处是另一个文件夹具。它让我的测试用例变得紧凑,让它们成为我的输入参数。
在Django unittest中,您仍然可以使用属性fixtures = ['appname/fixtures/my_fixture.json']
如果发生错误,Pytest将显示断言输出。 Django unittest没有。我必须自己设置断点并调查错误。
您是否尝试更改--verbose
上的python manage.py tests
参数?
一些提示:
有一个名为pytest-django
的软件包可以帮助您集成和使用django和pytest。
我认为如果使用类,则不需要使用factory = APIRequestFactory()
,测试方法本身就有一个名为client
的参数,它是python的接口{{1}模块来访问你的观点。
requests