단원 테스트를 Django 프로젝트에 추가하는 방법

단원 테스트를 Django 프로젝트에 추가하는 방법

저자는 Open Internet/Free Speech Fund 계획의 일부로 기부를 받기로 했다.

소개


처음으로 완벽하게 운영되고 오류가 없는 사이트를 만들 수는 거의 없다.따라서 웹 응용 프로그램을 테스트해서 이 오류를 발견하고 주동적으로 처리해야 합니다.테스트의 효율을 높이기 위해 일반적으로 테스트를 웹 응용 프로그램의 특정 기능을 테스트하는 단원으로 분해한다.이런 방법을 단원 테스트라고 부른다.그것은 테스트가 다른 부분이 아니라 프로젝트의 작은 부분(단원)에 집중되기 때문에 오류를 검출하는 것을 더욱 쉽게 한다.
테스트 사이트는 HTTP 요청 처리, 폼 검증, 템플릿 구현 등 여러 논리 층으로 구성되어 있기 때문에 복잡한 작업일 수 있다.그러나 Write for DOnations 웹 응용 프로그램을 틈새 없이 테스트할 수 있는 도구를 제공했다.Django에서 테스트를 작성하는 가장 좋은 방법은 PythonDjango 모듈을 사용하는 것입니다. 다른 테스트 프레임워크도 사용할 수 있습니다.
이 강좌에서는 Django 프로젝트에 테스트 세트를 설정하고 응용 프로그램의 모델과 보기를 위한 단원 테스트를 작성합니다.이 테스트를 실행하고 그 결과를 분석하며 테스트 실패의 원인을 어떻게 찾는지 배울 것입니다.

선결 조건


이 강좌를 시작하기 전에 다음이 필요합니다.
  • Django가 서버에 설치되어 있으며 프로그래밍 환경이 설정되어 있습니다.이 점을 하려면, 당신은 우리의 unittest 강좌 중의 하나를 따를 수 있습니다.
  • 모델과 뷰를 사용하여 만든 Django 프로젝트입니다.본 강좌에서 우리는 How To Install the Django Web Framework and Set Up a Programming Environment 강좌 시리즈의 항목을 따랐다.
  • 1단계 - Django 어플리케이션에 테스트 키트 추가


    Django의 테스트 세트는 프로젝트의 모든 응용 프로그램의 모든 테스트 용례의 집합입니다.Django 테스트 유틸리티가 가지고 있는 테스트 용례를 발견할 수 있도록 이름test으로 시작하는 스크립트에서 테스트 용례를 작성할 수 있습니다.이 단계에서 테스트 세트에 디렉터리 구조와 파일을 만들고 빈 테스트 용례를 만들 것입니다.
    Django Development 강좌 시리즈를 배우면 blogsite라는 Django 응용 프로그램이 있습니다.
    모든 테스트 스크립트를 저장할 폴더를 만듭니다.먼저 가상 환경을 활성화합니다.
    1. cd ~/my_blog_app
    2. . env/bin/activate
    그런 다음 blogsitemodels.py 파일을 포함하는 앱 디렉토리로 이동하여 views.py 라는 새 폴더를 만듭니다.
    1. cd ~/my_blog_app/blog/blogsite
    2. mkdir tests
    다음으로 이 폴더를 Python 패키지로 변환하여 파일tests을 추가합니다.
    1. cd ~/my_blog_app/blog/blogsite/tests
    2. touch __init__.py
    이제 테스트 모델에 사용할 파일과 테스트 보기에 사용할 파일을 추가합니다.
    1. touch test_models.py
    2. touch test_views.py
    마지막으로, __init__.py 에서 빈 테스트 용례를 만들 것입니다.가져오기 Django Development 를 사용해서 테스트 용례 클래스의 초클래스로 만들어야 합니다.잠시 후, 이 테스트 용례에 방법을 추가하여 모델의 논리를 테스트할 것입니다.파일 열기test_models.py:
    1. 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 파일에 있는 코드를 살펴보겠습니다.
    1. cd ~/my_blog_app/blog/blogsite
    2. 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로 돌아가십시오.
    1. 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))
    
    이 새로운 방법slugifytest_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 파일을 엽니다.
    1. 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 파일)로 이동합니다.
    1. cd ~/my_blog_app/blog
    다음 작업을 실행합니다.
    1. python manage.py test
    터미널에서 다음과 같은 출력을 볼 수 있습니다.
    Output
    Creating 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이 있는데, 각 점은 통과된 테스트 용례를 대표한다.실패한 테스트를 촉발하기 위해 .. 을 수정합니다.먼저 다음 방법으로 파일을 엽니다.
    1. 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 을 사용하십시오.
    1. python manage.py test
    다음 출력이 표시됩니다.
    Output
    Creating 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 != 404AssertionError 파일에 강조 표시된 코드 행에 나타납니다.
    ~/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 프로젝트에 테스트 세트를 만들고 테스트 모델과 보기 논리에 테스트 용례를 추가하여 테스트를 어떻게 실행하는지 배우고 테스트 출력을 분석했습니다.다음으로, .Fmodels.py 에 없는 Python 코드에 대한 새로운 테스트 스크립트를 만들 수 있습니다.
    다음은 Django를 사용하여 웹 사이트를 구축하고 테스트하는 데 도움이 될 수 있는 몇 가지 글입니다.
  • Django Documentation Testing Responses page 파일
  • 강좌 시리즈Django Unit Tests
  • 당신은 또한 우리의 Scaling Django을 보고 더 많은 강좌와 항목을 이해할 수 있습니다.