【发布时间】:2017-06-15 03:27:28
【问题描述】:
我是 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 日
- Pytest 减少了测试中夹具发生变异时的问题。
我得到了单独运行的
testcases,但运行时失败 彻底。 - 如果发生错误,Pytest 将向您显示断言输出。姜戈 单元测试没有。我必须自己设置断点 调查错误。
- Pytest 允许您使用带有简单装饰器的真实数据库。姜戈 测试没有。您必须为 你的工作
- Pytest 是通用的。作为一个通用的,这意味着你感觉很舒服
与 Django 之外的项目一起工作。例如,当你必须
构建诸如 Flask 之类的微服务 + 诸如 APScheduler 之类的第 3 方,
PyRad,...等等。我提到这一点是因为我的后端生活使用 Django 50%
其余的是
Python和 infra - Pytest 未使用多重继承来创建我的固定装置
- 当与
Docker一起使用时,Unittest 在gitlab-ci上优于 Pytest,无需任何额外配置即可顺利执行。 problem
【问题讨论】:
-
Django 测试确实支持固定装置。只是说...
-
@spectras 你好。如果我的信息已过时,请更正。我真的很想知道并为正确的情况选择正确的工具。现在我都根据项目负责人来做这两个。如果我领导我使用
pytest。其他人使用Django test我确实遵循它。因此,我在这里开始问题并讨论。 -
我在
setUp()方法中创建了fixture,并通过继承重用。你们说的是同一个灯具吗? -
不,我说的是Django fixtures
-
感谢您的回复。我没有使用它,因为我无法与
mommy一起使用它
标签: python django pytest django-unittest pytest-django