[PYTHON] Testgetriebene Entwicklung mit Django Teil 1

Testgetriebene Entwicklung mit Django 1

Warum tust du das

Ich habe Django alleine mit den Ressourcen meiner Vorgänger studiert, einschließlich des Django Girls Tutorial, aber ich konnte keine japanischen Ressourcen finden, um testgetriebene Entwicklung in Django zu lernen. Ich möchte es als Referenz für Leute wie mich veröffentlichen, die das Programmieren selbst vorantreiben.

Dies ist ein Datensatz zum Verständnis von Test Driven Development (TDD) in Django. Mir fehlt noch das Studium, daher würde ich mich freuen, wenn Sie auf Fehler hinweisen könnten. ..

Diesmal [** Testgetriebene Entwicklung mit Python: Befolgen Sie die Testziege: Verwenden von Django, Selen und JavaScript (englische Ausgabe) 2. Ausgabe **](https://www.amazon.co.jp/dp/B074HXXXLS/ Wir werden mit dem Lernen fortfahren, das auf ref = dp-kindle-redirect basiert? _ Encoding = UTF8 & btkr = 1).

In dieser Referenz führen wir Funktionstests mit der Django 1.1-Serie und FireFox durch. Dieses Mal werden wir jedoch Funktionstests mit der Djagno 3-Serie und Google Chrome durchführen. Ich habe auch einige persönliche Änderungen vorgenommen (z. B. das Ändern des Projektnamens in Config), aber es gibt keine wesentlichen Änderungen.

Machen wir das.

Aufbau einer virtuellen Umgebung

#Projektverzeichnis erstellen
$ mkdir django-TDD
$ cd djagno-TDD

#Erstellen einer virtuellen Umgebung
$ python -m venv venv-tdd

#Virtuelle Umgebung aktivieren
$ venv-tdd/Script/activate

#Aktualisieren Sie die Pip- und Setup-Tools
$ python -m pip install --upgrade pip setuptools

#Installieren Sie Django und Selen
$ pip install django selenium
    installing collected packages: sqlparse, pytz, asgiref, django, urllib3, selenium
    Successfully installed asgiref-3.2.3 django-3.0.2 pytz-2019.3 selenium-3.141.0 sqlparse-0.3.0 urllib3-1.25.7

Laden Sie den Google Chrome-Webtreiber herunter, da wir die Funktionalität mit Google Chrome testen werden.

Die aktuelle Umgebung ist die Google Chrome-Version: 79.0.3945.130 (Official Build) (64-Bit) Google Chrome-Treiber heruntergeladen ChromeDriver 79.0.3945.16.

Part1. The Basics of TDD and Django

Chapter1. Getting Django Set Up Using a Functional Test

Wenn Sie sich für die Erstellung einer Website entscheiden, müssen Sie zunächst das Webframework installieren und die Einstellungen neu schreiben. Schreiben Sie in TDD jedoch immer zuerst den Test.

Der Entwicklungszyklus von TDD besteht darin, Folgendes gründlich umzusetzen.

Das erste, was wir bestätigen möchten, ist ...

Verwenden Sie dazu Selenium, um den Browser automatisch zu bedienen.

Schreiben Sie einen Funktionstest

Erstellen Sie function_tests.py.

# django-tdd/functional_tests.py

from selenium import webdriver

browser = webdriver.Chrome()
browser.get('http://localhost:8000')

assert 'Django' in browser.title

Dies ist der erste Funktionstest. Mach das.

$ python functional_tests.py

    Traceback (most recent call last):
    File "functional_tests.py", line 8, in <module>
        assert 'Django' in browser.title
    AssertionError

Sie können sehen, dass der Browser automatisch von Selen gestartet wird, aber eine Fehlerseite angezeigt wird. Sie können sehen, dass der Assertion Error auch in der Shell angezeigt wird. Ich möchte das lösen.

Starten Sie Django

Starten Sie das Djagno-Projekt und starten Sie den Entwicklungsserver, um diesen Funktionstest zu löschen.

$ django-admin startproject config .

$ python manage.py runserver

    Watching for file changes with StatReloader
    Performing system checks...

    System check identified no issues (0 silenced).

    You have 17 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
    Run 'python manage.py migrate' to apply them.
    January 19, 2020 - 15:36:31
    Django version 3.0.2, using settings 'config.settings'
    Starting development server at http://127.0.0.1:8000/
    Quit the server with CTRL-BREAK.

Sie können sehen, dass Django (3.0.2) den Entwicklungsserver "http: //127.0.0.1: 8000 /" mit config.settings gestartet hat.

Starten Sie nun eine weitere Shell, um die virtuelle Umgebung zu aktivieren, und führen Sie dann den Funktionstest aus.

$ python manage.py functional_tests.py

    DevTools listening on ws://127.0.0.1:54716/devtools/browser/6ddf9ee8-7b35-41f5-8700-d740ef24c8dc

Infolgedessen wurde der AssertionError nicht angezeigt und der Fehler wurde nicht im Browser angezeigt.

Wir haben Funktionstests durchgeführt und bestätigt, dass Djagno funktioniert! !! !! !!

Registrieren Sie sich beim Git-Repository

TDD fährt mit dem Versionskontrollsystem fort.

$ git init .

$ type nul > .gitignore

Verwalten Sie Dinge, die Sie nicht mit git verwalten möchten, mit .gitignore.

#.gitignore
db.sqlite3
debug.log
/venv-tdd

Nachdem Sie einen Gitignore erstellt haben, fügen Sie Ihre Änderungen hinzu.

$ git add .
$ git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   .gitignore
        new file:   .vscode/settings.json
        new file:   README.md
        new file:   README_Part1.md
        new file:   chromedriver.exe
        new file:   config/__init__.py
        new file:   config/__pycache__/__init__.cpython-37.pyc
        new file:   config/__pycache__/settings.cpython-37.pyc
        new file:   config/__pycache__/urls.cpython-37.pyc
        new file:   config/__pycache__/wsgi.cpython-37.pyc
        new file:   config/asgi.py
        new file:   config/settings.py
        new file:   config/urls.py
        new file:   config/wsgi.py
        new file:   functional_tests.py
        new file:   manage.py

Hier wurden den Änderungen * hoge.pyc * und * __ pycache __ * Ordner hinzugefügt, die ich nicht ändern möchte. Ich möchte dies ausschließen.

$ git rm -r --cached config/__pycache__ .vscode

Bearbeiten Sie .gitignore

# .gitignore
db.sqlite3
debug.log
/venv-tdd
.vscode
__pycache__
*.pyc
$ git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   .gitignore
        new file:   README.md
        new file:   README_Part1.md
        new file:   chromedriver.exe
        new file:   config/__init__.py
        new file:   config/asgi.py
        new file:   config/settings.py
        new file:   config/urls.py
        new file:   config/wsgi.py
        new file:   functional_tests.py
        new file:   manage.py

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   .gitignore
        modified:   README_Part1.md

Der Git-Status wurde wie vorgesehen festgelegt. Verpflichte dich damit.

$ git add .

Hier möchte ich vor dem Festschreiben nicht SECRET_KEY usw. in Djagnos config / settings.py festschreiben.

$ git rm -r --cached config/settings.py
$ git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   .gitignore
        new file:   README.md
        new file:   README_Part1.md
        new file:   chromedriver.exe
        new file:   config/__init__.py
        new file:   config/asgi.py
        new file:   config/urls.py
        new file:   config/wsgi.py
        new file:   functional_tests.py
        new file:   manage.py

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   README_Part1.md

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        config/settings.py

Verwenden Sie python-dotenv, um zu vermeiden, dass Systemvariablen in einer .env-Datei zusammengeschrieben werden.

$ pip install python-dotenv

Ändern Sie config / settings.py

# config/settings.py
"""
Django settings for config project.

Generated by 'django-admin startproject' using Django 3.0.2.

For more information on this file, see
https://docs.djangoproject.com/en/3.0/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/3.0/ref/settings/
"""

import os
from dotenv import load_dotenv  #hinzufügen

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
PROJECT_NAME = os.path.basename(BASE_DIR)  #hinzufügen

# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.0/howto/deployment/checklist/

# .Laden von env
load_dotenv(os.path.join(BASE_DIR, '.env'))  #hinzufügen

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = os.getenv('SECRET_KEY')  #Veränderung

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = ['*']  #Veränderung


# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

ROOT_URLCONF = 'config.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],  #Veränderung
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

WSGI_APPLICATION = 'config.wsgi.application'


# Database
# https://docs.djangoproject.com/en/3.0/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}


# Password validation
# https://docs.djangoproject.com/en/3.0/ref/settings/#auth-password-validators

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]


# Internationalization
# https://docs.djangoproject.com/en/3.0/topics/i18n/

LANGUAGE_CODE = 'ja'  #Veränderung

TIME_ZONE = 'Asia/Tokyo'  #Veränderung

USE_I18N = True

USE_L10N = True

USE_TZ = True


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.0/howto/static-files/

STATIC_URL = '/static/'

Nehmen Sie Änderungen in diesem Status vor und legen Sie fest.

$ type nul > .env

SECRET_KEY zu .env hinzugefügt.

# .env
SECRET_KEY = 'your_secret_key'

Fügen Sie .env zu .gitignore hinzu.

db.sqlite3
debug.log
/venv-tdd
.vscode
__pycache__
*.pyc
.env  #hinzufügen

Änderungen aufzeichnen.

$ git add .
$ git status
$ git commit -m "first commit!"

Kapitel 1 Zusammenfassung

Ich habe das Django-Projekt mit dem Schreiben von Funktionstests gestartet. Ich werde in diesem Zustand weiterlesen.

Recommended Posts

Testgetriebene Entwicklung mit Django Teil 3
Testgetriebene Entwicklung mit Django Teil 4
Testgetriebene Entwicklung mit Django Teil 6
Testgetriebene Entwicklung mit Django Teil 2
Testgetriebene Entwicklung mit Django Teil 1
Testgetriebene Entwicklung mit Django Teil 5
Testgetriebenes Entwicklungsstart mit PySide & Pytest
Entwicklungsverdauung mit Django
Django-Test
[Test Driven Development (TDD)] Kapitel 21 Zusammenfassung
App-Entwicklung mit SQLite mit Django (PTVS)
Django startete Teil 1
Erleben Sie Teil I "Multinationale Währung" des Buches "Test Driven Development" mit Python
Internationalisierung mit Django
Django startete Teil 4
Erste Django-Entwicklung
[Python] Erstellen Sie mit Docker eine Django-Entwicklungsumgebung
Django Erste Schritte Teil 2 mit dem Eclipse Plugin (PyDev)
Erstellen Sie mit der Doker Toolbox eine Django-Entwicklungsumgebung
Authentifizieren Sie Google mit Django
Django 1.11 wurde mit Python3.6 gestartet
Primzahlbeurteilung mit Python
Laden Sie Dateien mit Django hoch
Mit Codetest stärken ⑦
PDF mit Django ausgeben
Markdown-Ausgabe mit Django
Verwenden Sie Gentelella mit Django
Twitter OAuth mit Django
Mit Codetest stärken ⑤
Mit Codetest stärken ④
Primzahlbeurteilung mit Python
Mail mit Django senden
Sandkasten mit neo4j Teil 10
Webanwendung erstellt mit Python3.4 + Django (Teil.1 Umgebungskonstruktion)
Datei-Upload mit Django
Verwenden Sie WENIGER mit Django
Verwenden Sie MySQL mit Django
Mit Codetest stärken ①
Erstellen Sie eine Entwicklungsumgebung mit Poetry Django Docker Pycharm
[Memo] Django-Entwicklungsumgebung
Artikel, die die Systementwicklung mit Django (Python) ermöglichen _Einführung
Django ab heute
Erste Schritte mit Django 2
Mit Codetest stärken ⑧
Mit Codetest stärken ⑨
Tutorial für die testgetriebene Entwicklung (TDD) mit Flask-2-Dekorateuren
Erstellen Sie mit Docker eine Django-Entwicklungsumgebung! (Docker-compose / Django / postgreSQL / nginx)
[Memo] Erstellen Sie mit Docker eine Entwicklungsumgebung für Django + Nuxt.js
[Django] Erstellen Sie mit PyCharm schnell eine Entwicklungsumgebung für Django-Container (Docker)
Erstellen Sie mit Django eine Bulletin-Board-App von Grund auf neu. (Teil 2)
Erstellen Sie mit Django eine Bulletin-Board-App von Grund auf neu. (Teil 3)
Tutorial für die testgetriebene Entwicklung (TDD) mit Flask-1 Test Client Edition
Bildverarbeitung mit Python (Teil 2)
Python mit freeCodeCamp Teil1 studieren
Django von vorne anfangen (Teil: 2)
Angrenzende Bilder mit Python Teil 1