J'ai étudié Django seul en utilisant les ressources de mes prédécesseurs, y compris le didacticiel Django Girls, mais je n'ai trouvé aucune ressource japonaise pour apprendre le développement piloté par les tests dans Django. Je voudrais l'afficher comme référence pour des gens comme moi qui font progresser la programmation par eux-mêmes.
Il s'agit d'un record pour comprendre le développement piloté par les tests (TDD) dans Django. Je manque encore d’études, alors j’apprécierais que vous signaliez des erreurs. ..
Cette fois [** Test-Driven Development with Python: Obey the Testing Goat: Using Django, Selenium, and JavaScript (English Edition) 2nd Edition **](https://www.amazon.co.jp/dp/B074HXXXLS/ Nous allons procéder à l'apprentissage basé sur ref = dp-kindle-redirect? _ Encoding = UTF8 & btkr = 1).
Dans cette référence, nous effectuons des tests fonctionnels avec la série Django 1.1 et FireFox, mais cette fois nous allons réaliser des tests fonctionnels sur la série Djagno 3 et Google Chrome. J'ai également apporté quelques modifications personnelles (comme changer le nom du projet en Config), mais il n'y a pas de changements majeurs.
Faisons le.
#Créer un répertoire de projet
$ mkdir django-TDD
$ cd djagno-TDD
#Créer un environnement virtuel
$ python -m venv venv-tdd
#Activer l'environnement virtuel
$ venv-tdd/Script/activate
#Mettre à niveau les outils de pip et de configuration
$ python -m pip install --upgrade pip setuptools
#Installez Django et Selenium
$ 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
Téléchargez le pilote Web Google Chrome car nous testerons la fonctionnalité à l'aide de Google Chrome.
L'environnement actuel est la version Google Chrome: 79.0.3945.130 (version officielle) (64 bits), donc Pilote Google Chrome téléchargé ChromeDriver 79.0.3945.16.
Part1. The Basics of TDD and Django
Chapter1. Getting Django Set Up Using a Functional Test
Lorsque vous décidez de créer un site Web, la première étape habituelle consiste à installer le framework Web et à réécrire les paramètres, et ainsi de suite, mais dans TDD, écrivez toujours le test en premier.
Le cycle de développement de TDD consiste à mettre en œuvre à fond ce qui suit.
La première chose que nous voulons confirmer est ...
Liste de contrôle --Django est installé et fonctionne correctement.
Méthode de confirmation
Vous pouvez vérifier le serveur de développement Django localement.
Pour ce faire, utilisez Selenium pour faire fonctionner automatiquement le navigateur.
Créez Functional_tests.py.
# django-tdd/functional_tests.py
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('http://localhost:8000')
assert 'Django' in browser.title
C'est le premier test fonctionnel. Faites ceci.
$ python functional_tests.py
Traceback (most recent call last):
File "functional_tests.py", line 8, in <module>
assert 'Django' in browser.title
AssertionError
Vous pouvez voir que le navigateur est automatiquement lancé par sélénium, mais une page d'erreur s'affiche. Vous pouvez voir que l'erreur d'assertion est également affichée sur le shell. Je veux résoudre ça.
Démarrez le projet Djagno et démarrez le serveur de développement pour effacer ce test fonctionnel.
$ 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.
Vous pouvez voir que Django (3.0.2) a démarré le serveur de développement http: //127.0.0.1: 8000 /
en utilisant config.settings.
Lancez maintenant un autre shell pour activer l'environnement virtuel, puis exécutez le test fonctionnel.
$ python manage.py functional_tests.py
DevTools listening on ws://127.0.0.1:54716/devtools/browser/6ddf9ee8-7b35-41f5-8700-d740ef24c8dc
Par conséquent, AssertionError ne s'affichait pas et l'erreur ne s'affichait pas dans le navigateur.
Nous avons effectué des tests fonctionnels et confirmé que Djagno fonctionnait! !! !! !!
TDD procédera au système de contrôle de version.
$ git init .
$ type nul > .gitignore
Gérez les choses que vous ne voulez pas gérer avec git avec .gitignore.
#.gitignore
db.sqlite3
debug.log
/venv-tdd
Maintenant que vous avez créé un .gitignore, ajoutez vos modifications.
$ 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
Ici, les dossiers * hoge.pyc * et * __ pycache __ * auxquels je ne souhaite pas apporter de modifications ont été ajoutés aux modifications. Je veux exclure cela.
$ git rm -r --cached config/__pycache__ .vscode
Modifier .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
Le statut git a été corrigé comme prévu. Engagez-vous avec cela.
$ git add .
Ici, je ne veux pas valider SECRET_KEY etc. dans le config / settings.py de Djagno avant de valider.
$ 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
Utilisez python-dotenv pour éviter de valider les variables système ensemble dans un fichier .env.
$ pip install python-dotenv
Modifier 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 #ajouter à
# 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) #ajouter à
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.0/howto/deployment/checklist/
# .Chargement env
load_dotenv(os.path.join(BASE_DIR, '.env')) #ajouter à
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = os.getenv('SECRET_KEY') #Changement
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
ALLOWED_HOSTS = ['*'] #Changement
# 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')], #Changement
'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' #Changement
TIME_ZONE = 'Asia/Tokyo' #Changement
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/'
Apportez des modifications à cet état et validez.
$ type nul > .env
SECRET_KEY ajouté à .env.
# .env
SECRET_KEY = 'your_secret_key'
Ajoutez .env à .gitignore.
db.sqlite3
debug.log
/venv-tdd
.vscode
__pycache__
*.pyc
.env #ajouter à
Enregistrer les modifications.
$ git add .
$ git status
$ git commit -m "first commit!"
J'ai démarré le projet Django en écrivant des tests fonctionnels. Je continuerai à lire dans cette condition.
Recommended Posts