Hướng dẫn Django cho người mới bắt đầu (P6)

Chúng ta lại tiếp tục với một chuỗi series về hướng dẫn Django cho những người mới. Ở Phần 6 này mình sẽ nói thêm về tính năng kiểm thử tự động.

Kiểm thử tự động là gì?

Kiểm tra là các quy trình kiểm tra hoạt động code của bạn. Chúng ta có thể kiểm ở nhiều cấp độ khác nhau và có một số bài kiểm tra có thể áp dụng cho các chi tiết nhỏ, một số bài kiểm tra cho tổng thể. Điều khác biệt trong các bài kiểm tra tự động là công việc kiểm tra được thực hiện bởi hệ thống. Bạn có thể tạo một bộ thử và sau đó thực hiện điều chỉnh với từng ứng dụng của mình.

Vậy tại sao phải tạo các bài kiểm tra? Lý do là kiểm tra như vậy sẽ giúp bạn tiết kiệm thời gian, xác định vấn đề nhanh hơn và còn ngăn chặn lỗi xảy ra, giúp làm việc thuận lợi hơn.

Viết một đoạn kiểm tra:

Giả sử ta xác định 1 lỗi nhỏ trong pollsvà sửa chữa: Đối với Question.was_published_recently() thì phương thức trả về là Truenếu trường Question đã xuất hiện trong ngày gần đây nhất nhưng điều đó sẽ không có nghĩa là với những ngày trong tương lai ( pub_date ) thì Question sẽ xuất hiện. Ở đây ta có thể xác định lỗi bằng cách sử dụng shell để kiểm tra Question có thời gian trong tương lai bằng phương pháp:

    $ python manage.py shell
>>> import datetime
>>> from django.utils import timezone
>>> from polls.models import Question
# tạo bản sao cho Question với pub_date trong 30 ngày tới
>>> future_question = Question(pub_date=timezone.now() + datetime.timedelta(days=30))
>>> # Kiểm tra xem  đã được xuất bản gần đây?
>>> future_question.was_published_recently()
True

Tiếp tục ta tạo một test có thể hiển thị lỗi:

Những gì ở bên trên ta thực hiện trong shell để kiểm tra thì hoàn toàn có thể thực hiện tự động được. Và thông thường các test tự động thường nằm trong test.py , hệ thống kiểm tra sẽ tự động tìm kiếm các tệp bắt đầu bằng test để thực hiện kiểm tra.

Bây giờ ta thử đặt đoạn sau vào tests.py trong polls:

import datetime

from django.test import TestCase
from django.utils import timezone

from .models import Question


class QuestionModelTests(TestCase):

    def test_was_published_recently_with_future_question(self):
        """
        was_published_recently() returns False for questions whose pub_date
        is in the future.
        """
        time = timezone.now() + datetime.timedelta(days=30)
        future_question = Question(pub_date=time)
        self.assertIs(future_question.was_published_recently(), False)
Sau đó, hãy thử chạy:

    $ python manage.py
Khi chạy xong bạn sẽ thấy những dòng tựa tựa dưới đây:

Creating test database for alias 'default'...
System check identified no issues (0 silenced).
F
======================================================================
FAIL: test_was_published_recently_with_future_question (polls.tests.QuestionModelTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/path/to/mysite/polls/tests.py", line 16, in test_was_published_recently_with_future_question
    self.assertIs(future_question.was_published_recently(), False)
AssertionError: True is not False

----------------------------------------------------------------------
Ran 1 test in 0.001s

FAILED (failures=1)
Destroying test database for alias 'default'...
Trong quá trình chạy thì chương trình đã thực hiện những việc sau:
  • manage.py test polls đã tìm kiếm các test trong polls và tìm thấy một lớp con của django.test.TestCase.
  • Sau đó, nó tạo ra một cơ sở dữ liệu đặc biệt cho mục đích thử nghiệm và tìm kiếm các test.
  • Trong test_was_published_recently_with_future_question tạo một phiên bản Question có trường pub_date là 30 ngày tiếp theo trong tương lai.
  • Và sử dụng phương pháp assertIs() để phát hiện ra các kết quả was_published_recently() trả về là True.

  • Với những hướng dẫn bên trên bạn đã có thể tự tạo ra một đoạn test nhỏ để thực hiện kiểm tra tự động ứng dụng của mình.
    Xem lại các phần 5 tại: Hướng dẫn Django cho người mới bắt đầu (P5)
    Nguồn: django tutorail

    Công nghệ được nhắc đến trong bài viết này

    Tên Công NghệPhiên BảnPhát Hành
    Django---
    4 phút đọc·250 lượt xem·