
단원 테스트를 Django 프로젝트에 추가하는 방법
2022-06-01 last update
20 minutes reading Django Python Frameworks Applications Development Programming Project Python저자는 Open Internet/Free Speech Fund 계획의 일부로 기부를 받기로 했다.
처음으로 완벽하게 운영되고 오류가 없는 사이트를 만들 수는 거의 없다.따라서 웹 응용 프로그램을 테스트해서 이 오류를 발견하고 주동적으로 처리해야 합니다.테스트의 효율을 높이기 위해 일반적으로 테스트를 웹 응용 프로그램의 특정 기능을 테스트하는 단원으로 분해한다.이런 방법을 단원 테스트라고 부른다.그것은 테스트가 다른 부분이 아니라 프로젝트의 작은 부분(단원)에 집중되기 때문에 오류를 검출하는 것을 더욱 쉽게 한다.
테스트 사이트는 HTTP 요청 처리, 폼 검증, 템플릿 구현 등 여러 논리 층으로 구성되어 있기 때문에 복잡한 작업일 수 있다.그러나 Write for DOnations 웹 응용 프로그램을 틈새 없이 테스트할 수 있는 도구를 제공했다.Django에서 테스트를 작성하는 가장 좋은 방법은 PythonDjango 모듈을 사용하는 것입니다. 다른 테스트 프레임워크도 사용할 수 있습니다.
이 강좌에서는 Django 프로젝트에 테스트 세트를 설정하고 응용 프로그램의 모델과 보기를 위한 단원 테스트를 작성합니다.이 테스트를 실행하고 그 결과를 분석하며 테스트 실패의 원인을 어떻게 찾는지 배울 것입니다.
이 강좌를 시작하기 전에 다음이 필요합니다. Django가 서버에 설치되어 있으며 프로그래밍 환경이 설정되어 있습니다.이 점을 하려면, 당신은 우리의 모델과 뷰를 사용하여 만든 Django 프로젝트입니다.본 강좌에서 우리는 How To Install the Django Web Framework and Set Up a Programming Environment 강좌 시리즈의 항목을 따랐다.
Django의 테스트 세트는 프로젝트의 모든 응용 프로그램의 모든 테스트 용례의 집합입니다.Django 테스트 유틸리티가 가지고 있는 테스트 용례를 발견할 수 있도록 이름
Django Development 강좌 시리즈를 배우면
모든 테스트 스크립트를 저장할 폴더를 만듭니다.먼저 가상 환경을 활성화합니다.
~/my\u blog\u app/blog/blogsite/tests/test\u 모델.회사 명
이 단계에서
먼저
~/my\u blog\u app/blog/blogsite/models.회사 명
파일을 닫습니다.
테스트를 수행하려면
~/my\u blog\u app/blog/blogsite/tests/test\u 모델.회사 명
저장 및 종료
이것은 테스트할 수 있는 예이다.프로젝트에 논리를 추가할수록 테스트해야 할 내용이 많아집니다.
이 단계에서 Django 테스트 클라이언트의 테스트 보기를 사용하는 테스트 용례를 작성합니다.
~/my\u blog\u app/blog/blogsite/tests/test\u 보기.회사 명
상태 코드 외에도 test client에서 테스트할 수 있는 테스트 클라이언트 응답의 다른 속성을 읽을 수 있습니다.
이 단계에서 색인 페이지를 보여주는 보기가 정상적으로 작동할 수 있는지 테스트하는 테스트 용례를 만들었습니다.테스트 세트에 현재 두 개의 테스트 용례가 있습니다.다음 단계에서는 결과를 보기 위해 실행할 것입니다.
현재 프로젝트를 위한 테스트를 마쳤습니다. 이 테스트를 실행하고 결과를 볼 때입니다.테스트를 실행하려면
~/my\u blog\u app/blog/blogsite/tests/test\u 보기.회사 명
~/my\u blog\u app/blog/blogsite/tests/test\u 보기.회사 명
이 강좌에서 Django 프로젝트에 테스트 세트를 만들고 테스트 모델과 보기 논리에 테스트 용례를 추가하여 테스트를 어떻게 실행하는지 배우고 테스트 출력을 분석했습니다.다음으로,
다음은 Django를 사용하여 웹 사이트를 구축하고 테스트하는 데 도움이 될 수 있는 몇 가지 글입니다.Django Documentation Testing Responses page 파일 강좌 시리즈Django Unit Tests 당신은 또한 우리의 Scaling Django을 보고 더 많은 강좌와 항목을 이해할 수 있습니다.
소개
처음으로 완벽하게 운영되고 오류가 없는 사이트를 만들 수는 거의 없다.따라서 웹 응용 프로그램을 테스트해서 이 오류를 발견하고 주동적으로 처리해야 합니다.테스트의 효율을 높이기 위해 일반적으로 테스트를 웹 응용 프로그램의 특정 기능을 테스트하는 단원으로 분해한다.이런 방법을 단원 테스트라고 부른다.그것은 테스트가 다른 부분이 아니라 프로젝트의 작은 부분(단원)에 집중되기 때문에 오류를 검출하는 것을 더욱 쉽게 한다.
테스트 사이트는 HTTP 요청 처리, 폼 검증, 템플릿 구현 등 여러 논리 층으로 구성되어 있기 때문에 복잡한 작업일 수 있다.그러나 Write for DOnations 웹 응용 프로그램을 틈새 없이 테스트할 수 있는 도구를 제공했다.Django에서 테스트를 작성하는 가장 좋은 방법은 PythonDjango 모듈을 사용하는 것입니다. 다른 테스트 프레임워크도 사용할 수 있습니다.
이 강좌에서는 Django 프로젝트에 테스트 세트를 설정하고 응용 프로그램의 모델과 보기를 위한 단원 테스트를 작성합니다.이 테스트를 실행하고 그 결과를 분석하며 테스트 실패의 원인을 어떻게 찾는지 배울 것입니다.
선결 조건
이 강좌를 시작하기 전에 다음이 필요합니다.
unittest
강좌 중의 하나를 따를 수 있습니다.1단계 - Django 어플리케이션에 테스트 키트 추가
Django의 테스트 세트는 프로젝트의 모든 응용 프로그램의 모든 테스트 용례의 집합입니다.Django 테스트 유틸리티가 가지고 있는 테스트 용례를 발견할 수 있도록 이름
test
으로 시작하는 스크립트에서 테스트 용례를 작성할 수 있습니다.이 단계에서 테스트 세트에 디렉터리 구조와 파일을 만들고 빈 테스트 용례를 만들 것입니다.Django Development 강좌 시리즈를 배우면
blogsite
라는 Django 응용 프로그램이 있습니다.모든 테스트 스크립트를 저장할 폴더를 만듭니다.먼저 가상 환경을 활성화합니다.
- cd ~/my_blog_app
- . env/bin/activate
그런 다음 blogsite
및 models.py
파일을 포함하는 앱 디렉토리로 이동하여 views.py
라는 새 폴더를 만듭니다.- cd ~/my_blog_app/blog/blogsite
- mkdir tests
다음으로 이 폴더를 Python 패키지로 변환하여 파일tests
을 추가합니다.- cd ~/my_blog_app/blog/blogsite/tests
- touch __init__.py
이제 테스트 모델에 사용할 파일과 테스트 보기에 사용할 파일을 추가합니다.- touch test_models.py
- touch test_views.py
마지막으로, __init__.py
에서 빈 테스트 용례를 만들 것입니다.가져오기 Django Development 를 사용해서 테스트 용례 클래스의 초클래스로 만들어야 합니다.잠시 후, 이 테스트 용례에 방법을 추가하여 모델의 논리를 테스트할 것입니다.파일 열기test_models.py
:- nano test_models.py
파일에 다음 코드를 추가합니다.~/my\u blog\u app/blog/blogsite/tests/test\u 모델.회사 명
from django.test import TestCase
class ModelsTestCase(TestCase):
pass
테스트 키트를 TestCase
응용 프로그램에 추가했습니다.다음은 여기에 생성된 빈 모형 테스트 용례에 대한 상세한 정보를 기입합니다.2단계 - 파이썬 코드 테스트
이 단계에서
test_models.py
파일에 작성된 코드의 논리를 테스트합니다.특히, 호출할 때 정확한 문장 제목을 만들 수 있도록 blogsite
모델의 models.py
방법을 테스트할 것입니다.먼저
save
모델의 Post
방법의 models.py
파일에 있는 코드를 살펴보겠습니다.- cd ~/my_blog_app/blog/blogsite
- nano models.py
다음 항목이 표시됩니다.~/my\u blog\u app/blog/blogsite/models.회사 명
class Post(models.Model):
...
def save(self, *args, **kwargs):
if not self.slug:
self.slug = slugify(self.title)
super(Post, self).save(*args, **kwargs)
...
저장할 게시물에 slug 값이 있는지 확인하고, 없으면 save
호출해서 slug 값을 만드는 것을 볼 수 있습니다.게시물을 저장할 때 실제로 slug를 만들었는지 확인하기 위해 테스트할 수 있는 논리적 형식입니다.파일을 닫습니다.
테스트를 수행하려면
Post
로 돌아가십시오.- nano test_models.py
다음 내용으로 업데이트하여 강조 표시된 부분을 추가합니다.~/my\u blog\u app/blog/blogsite/tests/test\u 모델.회사 명
from django.test import TestCase
from django.template.defaultfilters import slugify
from blogsite.models import Post
class ModelsTestCase(TestCase):
def test_post_has_slug(self):
"""Posts are given slugs correctly when saving"""
post = Post.objects.create(title="My first post")
post.author = "John Doe"
post.save()
self.assertEqual(post.slug, slugify(post.title))
이 새로운 방법slugify
은 test_models.py
이라는 제목의 새로운 게시물을 만들고 게시물의 작성자에게 게시물을 저장합니다.이후 PythonDjango test_post_has_slug
class 모듈의 "My first post"
방법을 사용하여post의 slug가 정확한지 확인합니다.assertEqual
방법은 그에게 전달된 두 파라미터가 unittest
연산자가 확정한 것과 같은지 확인하고 같지 않으면 오류를 일으킨다.저장 및 종료
assertEqual
.이것은 테스트할 수 있는 예이다.프로젝트에 논리를 추가할수록 테스트해야 할 내용이 많아집니다.
"=="
방법에 더 많은 논리를 추가하거나 test_models.py
모델에 새로운 방법을 만들려면 여기에 더 많은 테스트를 추가해야 합니다.save
방법에 추가하거나 새로운 테스트 방법을 만들 수 있지만, 이름은 Post
로 시작해야 합니다.test_post_has_slug
모델을 위한 테스트 용례를 성공적으로 만들었습니다. 이 테스트 용례에서 저장된 후에 세그먼트를 정확하게 만들었다고 단언합니다.다음 단계에서, 보기 테스트를 위한 테스트 용례를 작성할 것입니다.3단계 - Django의 테스트 클라이언트 사용
이 단계에서 Django 테스트 클라이언트의 테스트 보기를 사용하는 테스트 용례를 작성합니다.
test
는 가상 웹 브라우저 역할을 하는 Python 클래스로 사용자와 같은 방식으로 보기를 테스트하고 Django 응용 프로그램과 상호작용을 할 수 있습니다.테스트 방법의 Post
을 참고하여 테스트 클라이언트에 접근할 수 있습니다.예를 들어, self.client
에서 테스트 용례를 만듭니다.먼저 test_views.py
파일을 엽니다.- nano test_views.py
그런 다음 다음을 추가합니다.~/my\u blog\u app/blog/blogsite/tests/test\u 보기.회사 명
from django.test import TestCase
class ViewsTestCase(TestCase):
def test_index_loads_properly(self):
"""The index page loads properly"""
response = self.client.get('your_server_ip:8000')
self.assertEqual(response.status_code, 200)
test_views.py
에는 Django 테스트 클라이언트가 웹 사이트에 액세스하는 인덱스 페이지 ViewsTestCase
를 사용하는 test_index_loads_properly
방법이 포함되어 있습니다. 이 방법 http://your_server_ip:8000
은 현재 사용 중인 서버의 IP 주소입니다.그리고 테스트 방법은 응답의 상태 코드가 your_server_ip
인지 확인합니다. 이것은 페이지 응답에 오류가 없다는 것을 의미합니다.따라서 사용자가 방문할 때 오류 없이 응답할 수 있음을 확신할 수 있습니다.상태 코드 외에도 test client에서 테스트할 수 있는 테스트 클라이언트 응답의 다른 속성을 읽을 수 있습니다.
이 단계에서 색인 페이지를 보여주는 보기가 정상적으로 작동할 수 있는지 테스트하는 테스트 용례를 만들었습니다.테스트 세트에 현재 두 개의 테스트 용례가 있습니다.다음 단계에서는 결과를 보기 위해 실행할 것입니다.
단계 4 - 테스트 실행
현재 프로젝트를 위한 테스트를 마쳤습니다. 이 테스트를 실행하고 결과를 볼 때입니다.테스트를 실행하려면
200
폴더(응용 프로그램을 포함하는 blog
파일)로 이동합니다.- cd ~/my_blog_app/blog
다음 작업을 실행합니다.- python manage.py test
터미널에서 다음과 같은 출력을 볼 수 있습니다.OutputCreating test database for alias 'default'...
System check identified no issues (0 silenced).
..
----------------------------------------------------------------------
Ran 2 tests in 0.007s
OK
Destroying test database for alias 'default'...
이 출력에는 두 개의 점manage.py
이 있는데, 각 점은 통과된 테스트 용례를 대표한다.실패한 테스트를 촉발하기 위해 ..
을 수정합니다.먼저 다음 방법으로 파일을 엽니다.- nano test_views.py
그런 다음 강조 표시된 코드를 다음과 같이 변경합니다.~/my\u blog\u app/blog/blogsite/tests/test\u 보기.회사 명
from django.test import TestCase
class ViewsTestCase(TestCase):
def test_index_loads_properly(self):
"""The index page loads properly"""
response = self.client.get('your_server_ip:8000')
self.assertEqual(response.status_code, 404)
여기서 상태 코드를 test_views.py
에서 200
로 변경했습니다.디렉터리에서 테스트를 다시 실행하려면 404
을 사용하십시오.- python manage.py test
다음 출력이 표시됩니다.OutputCreating test database for alias 'default'...
System check identified no issues (0 silenced).
.F
======================================================================
FAIL: test_index_loads_properly (blogsite.tests.test_views.ViewsTestCase)
The index page loads properly
----------------------------------------------------------------------
Traceback (most recent call last):
File "~/my_blog_app/blog/blogsite/tests/test_views.py", line 8, in test_index_loads_properly
self.assertEqual(response.status_code, 404)
AssertionError: 200 != 404
----------------------------------------------------------------------
Ran 2 tests in 0.007s
FAILED (failures=1)
Destroying test database for alias 'default'...
실패한 스크립트, 테스트 용례, 방법을 설명하는 실패 메시지가 있습니다.이 경우 상태 코드가 manage.py
와 같지 않고 메시지 404
를 표시하는 고장 원인도 알려 줍니다.여기에서 AssertionError: 200 != 404
은 AssertionError
파일에 강조 표시된 코드 행에 나타납니다.~/my\u blog\u app/blog/blogsite/tests/test\u 보기.회사 명
from django.test import TestCase
class ViewsTestCase(TestCase):
def test_index_loads_properly(self):
"""The index page loads properly"""
response = self.client.get('your_server_ip:8000')
self.assertEqual(response.status_code, 404)
이것은 응답 상태 코드 (test_views.py
가 예상된 것이 아니라는 것을 알려 줍니다. 200
실패 메시지가 나타나기 전에 두 점404
이 ..
으로 변경되었습니다. 이것은 첫 번째 테스트 용례가 통과되었고 두 번째 테스트 용례가 통과되지 않았음을 나타냅니다.결론
이 강좌에서 Django 프로젝트에 테스트 세트를 만들고 테스트 모델과 보기 논리에 테스트 용례를 추가하여 테스트를 어떻게 실행하는지 배우고 테스트 출력을 분석했습니다.다음으로,
.F
및 models.py
에 없는 Python 코드에 대한 새로운 테스트 스크립트를 만들 수 있습니다.다음은 Django를 사용하여 웹 사이트를 구축하고 테스트하는 데 도움이 될 수 있는 몇 가지 글입니다.