[PYTHON] Développement piloté par les tests avec Django Partie 1

Développement piloté par les tests avec Django 1

Pourquoi fais-tu cela

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.

Construire un environnement virtuel

#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 ...

Pour ce faire, utilisez Selenium pour faire fonctionner automatiquement le navigateur.

Rédiger un test fonctionnel

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 Django

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! !! !! !!

S'inscrire avec le référentiel Git

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!"

Résumé du chapitre 1

J'ai démarré le projet Django en écrivant des tests fonctionnels. Je continuerai à lire dans cette condition.

Recommended Posts

Développement piloté par les tests avec Django Partie 3
Développement piloté par les tests avec Django Partie 4
Développement piloté par les tests avec Django Partie 6
Développement piloté par les tests avec Django Partie 2
Développement piloté par les tests avec Django Partie 1
Développement piloté par les tests avec Django Partie 5
Démarrage du développement piloté par les tests avec PySide & Pytest
Résumé du développement avec Django
Test Django
[Test Driven Development (TDD)] Chapitre 21 Résumé
Développement d'applications à l'aide de SQLite avec Django (PTVS)
Django a commencé la partie 1
Découvrez la partie I «Monnaie multinationale» du livre «Test Driven Development» avec Python
Internationalisation avec Django
Django a commencé la partie 4
Premier développement Django
[Python] Créer un environnement de développement Django avec Docker
Django Getting Started Part 2 avec eclipse Plugin (PyDev)
Créer un environnement de développement Django à l'aide de Doker Toolbox
Authentifier Google avec Django
Django 1.11 a démarré avec Python3.6
Jugement des nombres premiers avec Python
Télécharger des fichiers avec Django
Renforcez avec le test de code ⑦
Sortie PDF avec Django
Renforcez avec le test de code ③
Sortie Markdown avec Django
Utiliser Gentelella avec Django
Twitter OAuth avec Django
Renforcez avec le test de code ⑤
Renforcez avec le test de code ④
Jugement des nombres premiers avec python
Envoyer des e-mails avec Django
bac à sable avec neo4j partie 10
Application Web réalisée avec Python3.4 + Django (Construction de l'environnement Part.1)
Téléchargement de fichiers avec django
Utilisez LESS avec Django
Utiliser MySQL avec Django
Renforcez avec le test de code ①
Créez un environnement de développement avec Poetry Django Docker Pycharm
[Memo] Environnement de développement Django
Articles permettant le développement de systèmes avec Django (Python) _Introduction
Django à partir d'aujourd'hui
Premiers pas avec Django 2
Renforcez avec le test de code ⑧
Renforcez avec le test de code ⑨
Tutoriel pour faire du développement piloté par les tests (TDD) avec Flask-2 Decorators
Créez un environnement de développement Django avec Docker! (Docker-compose / Django / postgreSQL / nginx)
[Memo] Construire un environnement de développement pour Django + Nuxt.js avec Docker
[Django] Créez rapidement un environnement de développement de conteneur Django (Docker) avec PyCharm
Créez une application de tableau d'affichage à partir de zéro avec Django. (Partie 2)
Créez une application de tableau d'affichage à partir de zéro avec Django. (Partie 3)
Tutoriel pour faire du développement piloté par les tests (TDD) avec Flask-1 Test Client Edition
Traitement d'image avec Python (partie 2)
Etudier Python avec freeCodeCamp part1
Django à partir de zéro (partie: 2)
Images en bordure avec python Partie 1