2016-04-06 9 views
7

मैं pytest के साथ शुरू कर रहा हूँ। मैंने pytest कॉन्फ़िगर किया है, वैसे भी मैं Django विशिष्ट परीक्षण पर pytest के साथ एक संसाधन नहीं मिला। मैं pytest_django के साथ मॉडल का परीक्षण कैसे करूं?pytest के साथ Django मॉडल का परीक्षण कैसे करें?

मैं पहले से ही

how do I efficiently test this Django model?

मुझे पता है कि एक ही परीक्षण py.test साथ लिखा जा सकता है चाहता हूँ एक unittesting पर सवाल, कहा है?

मॉडल और नीचे दिए गए परीक्षणों के नीचे जोड़कर।

परीक्षण के अंतर्गत मॉडल है,

class User(AbstractBaseUser, PermissionsMixin): 
    username = models.CharField(max_length=25, unique=True, error_messages={ 
     'unique': 'The username is taken' 
    }) 
    first_name = models.CharField(max_length=60, blank=True, null=True) 
    last_name = models.CharField(max_length=60, blank=True, null=True) 
    email = models.EmailField(unique=True, db_index=True, error_messages={ 
     'unique': 'This email id is already registered!' 
    }) 

    is_active = models.BooleanField(default=True) 
    is_staff = models.BooleanField(default=False) 

    date_joined = models.DateTimeField(auto_now_add=True) 

    USERNAME_FIELD = 'email' 
    REQUIRED_FIELDS = ['username',] 


    objects = UserManager() 

    def get_full_name(self): 
     return ' '.join([self.first_name, self.last_name]) 

    def get_short_name(self): 
     return self.email 

    def __unicode__(self): 
     return self.username 

और unittest लिखा,

class SettingsTest(TestCase):  
    def test_account_is_configured(self): 
     self.assertTrue('accounts' in INSTALLED_APPS) 
     self.assertTrue('accounts.User' == AUTH_USER_MODEL) 


class UserTest(TestCase): 
    def setUp(self): 
     self.username = "testuser" 
     self.email = "[email protected]" 
     self.first_name = "Test" 
     self.last_name = "User" 
     self.password = "z" 

     self.test_user = User.objects.create_user(
      username=self.username, 
      email=self.email, 
      first_name=self.first_name, 
      last_name=self.last_name 
     ) 

    def test_create_user(self): 
     self.assertIsInstance(self.test_user, User) 

    def test_default_user_is_active(self): 
     self.assertTrue(self.test_user.is_active) 

    def test_default_user_is_staff(self): 
     self.assertFalse(self.test_user.is_staff) 

    def test_default_user_is_superuser(self): 
     self.assertFalse(self.test_user.is_superuser) 

    def test_get_full_name(self): 
     self.assertEqual('Test User', self.test_user.get_full_name()) 

    def test_get_short_name(self): 
     self.assertEqual(self.email, self.test_user.get_short_name()) 

    def test_unicode(self): 
     self.assertEqual(self.username, self.test_user.__unicode__()) 

किसी भी जानकारी के लिए धन्यवाद। https://pytest-django.readthedocs.org/en/latest/tutorial.html

सेटअप और pytest.ini में परिवर्तन का वर्णन यहां::

उत्तर

1

pytest अजगर unittest.py शैली परीक्षण चलाने के लिए समर्थन हासिल है। इसका मतलब है कि सबसे अजीब-शैली वाली परियोजनाओं का उपयोग करने के लिए नवीनतम सुविधाओं का उपयोग करना है। कंक्रीटली, pytest स्वचालित रूप से परीक्षण फ़ाइलों में unittest.TestCase subclasses और उनके परीक्षण विधियों को इकट्ठा करेगा। यह ठेठ सेटअप/टियरडाउन विधियों का आह्वान करेगा और आम तौर पर पायस्टेस्ट का उपयोग करके चलाने के लिए लिखे गए परीक्षण सूट को एकजुट करने के लिए लिखा जाएगा।

दिए गए परीक्षणों को बिना किसी संशोधन के py.test के साथ परीक्षण किया जा सकता है, हालांकि py.test परीक्षणों को और अधिक पाइथनिक बनाता है।

class SettingsTest(TestCase):  
    def test_account_is_configured(self): 
     assert 'accounts' in INSTALLED_APPS 
     assert 'accounts.User' == AUTH_USER_MODEL 


class UserTest(TestCase): 
    def setUp(self): 
     self.username = "testuser" 
     self.email = "[email protected]" 
     self.first_name = "Test" 
     self.last_name = "User" 
     self.password = "z" 

     self.test_user = User.objects.create_user(
      username=self.username, 
      email=self.email, 
      first_name=self.first_name, 
      last_name=self.last_name 
     ) 

    def test_create_user(self): 
     assert isinstance(self.test_user, User) 

    def test_default_user_is_active(self): 
     assert self.test_user.is_active 

    def test_default_user_is_staff(self): 
     assert not self.test_user.is_staff 

    def test_default_user_is_superuser(self): 
     assert not self.test_user.is_superuser 

    def test_get_full_name(self): 
     assert self.test_user.get_full_name() == 'Test User' 

    def test_get_short_name(self): 
     assert self.test_user.get_short_name() == self.email 

    def test_unicode(self): 
     assert self.test_user.__unicode__() == self.username 

रूप @Sid उल्लेख किया है, आप django.test.TestCase का उपयोग किए बिना डेटाबेस जब परीक्षण चलाने का उपयोग करने की @pytest.mark.django_db मार्कर (डेकोरेटर) का उपयोग कर सकते हैं,

4

आप इस प्लगइन है कि Django के साथ pytest एकीकृत उपयोग कर सकते हैं http://www.johnmcostaiii.net/2013/django-projects-to-django-apps-converting-the-unit-tests/

आप स्लाइड 57 से शुरू होने वाले अपने उदाहरण यहाँ मिलेगा। यह डेक दृश्यों के साथ-साथ मॉडलों और मॉडलों का परीक्षण करने के लिए विशिष्ट सेटिंग्स के परीक्षण में उपयोगी होगा: https://speakerdeck.com/pelme/testing-django-applications-with-py-dot-test-europython-2013

विशेष रूप से @ pytest.mark.django_db सहायक डॉकू देखें यहां बताया गया: http://pytest-django.readthedocs.org/en/latest/helpers.html

ऊपर दिए गए डेक में वर्णित परीक्षण में डीबी एक्सेस की अनुमति देने के लिए एक उदाहरण यहां कॉपी किया गया है। Mark.django_db के बिना परीक्षण विफल हो जाएगा।

import pytest 
@pytest.mark.django_db 
def test_user_count(): 
    assert User.objects.count() == 0 
संबंधित मुद्दे