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.
#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 ...
Checkliste
Django ist installiert und funktioniert einwandfrei.
Bestätigungsmethode
Sie können den Django-Entwicklungsserver lokal überprüfen.
Verwenden Sie dazu Selenium, um den Browser automatisch zu bedienen.
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 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! !! !! !!
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!"
Ich habe das Django-Projekt mit dem Schreiben von Funktionstests gestartet. Ich werde in diesem Zustand weiterlesen.
Recommended Posts