• Home
  • About
    • Che1's Blog photo

      Che1's Blog

      Che1's Dev Blog

    • Learn More
    • Facebook
    • Instagram
    • Github
    • Steam
    • Youtube
  • Posts
    • All Posts
    • Django
    • Python
    • Front-end
    • Algorithm
    • etc
    • All Tags
  • Projects

[TDD Tutorial] 1-1. 기능 테스트를 통해 장고 시작하기

21 Oct 2017

Reading time ~3 minutes

Test Driven Development

테스트 주도 개발(Test-driven development TDD)은 매우 짧은 개발 사이클을 반복하는 소프트웨어 개발 프로세스 중 하나이다. 우선 개발자는 바라는 향상 또는 새로운 함수를 정의하는 (초기적 결함을 점검하는) 자동화된 테스트 케이스를 작성한다. 그런 후에, 그 케이스를 통과하기 위한 최소한의 양의 코드를 생성한다. 그리고 마지막으로 그 새 코드를 표준에 맞도록 리팩토링한다. 이 기법을 개발했거나 ‘재발견’ 한 것으로 인정되는 Kent Beck은 2003년에 TDD가 단순한 설계를 장려하고 자신감을 불어넣어준다고 말하였다.
출처: 위키피디아

Test Driven Development에서 항상 가장 먼저 해야할 일은 테스트 코드를 짜는 것이다.

먼저 작은 기능을 수행하는 테스트 코드를 짜서 실행해본 다음 테스트 코드를 에러 없이 실행할 수 있도록 실제 앱에 대한 코드를 짜는 것이다.
이 과정을 한 번에 한 단계씩 반복해나가는 것이 TDD의 기초이다.


기능 테스트 (Functional Test)

이 TDD 튜토리얼에서는 장고와 셀레니움을 이용해서 테스트 환경을 구축할 것이다.

먼저 장고가 잘 설치되어 있고, 작업을 시작할 준비가 되어있는지를 확인할 것이다.
이를 확인하기 위해서는 장고의 개발용 서버가 로컬 PC에서 잘 실행되는지를 확인해야한다.
개발용 서버가 잘 실행되는지 확인하기 위해 셀레니움을 사용한다.

프로젝트 파일에 functional_test.py 파일을 만들고 다음의 코드를 입력한다.

# functional_test.py

from selenium import webdriver

browser = webdriver.Chrome('chromewebdriver 경로')
browser.get('http://localhost:8000')

assert 'Django' in browser.title

이 코드는 우리가 만들 장고 프로젝트에 대한 기능 테스트 (Functional Test, FT) 를 수행한다.

Functional Testing

기능 테스트(Functional testing)는 품질 보증 프로세스의 한 과정이며, 테스트 대상 컴포넌트의 명세로부터 도출된 테스트 케이스에 기반하여 수행되는 블랙박스 테스트 기법의 일종이다. 프로그램에 입력을 주고, 그에 해당하는 출력을 조사함으로써 테스트를 수행하게 된다. 이 때 프로그램의 내부 구조에는 거의 관심을 가지지 않는다. (이러한 점이 화이트박스 테스트와 다른 점이다.)[1] 기능 테스트는 대부분의 경우 해당 시스템이 무엇을 하는지를 기술한다.
출처: 위키피디아

이 코드가 하는 일은:

  • 크롬드라이버를 이용해서 Python으로 제어 가능한 크롬 브라우저를 실행한다.
  • 브라우저를 통해 로컬 서버 주소인 http://localhost:8000 에 접속한다.
  • 접속한 페이지의 타이틀에 Django 라는 문자열이 있는지 검사한다.

터미널에서 이 코드를 실행하여 기능 테스트를 실시해본다.

python functional_test.py

실행하면 크롬 브라우저 창이 하나 뜨면서, 아래와 같은 AssertionError 가 발생한다.

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

Django 라는 문자열이 http://localhost:8000 의 페이지 타이틀에 없다는 내용이다.
이 에러를 통해 장고 프로젝트가 로컬 서버에서 작동하지 않는다는 것을 확인할 수 있다.
이제 에러를 확인했으므로, 이 테스트를 통과하기 위한 코드를 작성한다.


장고 프로젝트 시작하기

이 튜토리얼에서는 To-Do list 앱을 만들어볼 것이다. 장고 프로젝트를 시작하기 위해 다음 코드를 입력한다. 프로젝트 이름은 superlists 이다.

django-admin startproject superlists

superlists 라는 폴더가 생성된 것을 확인할 수 있다. 그 폴더로 이동해서 manage.py 가 있는 것을 확인하자.
manage.py 는 장고 개발을 위한 여러가지 편의 기능을 제공한다. 그 중 하나인 개발용 로컬 서버를 실행시켜 보자.

./manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).

You have unapplied migrations; your app may not work properly until they are
applied.
Run 'python manage.py migrate' to apply them.

Django version 1.8, using settings 'superlists.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

서버를 실행시켜 놓은 다음, 새 터미널 창을 열어서 functional_test.py 파일이 있는 경로로 이동해서 기능 테스트를 다시 실행시켜 보자.

python functional_test.py

이번에는 AssertionError 가 뜨지 않으면서, 아래와 같은 페이지가 브라우저에 뜨는 것을 확인 할 수 있다.

처음으로 기능 테스트를 통과한 순간이다.


Tutorial 목차
  • [TDD Tutorial] 1-3. 유닛 테스트
  • [TDD Tutorial] 1-2. 기능 테스트의 확장
  • [TDD Tutorial] 1-1. 기능 테스트를 통해 장고 시작하기
  • [TDD Tutorial] 사전 준비

Reference

Test-Driven Development with Python, Harry Percival: http://chimera.labs.oreilly.com/books/1234000000754/ch01.html



TDDTutorial Share Tweet +1