私はDjango unittest
とpytest
は初めてです。しかし、pytest
テストケースの方が多いと感じ始めました。コンパクトでクリア。
これが私のテストケースです:
class OrderEndpointTest(TestCase):
def setUp(self):
user = User.objects.create_superuser(username='admin', password='password', email='[email protected]')
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
を使用する利点はありますか?
更新:1July2017
更新:2017年7月5日
更新:1Sep2017
更新:2017年9月29日
更新:2017年12月26日
testcases
を取得しましたが、完全に実行すると失敗します。Python
と以下ですDocker
をランナーとして使用すると、追加の構成なしでスムーズに実行できるため、Pytestよりもgitlab-ci
を利用できます。 問題私は生涯Djangoテストを使用してきましたが、現在はPy.testを使用しています。 pytestはDjango自体よりもはるかにクリーンであることに同意します。
Pytestの利点は、別のファイルに固定することです。テストケースを入力パラメータにすることで、テストケースをコンパクトにします。
Django unittestでは、属性_fixtures = ['appname/fixtures/my_fixture.json']
_を使用して、他のファイルのフィクスチャを引き続き使用できます。
エラーが発生した場合、Pytestはアサーション出力を表示します。 Djangounittestはしません。自分でブレークポイントを設定して、エラーを調査する必要があります。
_--verbose
_の_python manage.py tests
_パラメータを変更しようとしましたか?
いくつかのヒント:
Djangoをpytestと統合して使用するのに役立つ_pytest-Django
_というパッケージがあります。
クラスを使用する場合、factory = APIRequestFactory()
を使用する必要はないと思います。テストメソッド自体には、pythonへのインターフェイスであるclient
というパラメータがあります。ビューにアクセスするための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
}]
}
_