Hướng dẫn Django cho người mới bắt đầu (P6)
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 polls
và sửa chữa:
Đối với Question.was_published_recently()
thì phương thức trả về là True
nế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 nó đã đượ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)
$ python manage.py
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'...
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