리셋 되지 말자

[TDD with Python] - 1 본문

TDD

[TDD with Python] - 1

kyeongjun-dev 2021. 5. 17. 14:46

참고 사이트

https://wikidocs.net/book/1379

세상엔 공개된 좋은 자료가 참 많다. 찾기가 힘들고 검증이 필요하지만... 오픈소스 최고다

 

테스트 환경

OS : ubuntu 18.04

Python :

$ python3 --version
Python 3.6.9

 

가상환경 활성화

우분투는 venv를 쓰기 위해서 별도로 설치가 필요. 설치한다

sudo apt-get install python3-venv

 

가상환경을 생성한다. 이름은 아무거나 해도 상관없음.

python3 -m venv test-django

 

가상환경을 활성화 한다.

source test-django/bin/activate

 

필요한 패키지 설치

pip을 업그레이드 해준다.

pip install --upgrade pip
$ pip --version
pip 21.1.1 from /home/ubuntu/바탕화면/Python/test-django/lib/python3.6/site-packages/pip (python 3.6)

 

django, selenium을 설치해준다

pip install django selenium
$ pip freeze
asgiref==3.3.4
Django==3.2.3
pkg-resources==0.0.0
pytz==2021.1
selenium==3.141.0
sqlparse==0.4.1
typing-extensions==3.10.0.0
urllib3==1.26.4

 

Geckodriver 설치

우분투라면 기본적으로 인터넷 브라우저가 FireFox로 설치되어 있다. 그러므로 Geckodriver를 설치한다. 크롬이라면 크롬드라이버를 설치하면 된다. 다운로드 여기서 geckodriver-v0.29.1-linux64.tar.gz를 다운받았다.

다운로드 받고 압축을 풀어주면 된다.

 

그리고 geckodriver파일이 있는 해당 경로를 PATH에 등록해준다.

export PATH=$PATH:/home/ubuntu/다운로드/geckodriver

 

Django 프로젝트 생성

적당히 Django 프로젝트를 생성할 디렉토리 superlists를 만들고, 해당 디렉토리로 이동한 뒤 django-admin startproject 명령어로 프로젝트를 생성한다.

mkdir superlists
cd superlists/
django-admin startproject config .
$ ls
config  manage.py

 

기능 테스트 작성 및 테스트

superlists 디렉토리 위치에서 function_tests.py 파일을 작성한다.

- function_tests.py

from selenium import webdriver

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

assert 'Django' in browser.title

 

위 코드의 내용은 다음과 같다:

  • Selenium webdriver를 구동하여 실제로 파이어폭스 브라우저를 띄운다.
  • 로컬 컴퓨터에서 웹 페이지가 열리는지 확인한다.
  • 열린 웹 페이지의 title에서 Django 문자열이 있는지 확인한다.

 

작성한 코드를 실행한다.

$ python function_tests.py 
Traceback (most recent call last):
  File "function_tests.py", line 4, in <module>
    browser.get('http://localhost:8000')
  File "/home/ubuntu/바탕화면/Python/test-django/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 333, in get
    self.execute(Command.GET, {'url': url})
  File "/home/ubuntu/바탕화면/Python/test-django/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "/home/ubuntu/바탕화면/Python/test-django/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: Reached error page: about:neterror?e=connectionFailure&u=http%3A//localhost%3A8000/&c=UTF-8&d=Firefox%EA%B0%80%20localhost%3A8000%20%EC%84%9C%EB%B2%84%EC%97%90%20%EC%97%B0%EA%B2%B0%ED%95%A0%20%EC%88%98%20%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4.

 

웹브라우저가 뜨면서 오류가 발생한다.

 

webserver를 실행시킨 뒤, 새로운 터미널창을 열고 다시 테스트 파일을 실행한다.

$ python manage.py runserver

 

다시 에러가 발생한다.

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

 

브라우저 창을 보면, 타이틀 부분에 'Django'가 없다. 테스트 파일을 수정한다.

 

from selenium import webdriver

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

assert 'The install worked successful' in browser.title

 

다시 테스트 파일을 실행한다.

$ python function_tests.py

 

아무런 오류없이 테스트를 통과한 것을 확인할 수 있다.

 

추가

코드를 아래와 같이 수정하면, browser의 title이 실제로 뭐였는지 까지 알 수 있다.

from selenium import webdriver

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

assert 'Django' in browser.title, "Browser tile was : " + browser.title

 

$ python function_tests.py 
Traceback (most recent call last):
  File "function_tests.py", line 6, in <module>
    assert 'Django' in browser.title, "Browser tile was : " + browser.title
AssertionError: Browser tile was : The install worked successfully! Congratulations!

'TDD' 카테고리의 다른 글

[Selenium] webdriver.dispose() .close() .quit() 차이  (0) 2021.06.22
docker django selenium 테스트  (0) 2021.06.18
[TDD with selenium] Django Selenium test 학습  (0) 2021.06.16
TDD 테스트 종류  (0) 2021.05.17
[TDD with Python] - 2  (0) 2021.05.17
Comments