我是 djangounittest
和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
在另一个文件中。通过让它们成为我的输入参数,它使我的测试用例变得紧凑。
他们unittest
比使用 Django 有什么好处pytest
吗?
更新:2017 年 7 月 1 日
更新:2017
年 7 月 5 日更新:2017 年 9 月 1 日更新:2017
年 9 月 29 日
更新:2017 年 12 月 26 日
- 当夹具在测试中发生突变时,Pytest 可以减少您的问题。我
testcases
单独通过了该运行,但是在彻底运行时失败了。 - 如果发生错误,Pytest 将向您显示断言输出。Django unittest 没有。我必须自己设置断点并调查错误。
- Pytest 允许您使用带有简单装饰器的真实数据库。Django 测试没有。您必须为您的工作创建自己的自定义命令
- Pytest 是通用的。作为一个通用的,这意味着你在 Django 之外的项目中工作感觉很舒服。例如,当您必须构建诸如 Flask 之类的微服务 + 诸如 APScheduler、PyRad 等 3rd 方时。我提到这一点是因为我的后端生活使用 Django 50% 其余的 is
Python
和 infra - Pytest 没有使用多重继承来创建我的固定装置
- 当与运行程序一起使用时, Unittest
gitlab-ci
优于 Pytest,Docker
无需任何额外配置即可顺利执行。问题