[TDD] Test-Driven Development with Python 1장

SUNGJIN KIM·2022년 6월 25일
0

tdd-with-python

목록 보기
1/7
post-thumbnail

˗ˋˏ♡ˎˊ˗ Django installation using functional tests

  • Django 를 설치하고, Django 가동 및 실행
  • Git commit

Django 설치 및 준비 과정

  • Django 개발 서버 가동 및 웹 페이지 정상 접속
  • Selenium 브라우저 자동화 툴을 이용하여 구현

Django 서버를 가동하기 위해, 가상 환경을 만들어주었다.

python3 -m venv tddenv

이후 해당 가상환경이 정상적으로 잘 구동되는지 확인하였다.

source ./bin/activate

아래 스크린샷과 같이 (가상환경) 이 나오면 정상적으로 구동되었음을 알 수 있다.

가상환경이 구축을 완료했으면, 이후부터는 필요한 것들을 설치해주면 된다.
일단 해당 실습을 하기 위해서 필수적으로 필요한 요소인 selenium 과 Django를 설치해 줌으로써 준비는 완료되었다.

실습 - 코드 실행

functional_test.py

from selenium import webdriver

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

assert 'Django' in browser.title

해당 코드를 실행해보면 아래 스크린샷과 같이 결과가 나온다.
이는 오류가 아니고 아직 Django를 가동하지 않아서 발생하므로 맞는 기대결과

해당 페이지를 보게되었다면, Django 를 가동 및 실행해보면 된다.

django-admin startproject superlists

프로젝트를 생성하게되면, superlists 폴더가 생성되게 된다.
별도의 커맨드라인 창을 열어서 개발 서버를 가동해준다.

python3 manage.py runserver

가동해주면 아래 스크린샷과 같이 노출되게 된다.
그럼 정상적으로 가동되었음을 알 수 있다.

서버를 가동한 상태에서 아까 functional_test.py 를 실행해주면 이전과 다른 페이지가 노출된다.
해당 서버를 열기전에는 테스트 코드 실행 시, AssertionError 가 발생했는데, 현재는 Django 서버 화면이 노출되는 것을 확인하였다.

해당 페이지가 노출된다면 우리가 통과한 첫 번째 테스트가 된다!

Git commit

미리 Git Repository를 생성하여 진행하였기에, 바로 commit 해주면 된다.

중간중간 커밋을 하려고 보니 의미없는 파일들이 들어가있어서, 이는 gitignore를 통해 commit되지 않도록 진행했다.

해당 폴더에 .gitignore 파일을 만든 다음에 아래의 내용을 복붙해주었다.
아래의 페이지에서 python, venv 를 작성하여 가상환경을 구축하는데 필요한 파일들을 추가해주었다.

https://www.toptal.com/developers/gitignore

1일차 실습 내용 :
https://github.com/woonmong712/wm-tdd


마무리

해당 작업을 진행하면서, 애먹었던 상황을 살짝 공유하자면 아래와 같다.

1) import Selenium 에서의 Error 발생

Selenium 을 정상적으로 설치하고 import 하는 과정에서, Error가 발생하여 정상적으로 실행되지 않는 부분을 확인하였다.

가상 환경 생성 후, 설치를 했는데 interpreter 설정이 제대로 되어있지 않아서 발생 된 것으로 보였다.

해당 경로의 interpreter 설정 시 정상적으로 적용되는 것 확인 완료

2) Firefox 가 정상적으로 실행되지 않는 상황

예전에는 Chrome을 통해 selenium 을 공부했기에, Firefox는 설치되어있지 않은 상황이였다.

Firefox를 다운로드 하고, 아래 조치까지 취한 다음에야 정상적으로 기대 결과값을 얻을 수 있었다.

brew install geckodriver

3) AttributeError: module 'html.parser' has no attribute 'HTMLParseError'

실습의 가장 많은 시간을 소모했다고 장담할 수 있는 오류였다.
책 자체가 너무 이전 버전의 python, Django, selenium 버전을 사용하고 있었기에 현재 상황에 맞춰서 환경을 구성하려고 했는데 계속 해당 오류가 발생했다.

Traceback (most recent call last):
  File "/usr/local/bin/django-admin", line 8, in <module>
    sys.exit(execute_from_command_line())
  File "/Library/Python/3.8/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line
    utility.execute()
  File "/Library/Python/3.8/site-packages/django/core/management/__init__.py", line 354, in execute
    django.setup()
  File "/Library/Python/3.8/site-packages/django/__init__.py", line 18, in setup
    from django.utils.log import configure_logging
  File "/Library/Python/3.8/site-packages/django/utils/log.py", line 10, in <module>
    from django.views.debug import ExceptionReporter, get_exception_reporter_filter
  File "/Library/Python/3.8/site-packages/django/views/debug.py", line 10, in <module>
    from django.http import (HttpResponse, HttpResponseServerError,
  File "/Library/Python/3.8/site-packages/django/http/__init__.py", line 4, in <module>
    from django.http.response import (HttpResponse, StreamingHttpResponse,
  File "/Library/Python/3.8/site-packages/django/http/response.py", line 13, in <module>
    from django.core.serializers.json import DjangoJSONEncoder
  File "/Library/Python/3.8/site-packages/django/core/serializers/__init__.py", line 23, in <module>
    from django.core.serializers.base import SerializerDoesNotExist
  File "/Library/Python/3.8/site-packages/django/core/serializers/base.py", line 6, in <module>
    from django.db import models
  File "/Library/Python/3.8/site-packages/django/db/models/__init__.py", line 6, in <module>
    from django.db.models.query import Q, QuerySet, Prefetch  # NOQA
  File "/Library/Python/3.8/site-packages/django/db/models/query.py", line 13, in <module>
    from django.db.models.fields import AutoField, Empty
  File "/Library/Python/3.8/site-packages/django/db/models/fields/__init__.py", line 18, in <module>
    from django import forms
  File "/Library/Python/3.8/site-packages/django/forms/__init__.py", line 6, in <module>
    from django.forms.fields import *  # NOQA
  File "/Library/Python/3.8/site-packages/django/forms/fields.py", line 18, in <module>
    from django.forms.utils import from_current_timezone, to_current_timezone
  File "/Library/Python/3.8/site-packages/django/forms/utils.py", line 15, in <module>
    from django.utils.html import format_html, format_html_join, escape
  File "/Library/Python/3.8/site-packages/django/utils/html.py", line 16, in <module>
    from .html_parser import HTMLParser, HTMLParseError
  File "/Library/Python/3.8/site-packages/django/utils/html_parser.py", line 12, in <module>
    HTMLParseError = _html_parser.HTMLParseError
AttributeError: module 'html.parser' has no attribute 'HTMLParseError'

해당 오류를 해결하고자 구글링을 조금 많이 해봤는데, 확인해보니 위 오류는 Django 버전이 1.7 대인 경우에 발생한다고 하더라.
(python 버전과 django 버전 관련된 문제로 확인되었다.)

해당 문제의 해결법은 python 버전 업그레이드와 django 버전 업그레이드 뿐으로 보여서 가상환경 내 버전을 계속 맞춰서 진행했으나 django 프로젝트를 실행할때마다 해당 오류가 발생했다.

django-admin startproject superlists

깔끔하게 삭제하고 처음부터 다시 가상환경을 구축하는 것으로써 해당 문제를 해결하였다. 해당 부분은 책을 따로 참고했다기보다는 구글링을 통해 자료를 모아서 진행했다.

이 과정에서 원래 사용하던 python 버전이 3.8.9 였는데 3.9.13 으로 올려주었다.

이후에 진행하니 드디어 해당 에러가 발생하지 않고 정상적으로 장고 프로젝트가 생성되었다...(감격)

참고 도서 : 클린 코드를 위한 테스트 주도 개발 (비제이퍼블릭,2015)

profile
#QA #woonmong

0개의 댓글