[PYTHON] Django-Test

Einführung

Hier erklären wir die Tests in Django.

Testziel

Das Testziel ist die folgende einfache Blog-Artikellistenseite.

project/urls.py


from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('admin/', admin.site.urls),
    path('blog/', include('blog.urls')
]

blog/urls.py


from django.urls import path

from . import views

app_name = 'blog'
urlpatterns = [
    path('list/', views.PostList.as_view(), name='post_list')
]

blog/models.py


from django.db import models


class Post(models.model):
    title = models.CharField('Titel', max_length=100)
    body = models.TextField('Text')
    created_at = models.DateTimeField('Erstellungsdatum und -zeit', auto_now_add=True)
    updated_at = models.DateTimeField('Datum und Uhrzeit aktualisieren', auto_now=True)

    class Meta:
        ordering = ('-created_at')
    
    def __str__(self):
        return self.title

blog/views.py


from django.views import generic


class PostList(generic.ListView):
    model = Post
    template_name = 'blog/post_list.html'

blog/post_list.html


{% for post in post_list %}
<h1>{{ post.title }}</h1>
<p>{{ post.body }}</p>
{% endfor %}

Erstellen einer Factory-Klasse

Sie können factory_boy verwenden, um einen Testdatensatz zu erstellen.

blog/tests.py


import factory
from django.utils import timezone

from .models import Post


class PostFactory(factory.django.DjangoModelFactory):
    title = 'Sample post'
    body = 'This is a sample text.'
    created_at = timezone.now()
    updated_at = timezone.now()

    class Meta:
        model = Post

Hier erstellen wir "PostFactory" als Fabrikklasse für das "Post" -Modell. Sie können Standardwerte wie "Titel" und "Text" festlegen.

Test erstellen

blog/tests.py


from django.urls import reverse
from django.test import TestCase


class PostListTests(TestCase):

    def test_get_queryset(self):
        post_1 = PostFactory(
            title='First Post',
            body='This is the first post.'
        )
        post_2 = PostFactory(
            title='Second Post',
            body='This is the second post.'
        )
        res = self.client.get(reverse('blog:post_list'))
        self.assertTemplateUsed(res, 'blog/post_list.html')
        self.assertQuerysetEqual(
            res.context['post_list'],
            ['<Post: Second Post>', '<Post: First Post>']
        )
        self.assertEqual(
            res.context['post_list'][0].body,
            'This is the first post.'
        )
        self.assertEqual(
            res.context['post_list'][1].body,
            'This is the second post.'
        )

Erstellen Sie zunächst einen Post-Datensatz mit der oben erstellten PostFactory. Die Antwort beim Zugriff auf die Artikellistenseite wird dann in der Variablen "res" gespeichert. res enthält post_list als den von view erstellten Kontext. Stellen Sie also sicher, dass Sie das erwartete Abfrageset erhalten. In Django-Tests können Sie außerdem "assertTemplateUsed" verwenden, um festzustellen, ob die in "views.py" angegebene HTML-Vorlage verwendet wird.

Führen Sie den Test aus

Geben Sie den folgenden Befehl ein, um den Test auszuführen:

$ python manage.py test (blog)

Wenn Sie am Ende den Anwendungsnamen eingeben, wird der Test nur in der angegebenen Anwendung ausgeführt.

Zusammenfassung

Hier habe ich den Test in Django erklärt. Das Testen ist auch wichtig, um Fehler im Verlauf der Entwicklung zu vermeiden.

Recommended Posts

Django-Test
Prüfung
Django
[Django] Standard-Anmeldeformular testen [TDD]
Testgetriebene Entwicklung mit Django Teil 3
Django-Update
Django Note 4
Testgetriebene Entwicklung mit Django Teil 4
Django Memorandum
Jack Bella Test
Django-Suche
Django Installation
Testgetriebene Entwicklung mit Django Teil 6
Locust-Load-Test
Django Zusammenfassung
Testgetriebene Entwicklung mit Django Teil 2
Post-Test
Django # 2 (Vorlage)
Django Note 5
Django zum Anfassen
Berühre Django
Django Memo
Django Zusammenfassung
Django Grundlagen
Django Shoho
Django Grundeinstellungen
Django + Docker
Django Glossar
Django Installation
Django: Referenzen
Django Note 1
Django Note 3
Testgetriebene Entwicklung mit Django Teil 1
Django Note 2
Testgetriebene Entwicklung mit Django Teil 5
Django-Start
Django Memo
Django NullCharField
Django: Testen Sie eine Middleware, die von einer anderen Middleware abhängt
Django Tutorial (Blog App erstellen) ④ --Einheitentest
Django Tutorial Zusammenfassung für Anfänger von Anfängern ⑤ (Test)
Django ~ settings.py edition ~
Django Heroku Deploy 1
Django HTML Vorlage Teil 2
Django Anfrageformular 2
Über den Test
Django-Modell: ManyToManyField
Was ist Django? .. ..
Django funktionsbasierte Ansicht
Python Django Tutorial (5)
Django Lernnotiz
Python Django Tutorial (2)
[Django] as_view () Notizen
Erste Django Challenge
Django Makemigarations schafft Superuser
Django verwandte Websites
Internationalisierung mit Django
Django Versionsprüfung
Django-Tabellenerstellung
Django startete Teil 4