Thử nghiệm Python với pytest 2022 PDF

Trích từ. Kiểm tra Python với pytest, Phiên bản thứ hai Đơn giản, nhanh chóng, hiệu quả và có thể mở rộng Tệp PDF này chứa các trang được trích xuất từ ​​Kiểm tra Python với pytest, Phiên bản thứ hai, do Pragmatic Bookshelf xuất bản. Để biết thêm thông tin hoặc để mua bản sao bìa mềm hoặc PDF, vui lòng truy cập http. //www. thực hành. com. Ghi chú. Trích xuất này chứa một số văn bản màu (đặc biệt là trong danh sách mã). Điều này chỉ có sẵn trong các phiên bản trực tuyến của sách. Các phiên bản in là đen trắng. Số trang có thể khác nhau giữa phiên bản trực tuyến và phiên bản in; . Bản quyền © 2021 The Pragmatic Programmers, LLC. Đã đăng ký Bản quyền. Không có phần nào của ấn phẩm này có thể được sao chép, lưu trữ trong một hệ thống truy xuất, hoặc truyền đi, dưới bất kỳ hình thức nào, hoặc bằng bất kỳ phương tiện nào, điện tử, cơ khí, sao chụp, ghi âm hoặc cách khác mà không có sự đồng ý trước của nhà xuất bản. Giá sách thực dụng Raleigh, Bắc Carolina

Kiểm tra mã của bạn mang lại rất nhiều lợi ích. Nó làm tăng sự tự tin của bạn rằng mã hoạt động như bạn mong đợi và đảm bảo rằng những thay đổi đối với mã của bạn sẽ không gây ra hồi quy. Viết và duy trì các bài kiểm tra là một công việc khó khăn, vì vậy bạn nên tận dụng tất cả các công cụ có sẵn để làm cho nó dễ dàng nhất có thể.

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 là một trong những công cụ tốt nhất mà bạn có thể sử dụng để tăng năng suất thử nghiệm của mình

Show

Trong hướng dẫn này, bạn sẽ học

  • Những lợi ích mà
    # test_with_unittest.py
    
    from unittest import TestCase
    
    class TryTesting(TestCase):
        def test_always_passes(self):
            self.assertTrue(True)
    
        def test_always_fails(self):
            self.assertTrue(False)
    
    4 mang lại
  • Làm thế nào để đảm bảo các bài kiểm tra của bạn là không trạng thái
  • Làm thế nào để làm cho các bài kiểm tra lặp đi lặp lại dễ hiểu hơn
  • Cách chạy tập hợp con các bài kiểm tra theo tên hoặc nhóm tùy chỉnh
  • Cách tạo và duy trì các tiện ích thử nghiệm có thể tái sử dụng

Tiền thưởng miễn phí. 5 Suy nghĩ về Làm chủ Python, một khóa học miễn phí dành cho các nhà phát triển Python cho bạn thấy lộ trình và tư duy mà bạn sẽ cần để đưa các kỹ năng Python của mình lên một tầm cao mới

Cách cài đặt # test_with_unittest.py from unittest import TestCase class TryTesting(TestCase): def test_always_passes(self): self.assertTrue(True) def test_always_fails(self): self.assertTrue(False) 4

Để làm theo một số ví dụ trong hướng dẫn này, bạn sẽ cần cài đặt

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4. Như hầu hết các gói Python,
# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 có sẵn trên PyPI. Bạn có thể cài đặt nó trong môi trường ảo bằng cách sử dụng
# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
9

  • các cửa sổ
  • Linux + macOS

PS> python -m venv venv
PS> .\venv\Scripts\activate
(venv) PS> python -m pip install pytest

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest

Lệnh

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 bây giờ sẽ có sẵn trong môi trường cài đặt của bạn

Loại bỏ các quảng cáo

Điều gì làm cho # test_with_unittest.py from unittest import TestCase class TryTesting(TestCase): def test_always_passes(self): self.assertTrue(True) def test_always_fails(self): self.assertTrue(False) 4 trở nên hữu ích?

Nếu trước đây bạn đã từng viết bài kiểm tra đơn vị cho mã Python của mình thì có thể bạn đã sử dụng mô-đun

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
02 tích hợp sẵn của Python.
# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
02 cung cấp một cơ sở vững chắc để xây dựng bộ thử nghiệm của bạn, nhưng nó có một số thiếu sót

Một số khuôn khổ thử nghiệm của bên thứ ba cố gắng giải quyết một số vấn đề với

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
02 và
# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 đã được chứng minh là một trong những khuôn khổ phổ biến nhất.
# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 là một hệ sinh thái dựa trên plugin, giàu tính năng để kiểm tra mã Python của bạn

Nếu bạn chưa có niềm vui khi sử dụng

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4, thì bạn sẽ được thưởng thức. Triết lý và tính năng của nó sẽ giúp trải nghiệm thử nghiệm của bạn hiệu quả và thú vị hơn. Với
# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4, các tác vụ thông thường yêu cầu ít mã hơn và các tác vụ nâng cao có thể đạt được thông qua nhiều lệnh và plugin tiết kiệm thời gian. Nó thậm chí sẽ chạy các bài kiểm tra hiện có của bạn ngay lập tức, bao gồm cả những bài kiểm tra được viết bằng
# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
02

Như với hầu hết các khung, một số mẫu phát triển có ý nghĩa khi bạn bắt đầu sử dụng

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 lần đầu tiên có thể bắt đầu gây khó khăn khi bộ thử nghiệm của bạn phát triển. Hướng dẫn này sẽ giúp bạn hiểu một số công cụ mà
# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 cung cấp để giữ cho thử nghiệm của bạn hiệu quả và hiệu quả ngay cả khi nó mở rộng quy mô

ít nồi hơi

Hầu hết các kiểm thử chức năng tuân theo mô hình Sắp xếp-Hành động-Khẳng định

  1. Sắp xếp, hoặc thiết lập, các điều kiện cho thử nghiệm
  2. Hành động bằng cách gọi một số chức năng hoặc phương pháp
  3. Khẳng định rằng một số điều kiện kết thúc là đúng

Các khung kiểm tra thường móc vào các xác nhận của bài kiểm tra của bạn để chúng có thể cung cấp thông tin khi một xác nhận không thành công. Ví dụ:

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
02 cung cấp một số tiện ích xác nhận hữu ích ngay lập tức. Tuy nhiên, ngay cả một tập hợp nhỏ các bài kiểm tra cũng yêu cầu một lượng lớn mã soạn sẵn

Hãy tưởng tượng bạn muốn viết một bộ thử nghiệm chỉ để đảm bảo rằng

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
02 đang hoạt động bình thường trong dự án của bạn. Bạn có thể muốn viết một bài kiểm tra luôn vượt qua và một bài kiểm tra luôn trượt

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)

Sau đó, bạn có thể chạy các thử nghiệm đó từ dòng lệnh bằng tùy chọn

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
34 của
# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
02

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
0

Như mong đợi, một bài kiểm tra đã vượt qua và một bài kiểm tra đã thất bại. Bạn đã chứng minh rằng

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
02 đang hoạt động, nhưng hãy nhìn vào những gì bạn phải làm

  1. Nhập lớp
    # test_with_unittest.py
    
    from unittest import TestCase
    
    class TryTesting(TestCase):
        def test_always_passes(self):
            self.assertTrue(True)
    
        def test_always_fails(self):
            self.assertTrue(False)
    
    37 từ
    # test_with_unittest.py
    
    from unittest import TestCase
    
    class TryTesting(TestCase):
        def test_always_passes(self):
            self.assertTrue(True)
    
        def test_always_fails(self):
            self.assertTrue(False)
    
    02
  2. Tạo
    # test_with_unittest.py
    
    from unittest import TestCase
    
    class TryTesting(TestCase):
        def test_always_passes(self):
            self.assertTrue(True)
    
        def test_always_fails(self):
            self.assertTrue(False)
    
    39, một lớp con của
    # test_with_unittest.py
    
    from unittest import TestCase
    
    class TryTesting(TestCase):
        def test_always_passes(self):
            self.assertTrue(True)
    
        def test_always_fails(self):
            self.assertTrue(False)
    
    37
  3. Viết một phương thức trong
    # test_with_unittest.py
    
    from unittest import TestCase
    
    class TryTesting(TestCase):
        def test_always_passes(self):
            self.assertTrue(True)
    
        def test_always_fails(self):
            self.assertTrue(False)
    
    39 cho mỗi bài kiểm tra
  4. Sử dụng một trong các phương pháp
    # test_with_unittest.py
    
    from unittest import TestCase
    
    class TryTesting(TestCase):
        def test_always_passes(self):
            self.assertTrue(True)
    
        def test_always_fails(self):
            self.assertTrue(False)
    
    22 từ
    # test_with_unittest.py
    
    from unittest import TestCase
    
    class TryTesting(TestCase):
        def test_always_passes(self):
            self.assertTrue(True)
    
        def test_always_fails(self):
            self.assertTrue(False)
    
    23 để đưa ra các xác nhận

Đó là một lượng mã đáng kể để viết và vì đó là mức tối thiểu bạn cần cho bất kỳ bài kiểm tra nào, cuối cùng bạn sẽ viết đi viết lại cùng một mã.

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 đơn giản hóa quy trình công việc này bằng cách cho phép bạn sử dụng trực tiếp các hàm thông thường và từ khóa
# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
25 của Python

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
3

Đó là nó. Bạn không phải đối phó với bất kỳ mục nhập hoặc lớp nào. Tất cả những gì bạn cần làm là bao gồm một hàm có tiền tố

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
26. Bởi vì bạn có thể sử dụng từ khóa
# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
25, bạn không cần phải học hoặc ghi nhớ tất cả các phương pháp
# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
22 khác nhau trong
# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
02, hoặc. Nếu bạn có thể viết một biểu thức mà bạn mong muốn đánh giá thành
# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
10, và sau đó
# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 sẽ kiểm tra nó cho bạn

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 không chỉ loại bỏ rất nhiều bản soạn sẵn mà còn cung cấp cho bạn đầu ra chi tiết và dễ đọc hơn nhiều

Đầu ra đẹp hơn

Bạn có thể chạy bộ thử nghiệm của mình bằng cách sử dụng lệnh

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 từ thư mục cấp cao nhất của dự án của bạn

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
2

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 trình bày kết quả kiểm tra khác với
# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
02 và tệp
# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
16 cũng được tự động đưa vào. Báo cáo cho thấy

  1. Trạng thái hệ thống, bao gồm phiên bản Python,
    # test_with_unittest.py
    
    from unittest import TestCase
    
    class TryTesting(TestCase):
        def test_always_passes(self):
            self.assertTrue(True)
    
        def test_always_fails(self):
            self.assertTrue(False)
    
    4 và bất kỳ plugin nào bạn đã cài đặt
  2. # test_with_unittest.py
    
    from unittest import TestCase
    
    class TryTesting(TestCase):
        def test_always_passes(self):
            self.assertTrue(True)
    
        def test_always_fails(self):
            self.assertTrue(False)
    
    18, hoặc thư mục để tìm kiếm cấu hình và kiểm tra
  3. Số bài kiểm tra mà người chạy đã phát hiện

Các mục này được trình bày trong phần đầu tiên của đầu ra

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
1

Sau đó, đầu ra cho biết trạng thái của từng bài kiểm tra bằng cú pháp tương tự như

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
02

  • Dấu chấm (______530) có nghĩa là bài kiểm tra đã qua
  • Một
    # test_with_unittest.py
    
    from unittest import TestCase
    
    class TryTesting(TestCase):
        def test_always_passes(self):
            self.assertTrue(True)
    
        def test_always_fails(self):
            self.assertTrue(False)
    
    31 có nghĩa là bài kiểm tra đã thất bại
  • Một
    # test_with_unittest.py
    
    from unittest import TestCase
    
    class TryTesting(TestCase):
        def test_always_passes(self):
            self.assertTrue(True)
    
        def test_always_fails(self):
            self.assertTrue(False)
    
    32 có nghĩa là bài kiểm tra đã đưa ra một ngoại lệ không mong muốn

Các ký tự đặc biệt được hiển thị bên cạnh tên với tiến trình tổng thể của bộ thử nghiệm được hiển thị bên phải

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
3

Đối với các thử nghiệm không thành công, báo cáo đưa ra phân tích chi tiết về lỗi. Trong ví dụ này, các bài kiểm tra không thành công vì

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
33 luôn thất bại

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
8

Đầu ra bổ sung này có thể cực kỳ hữu ích khi gỡ lỗi. Cuối cùng, báo cáo đưa ra một báo cáo trạng thái tổng thể của bộ thử nghiệm

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
9

Khi so sánh với unittest, đầu ra

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 có nhiều thông tin và dễ đọc hơn

Trong phần tiếp theo, bạn sẽ xem xét kỹ hơn cách

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 tận dụng từ khóa
# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
25 hiện có

Loại bỏ các quảng cáo

Ít để học

Có thể sử dụng từ khóa

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
25 cũng rất hiệu quả. Nếu bạn đã sử dụng nó trước đây, thì không có gì mới để tìm hiểu. Dưới đây là một số ví dụ về khẳng định để bạn có thể hình dung về các loại thử nghiệm mà bạn có thể thực hiện

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
0

Chúng trông rất giống các hàm Python bình thường. Tất cả những điều này làm cho quá trình học tập đối với

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 nông hơn so với đối với
# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
02 vì bạn không cần phải học các cấu trúc mới để bắt đầu

Lưu ý rằng mỗi bài kiểm tra khá nhỏ và khép kín. Điều này là phổ biến—bạn sẽ thấy các tên hàm dài và không có nhiều thứ xảy ra trong một hàm. Điều này phục vụ chủ yếu để giữ cho các bài kiểm tra của bạn tách biệt với nhau, vì vậy nếu có gì đó bị hỏng, bạn sẽ biết chính xác vấn đề nằm ở đâu. Một tác dụng phụ thú vị là việc ghi nhãn ở đầu ra tốt hơn nhiều

Để xem ví dụ về dự án tạo bộ thử nghiệm cùng với dự án chính, hãy xem hướng dẫn Xây dựng bảng băm trong Python với TDD. Ngoài ra, bạn có thể giải quyết các vấn đề thực hành Python để tự mình thử phát triển theo hướng thử nghiệm trong khi bạn sẵn sàng cho cuộc phỏng vấn tiếp theo hoặc phân tích cú pháp các tệp CSV

Trong phần tiếp theo, bạn sẽ kiểm tra đồ đạc, một tính năng pytest tuyệt vời để giúp bạn quản lý các giá trị đầu vào thử nghiệm

Dễ dàng quản lý trạng thái và phụ thuộc hơn

Các bài kiểm tra của bạn thường sẽ phụ thuộc vào các loại dữ liệu hoặc các bài kiểm tra nhân đôi giả định các đối tượng mà mã của bạn có thể gặp phải, chẳng hạn như từ điển hoặc tệp JSON

Với

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
02, bạn có thể trích xuất các phụ thuộc này thành các phương thức
# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
81 và
# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
82 để mỗi bài kiểm tra trong lớp có thể sử dụng chúng. Sử dụng các phương pháp đặc biệt này là tốt, nhưng khi các lớp kiểm tra của bạn lớn hơn, bạn có thể vô tình làm cho sự phụ thuộc của kiểm tra hoàn toàn ẩn. Nói cách khác, bằng cách xem xét riêng lẻ một trong nhiều bài kiểm tra, bạn có thể không thấy ngay rằng nó phụ thuộc vào thứ khác

Theo thời gian, các phụ thuộc ngầm định có thể dẫn đến một mớ mã phức tạp mà bạn phải gỡ ra để hiểu các bài kiểm tra của mình. Các bài kiểm tra sẽ giúp làm cho mã của bạn dễ hiểu hơn. Nếu bản thân các bài kiểm tra khó hiểu, thì bạn có thể gặp rắc rối

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 có một cách tiếp cận khác. Nó dẫn bạn đến các khai báo phụ thuộc rõ ràng vẫn có thể tái sử dụng nhờ có sẵn các đồ đạc. Đồ đạc
# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 là các chức năng có thể tạo dữ liệu, kiểm tra nhân đôi hoặc khởi tạo trạng thái hệ thống cho bộ kiểm tra. Bất kỳ thử nghiệm nào muốn sử dụng lịch thi đấu phải sử dụng chức năng lịch thi đấu này một cách rõ ràng làm đối số cho chức năng kiểm tra, do đó, các yếu tố phụ thuộc luôn được nêu rõ trước

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
1

Nhìn vào chức năng kiểm tra, bạn có thể biết ngay rằng nó phụ thuộc vào vật cố định mà không cần kiểm tra toàn bộ tệp để biết định nghĩa vật cố định

Ghi chú. Bạn thường muốn đặt các bài kiểm tra của mình vào thư mục riêng của chúng có tên là

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
85 ở cấp độ gốc của dự án của bạn

Để biết thêm thông tin về cấu trúc ứng dụng Python, hãy xem khóa học video về chính chủ đề đó

Fixtures cũng có thể sử dụng các thiết bị cố định khác, một lần nữa bằng cách tuyên bố rõ ràng chúng là phụ thuộc. Điều đó có nghĩa là, theo thời gian, đồ đạc của bạn có thể trở nên cồng kềnh và kiểu mô-đun. Mặc dù khả năng chèn các thiết bị cố định vào các thiết bị cố định khác mang lại sự linh hoạt rất lớn, nhưng nó cũng có thể khiến việc quản lý các thành phần phụ thuộc trở nên khó khăn hơn khi bộ thử nghiệm của bạn phát triển

Ở phần sau của hướng dẫn này, bạn sẽ tìm hiểu thêm về đồ đạc và thử một vài kỹ thuật để xử lý những thử thách này

Dễ dàng lọc các bài kiểm tra

Khi bộ thử nghiệm của bạn phát triển, bạn có thể thấy rằng bạn chỉ muốn chạy một vài thử nghiệm trên một tính năng và lưu toàn bộ bộ thử nghiệm cho lần sau.

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 cung cấp một vài cách để làm điều này

  • Lọc dựa trên tên. Bạn có thể giới hạn
    # test_with_unittest.py
    
    from unittest import TestCase
    
    class TryTesting(TestCase):
        def test_always_passes(self):
            self.assertTrue(True)
    
        def test_always_fails(self):
            self.assertTrue(False)
    
    4 chỉ chạy những bài kiểm tra có tên đủ điều kiện phù hợp với một biểu thức cụ thể. Bạn có thể làm điều này với tham số
    # test_with_unittest.py
    
    from unittest import TestCase
    
    class TryTesting(TestCase):
        def test_always_passes(self):
            self.assertTrue(True)
    
        def test_always_fails(self):
            self.assertTrue(False)
    
    88
  • phạm vi thư mục. Theo mặc định,
    # test_with_unittest.py
    
    from unittest import TestCase
    
    class TryTesting(TestCase):
        def test_always_passes(self):
            self.assertTrue(True)
    
        def test_always_fails(self):
            self.assertTrue(False)
    
    4 sẽ chỉ chạy những bài kiểm tra nằm trong hoặc dưới thư mục hiện tại
  • phân loại thử nghiệm.
    # test_with_unittest.py
    
    from unittest import TestCase
    
    class TryTesting(TestCase):
        def test_always_passes(self):
            self.assertTrue(True)
    
        def test_always_fails(self):
            self.assertTrue(False)
    
    4 có thể bao gồm hoặc loại trừ các bài kiểm tra khỏi các danh mục cụ thể mà bạn xác định. Bạn có thể làm điều này với tham số
    # test_with_unittest.py
    
    from unittest import TestCase
    
    class TryTesting(TestCase):
        def test_always_passes(self):
            self.assertTrue(True)
    
        def test_always_fails(self):
            self.assertTrue(False)
    
    91

Phân loại thử nghiệm nói riêng là một công cụ mạnh mẽ tinh tế.

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 cho phép bạn tạo nhãn hiệu hoặc nhãn tùy chỉnh cho bất kỳ bài kiểm tra nào bạn muốn. Một thử nghiệm có thể có nhiều nhãn và bạn có thể sử dụng chúng để kiểm soát chi tiết những thử nghiệm nào sẽ chạy. Ở phần sau của hướng dẫn này, bạn sẽ thấy một ví dụ về cách hoạt động của dấu
# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 và tìm hiểu cách sử dụng chúng trong một bộ thử nghiệm lớn

Loại bỏ các quảng cáo

Cho phép kiểm tra tham số

Khi bạn đang kiểm tra các chức năng xử lý dữ liệu hoặc thực hiện các phép biến đổi chung, bạn sẽ thấy mình viết nhiều bài kiểm tra tương tự. Chúng có thể chỉ khác nhau về đầu vào hoặc đầu ra của mã đang được kiểm tra. Điều này yêu cầu sao chép mã kiểm tra và làm như vậy đôi khi có thể che khuất hành vi mà bạn đang cố gắng kiểm tra

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
02 cung cấp một cách tập hợp nhiều bài kiểm tra thành một, nhưng chúng không hiển thị dưới dạng các bài kiểm tra riêng lẻ trong báo cáo kết quả. Nếu một bài kiểm tra không thành công và phần còn lại vượt qua, thì toàn bộ nhóm sẽ vẫn trả về một kết quả không đạt.
# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 cung cấp giải pháp riêng, trong đó mỗi bài kiểm tra có thể vượt qua hoặc thất bại một cách độc lập. Bạn sẽ thấy cách tham số hóa các bài kiểm tra với
# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 sau trong hướng dẫn này

Có kiến ​​trúc dựa trên plugin

Một trong những tính năng đẹp nhất của

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 là khả năng tùy chỉnh và các tính năng mới của nó. Hầu như mọi phần của chương trình đều có thể bị bẻ khóa và thay đổi. Kết quả là, người dùng
# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 đã phát triển một hệ sinh thái phong phú gồm các plugin hữu ích

Mặc dù một số plugin

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 tập trung vào các khung cụ thể như Django, nhưng các plugin khác có thể áp dụng cho hầu hết các bộ thử nghiệm. Bạn sẽ thấy chi tiết về một số plugin cụ thể sau trong hướng dẫn này

đồ đạc. Quản lý trạng thái và phụ thuộc

Đồ đạc

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 là một cách cung cấp dữ liệu, nhân đôi thử nghiệm hoặc thiết lập trạng thái cho các thử nghiệm của bạn. Fixtures là các hàm có thể trả về một loạt các giá trị. Mỗi thử nghiệm phụ thuộc vào vật cố định phải chấp nhận rõ ràng vật cố định đó làm đối số

Khi nào tạo lịch thi đấu

Trong phần này, bạn sẽ mô phỏng quy trình phát triển dựa trên thử nghiệm (TDD) điển hình

Hãy tưởng tượng bạn đang viết một hàm,

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
01, để xử lý dữ liệu được trả về bởi một điểm cuối API. Dữ liệu đại diện cho một danh sách mọi người, mỗi người có tên, họ và chức danh nhất định. Hàm sẽ xuất ra một danh sách các chuỗi bao gồm tên đầy đủ của mỗi người (_______702 của họ theo sau là _____703 của họ), dấu hai chấm và ______704 của họ

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
2

Theo kiểu TDD tốt, trước tiên bạn sẽ muốn viết một bài kiểm tra cho nó. Bạn có thể viết đoạn mã sau cho điều đó

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
3

Trong khi viết bài kiểm tra này, bạn có thể cần phải viết một hàm khác để chuyển đổi dữ liệu thành các giá trị được phân tách bằng dấu phẩy để sử dụng trong Excel

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
4

Danh sách việc cần làm của bạn tăng lên. Tốt đấy. Một trong những ưu điểm của TDD là nó giúp bạn lên kế hoạch cho công việc phía trước. Bài kiểm tra cho hàm

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
05 trông cực kỳ giống với hàm
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
01

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
5

Đáng chú ý, cả hai bài kiểm tra đều phải lặp lại định nghĩa của biến

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
07, khá nhiều dòng mã

Nếu bạn thấy mình đang viết một số bài kiểm tra mà tất cả đều sử dụng cùng một dữ liệu kiểm tra cơ bản, thì bạn có thể sẽ gặp một vấn đề cố định trong tương lai. Bạn có thể kéo dữ liệu lặp lại vào một chức năng duy nhất được trang trí bằng

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
08 để chỉ ra rằng chức năng đó là một vật cố định của
# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
6

Bạn có thể sử dụng lịch thi đấu bằng cách thêm tham chiếu hàm làm đối số cho các thử nghiệm của mình. Lưu ý rằng bạn không gọi chức năng cố định.

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 lo việc đó. Bạn sẽ có thể sử dụng giá trị trả về của hàm cố định làm tên của hàm cố định

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
7

Mỗi bài kiểm tra hiện ngắn hơn đáng kể nhưng vẫn có đường dẫn rõ ràng trở lại dữ liệu mà nó phụ thuộc vào. Hãy chắc chắn đặt tên cho trận đấu của bạn một cái gì đó cụ thể. Bằng cách đó, bạn có thể nhanh chóng xác định xem bạn có muốn sử dụng nó khi viết các bài kiểm tra mới trong tương lai hay không.

Khi bạn lần đầu tiên khám phá ra sức mạnh của đồ đạc, bạn có thể muốn sử dụng chúng mọi lúc, nhưng cũng giống như mọi thứ, luôn có sự cân bằng cần được duy trì

Loại bỏ các quảng cáo

Khi nào nên tránh đồ đạc

Fixtures là công cụ tuyệt vời để trích xuất dữ liệu hoặc đối tượng mà bạn sử dụng trong nhiều thử nghiệm. Tuy nhiên, chúng không phải lúc nào cũng tốt cho các thử nghiệm yêu cầu dữ liệu có sự thay đổi nhỏ. Xả rác bộ thử nghiệm của bạn với đồ đạc không tốt hơn là xả rác với dữ liệu hoặc đối tượng đơn giản. Nó thậm chí có thể tồi tệ hơn vì lớp gián tiếp được thêm vào

Như với hầu hết các khái niệm trừu tượng, cần có một số thực hành và suy nghĩ để tìm ra mức độ sử dụng thiết bị cố định phù hợp

Tuy nhiên, đồ đạc có thể sẽ là một phần không thể thiếu trong bộ thử nghiệm của bạn. Khi dự án của bạn phát triển về quy mô, thách thức về quy mô bắt đầu xuất hiện. Một trong những thách thức đối với bất kỳ loại công cụ nào là cách nó xử lý khi được sử dụng trên quy mô lớn và may mắn thay,

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 có rất nhiều tính năng hữu ích có thể giúp bạn quản lý sự phức tạp đi kèm với sự phát triển.

Cách sử dụng đồ đạc theo tỷ lệ

Khi bạn trích xuất nhiều đồ đạc hơn từ các thử nghiệm của mình, bạn có thể thấy rằng một số đồ đạc có thể được hưởng lợi từ việc trừu tượng hóa hơn nữa. Trong

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4, đồ đạc là mô-đun. Là mô-đun có nghĩa là đồ đạc có thể được nhập, có thể nhập các mô-đun khác và chúng có thể phụ thuộc và nhập các đồ đạc khác. Tất cả điều này cho phép bạn soạn một bản tóm tắt lịch thi đấu phù hợp cho trường hợp sử dụng của bạn

Ví dụ: bạn có thể thấy rằng các đồ đạc trong hai tệp hoặc mô-đun riêng biệt có chung một phụ thuộc. Trong trường hợp này, bạn có thể di chuyển đồ đạc từ các mô-đun thử nghiệm sang các mô-đun liên quan đến đồ đạc tổng quát hơn. Bằng cách đó, bạn có thể nhập chúng trở lại vào bất kỳ mô-đun thử nghiệm nào cần chúng. Đây là một cách tiếp cận tốt khi bạn thấy mình sử dụng một vật cố định lặp đi lặp lại trong suốt dự án của mình

Nếu bạn muốn tạo sẵn một lịch thi đấu cho toàn bộ dự án của mình mà không phải nhập nó, một mô-đun cấu hình đặc biệt có tên là

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
13 sẽ cho phép bạn thực hiện điều đó

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 tìm kiếm một mô-đun
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
13 trong mỗi thư mục. Nếu bạn thêm các thiết bị cố định có mục đích chung vào mô-đun
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
13, thì bạn sẽ có thể sử dụng thiết bị cố định đó trong thư mục mẹ của mô-đun và trong bất kỳ thư mục con nào mà không cần phải nhập nó. Đây là một nơi tuyệt vời để đặt đồ đạc được sử dụng rộng rãi nhất của bạn

Một trường hợp sử dụng thú vị khác cho đồ đạc và

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
13 là bảo vệ quyền truy cập vào tài nguyên. Hãy tưởng tượng rằng bạn đã viết một bộ mã kiểm tra xử lý các lệnh gọi API. Bạn muốn đảm bảo rằng bộ thử nghiệm không thực hiện bất kỳ cuộc gọi mạng thực sự nào ngay cả khi ai đó vô tình viết một thử nghiệm làm như vậy

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 cung cấp một vật cố định
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
19 để thay thế các giá trị và hành vi mà bạn có thể sử dụng để đạt hiệu quả cao

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
8

Bằng cách đặt

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
20 trong
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
13 và thêm tùy chọn
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
22, bạn đảm bảo rằng các lệnh gọi mạng sẽ bị vô hiệu hóa trong mọi thử nghiệm trên toàn bộ phần mềm. Bất kỳ thử nghiệm nào thực thi lệnh gọi mã
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
23 sẽ tăng
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
24 cho biết rằng một cuộc gọi mạng không mong muốn sẽ xảy ra

Bộ thử nghiệm của bạn đang phát triển về số lượng, điều này mang lại cho bạn cảm giác tự tin tuyệt vời để thực hiện các thay đổi và không làm hỏng mọi thứ ngoài ý muốn. Điều đó nói rằng, khi bộ thử nghiệm của bạn phát triển, nó có thể bắt đầu mất nhiều thời gian. Ngay cả khi nó không mất nhiều thời gian như vậy, có lẽ bạn đang tập trung vào một số hành vi cốt lõi khiến hầu hết các bài kiểm tra bị phá vỡ. Trong những trường hợp này, bạn có thể muốn giới hạn người chạy thử nghiệm chỉ trong một danh mục thử nghiệm nhất định

Điểm. Phân loại bài kiểm tra

Trong bất kỳ bộ thử nghiệm lớn nào, sẽ tốt hơn nếu tránh chạy tất cả các thử nghiệm khi bạn đang cố lặp lại nhanh một tính năng mới. Ngoài hành vi mặc định của

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 để chạy tất cả các bài kiểm tra trong thư mục làm việc hiện tại hoặc chức năng lọc, bạn có thể tận dụng các điểm đánh dấu

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 cho phép bạn xác định danh mục cho các thử nghiệm của mình và cung cấp các tùy chọn để bao gồm hoặc loại trừ danh mục khi bạn chạy bộ phần mềm của mình. Bạn có thể đánh dấu một bài kiểm tra với bất kỳ số lượng danh mục nào

Đánh dấu các bài kiểm tra rất hữu ích để phân loại các bài kiểm tra theo hệ thống con hoặc phụ thuộc. Ví dụ: nếu một số bài kiểm tra của bạn yêu cầu quyền truy cập vào cơ sở dữ liệu, thì bạn có thể tạo dấu

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
27 cho chúng

mẹo chuyên nghiệp. Bởi vì bạn có thể đặt cho nhãn hiệu của mình bất kỳ tên nào bạn muốn, nên có thể dễ dàng gõ nhầm hoặc nhớ sai tên của nhãn hiệu.

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 sẽ cảnh báo bạn về những dấu hiệu mà nó không nhận ra trong đầu ra của bài kiểm tra

Bạn có thể sử dụng cờ

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
29 cho lệnh
# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 để đảm bảo rằng tất cả các điểm trong bài kiểm tra của bạn được đăng ký trong tệp cấu hình
# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 của bạn,
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
32. Nó sẽ ngăn bạn chạy các bài kiểm tra của mình cho đến khi bạn đăng ký bất kỳ điểm không xác định nào

Để biết thêm thông tin về đăng ký nhãn hiệu, hãy xem tài liệu

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4

Khi đến lúc chạy thử nghiệm, bạn vẫn có thể chạy tất cả chúng theo mặc định bằng lệnh

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4. Nếu bạn chỉ muốn chạy những thử nghiệm yêu cầu quyền truy cập cơ sở dữ liệu, thì bạn có thể sử dụng
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
35. Để chạy tất cả các bài kiểm tra ngoại trừ những bài kiểm tra yêu cầu quyền truy cập cơ sở dữ liệu, bạn có thể sử dụng
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
36. Bạn thậm chí có thể sử dụng lịch thi đấu
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
37 để giới hạn quyền truy cập cơ sở dữ liệu đối với những bài kiểm tra được đánh dấu bằng
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
38

Một số plugin mở rộng chức năng của các nhãn hiệu bằng cách thêm các bộ bảo vệ của riêng chúng. Ví dụ: plugin

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
39 cung cấp dấu
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
40. Bất kỳ bài kiểm tra nào không có dấu này cố gắng truy cập cơ sở dữ liệu sẽ thất bại. Thử nghiệm đầu tiên cố gắng truy cập cơ sở dữ liệu sẽ kích hoạt việc tạo cơ sở dữ liệu thử nghiệm của Django

Yêu cầu bạn thêm dấu

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
40 thúc đẩy bạn nêu rõ ràng các phụ thuộc của mình. Rốt cuộc đó là triết lý của
# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4. Điều đó cũng có nghĩa là bạn có thể chạy các bài kiểm tra không dựa vào cơ sở dữ liệu nhanh hơn rất nhiều, vì
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
43 sẽ ngăn không cho bài kiểm tra kích hoạt việc tạo cơ sở dữ liệu. Tiết kiệm thời gian thực sự tăng lên, đặc biệt nếu bạn siêng năng chạy thử nghiệm thường xuyên

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 cung cấp một vài điểm vượt trội

  • $ python -m venv venv
    $ source venv/bin/activate
    (venv) $ python -m pip install pytest
    
    45 bỏ qua bài kiểm tra vô điều kiện
  • $ python -m venv venv
    $ source venv/bin/activate
    (venv) $ python -m pip install pytest
    
    46 bỏ qua một bài kiểm tra nếu biểu thức được truyền cho nó có giá trị là
    # test_with_unittest.py
    
    from unittest import TestCase
    
    class TryTesting(TestCase):
        def test_always_passes(self):
            self.assertTrue(True)
    
        def test_always_fails(self):
            self.assertTrue(False)
    
    10
  • $ python -m venv venv
    $ source venv/bin/activate
    (venv) $ python -m pip install pytest
    
    48 chỉ ra rằng một bài kiểm tra dự kiến ​​​​sẽ thất bại, vì vậy nếu bài kiểm tra thất bại, bộ tổng thể vẫn có thể dẫn đến trạng thái vượt qua
  • $ python -m venv venv
    $ source venv/bin/activate
    (venv) $ python -m pip install pytest
    
    49 tạo nhiều biến thể của thử nghiệm với các giá trị khác nhau làm đối số. Bạn sẽ sớm tìm hiểu thêm về nhãn hiệu này

Bạn có thể xem danh sách tất cả các nhãn hiệu mà

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 biết bằng cách chạy
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
51

Về chủ đề tham số hóa, điều đó sẽ xuất hiện tiếp theo

Loại bỏ các quảng cáo

tham số hóa. kết hợp kiểm tra

Bạn đã thấy trước đó trong hướng dẫn này cách sử dụng đồ đạc

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 để giảm trùng lặp mã bằng cách trích xuất các phụ thuộc phổ biến. Lịch thi đấu không thực sự hữu ích khi bạn có một số thử nghiệm với đầu vào hơi khác nhau và đầu ra dự kiến. Trong những trường hợp này, bạn có thể tham số hóa một định nghĩa thử nghiệm duy nhất và
# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 sẽ tạo các biến thể của thử nghiệm cho bạn với các tham số bạn chỉ định

Hãy tưởng tượng bạn đã viết một hàm để cho biết một chuỗi có phải là một palindrome hay không. Một bộ thử nghiệm ban đầu có thể trông như thế này

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
9

Tất cả các bài kiểm tra này ngoại trừ hai bài kiểm tra cuối cùng đều có hình dạng giống nhau

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
0

Điều này đang bắt đầu có mùi rất giống nồi hơi.

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 cho đến nay đã giúp bạn thoát khỏi bản soạn sẵn và nó sẽ không làm bạn thất vọng bây giờ. Bạn có thể sử dụng
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
55 để điền vào hình dạng này với các giá trị khác nhau, giảm đáng kể mã kiểm tra của bạn

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
1

Đối số đầu tiên của

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
56 là một chuỗi tên tham số được phân tách bằng dấu phẩy. Bạn không cần phải cung cấp nhiều tên, như bạn có thể thấy trong ví dụ này. Đối số thứ hai là danh sách các bộ hoặc giá trị đơn lẻ đại diện cho (các) giá trị tham số. Bạn có thể thực hiện tham số hóa của mình thêm một bước nữa để kết hợp tất cả các thử nghiệm của mình thành một

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
2

Mặc dù điều này rút ngắn mã của bạn, nhưng điều quan trọng cần lưu ý là trong trường hợp này, bạn thực sự đã mất đi một số tính chất mô tả hơn của các chức năng ban đầu. Đảm bảo rằng bạn không tham số hóa bộ thử nghiệm của mình thành điều khó hiểu. Bạn có thể sử dụng tham số hóa để tách dữ liệu thử nghiệm khỏi hành vi thử nghiệm để hiểu rõ thử nghiệm đang thử nghiệm cái gì và cũng để làm cho các trường hợp thử nghiệm khác nhau dễ đọc và dễ bảo trì hơn

Báo cáo thời lượng. Chiến đấu với các bài kiểm tra chậm

Mỗi khi bạn chuyển ngữ cảnh từ mã triển khai sang mã kiểm tra, bạn phải chịu một số chi phí. Nếu các thử nghiệm của bạn bắt đầu chậm, thì chi phí chung có thể gây ra xích mích và thất vọng

Bạn đã đọc trước đó về cách sử dụng điểm để lọc ra các bài kiểm tra chậm khi chạy bộ ứng dụng của mình, nhưng đến một lúc nào đó, bạn sẽ cần chạy chúng. Nếu bạn muốn cải thiện tốc độ của các bài kiểm tra, thì sẽ rất hữu ích nếu bạn biết những bài kiểm tra nào có thể mang lại những cải tiến lớn nhất.

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 có thể tự động ghi lại thời lượng kiểm tra cho bạn và báo cáo những người vi phạm hàng đầu

Sử dụng tùy chọn

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
58 cho lệnh
# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 để đưa báo cáo thời lượng vào kết quả kiểm tra của bạn.
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
58 mong đợi một giá trị số nguyên
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
61 và sẽ báo cáo số lần kiểm tra
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
61 chậm nhất. Một phần mới sẽ được đưa vào báo cáo thử nghiệm của bạn

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
3

Mỗi bài kiểm tra xuất hiện trong báo cáo thời lượng là một ứng cử viên tốt để tăng tốc vì nó chiếm một lượng trên trung bình trong tổng thời gian kiểm tra. Lưu ý rằng thời lượng ngắn được ẩn theo mặc định. Như đã nêu trong báo cáo, bạn có thể tăng mức độ chi tiết của báo cáo và hiển thị những điều này bằng cách chuyển

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
63 cùng với
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
58

Xin lưu ý rằng một số thử nghiệm có thể có chi phí thiết lập vô hình. Bạn đã đọc trước đó về cách thử nghiệm đầu tiên được đánh dấu bằng

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
40 sẽ kích hoạt việc tạo cơ sở dữ liệu thử nghiệm Django. Báo cáo
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
66 phản ánh thời gian cần thiết để thiết lập cơ sở dữ liệu trong thử nghiệm đã kích hoạt việc tạo cơ sở dữ liệu, điều này có thể gây hiểu lầm

Bạn đang trên đường đến phạm vi kiểm tra đầy đủ. Tiếp theo, bạn sẽ xem xét một số plugin là một phần của hệ sinh thái plugin

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 phong phú

Các plugin # test_with_unittest.py from unittest import TestCase class TryTesting(TestCase): def test_always_passes(self): self.assertTrue(True) def test_always_fails(self): self.assertTrue(False) 4 hữu ích

Bạn đã tìm hiểu về một vài plugin

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 có giá trị trước đó trong hướng dẫn này. Trong phần này, bạn sẽ khám phá những điều đó và một số điều khác sâu hơn—mọi thứ từ các plugin tiện ích như
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
70 đến các plugin dành riêng cho thư viện, chẳng hạn như các plugin dành cho Django

Loại bỏ các quảng cáo

$ python -m venv venv $ source venv/bin/activate (venv) $ python -m pip install pytest 70

Thường thì thứ tự các bài kiểm tra của bạn không quan trọng, nhưng khi cơ sở mã của bạn phát triển, bạn có thể vô tình đưa ra một số tác dụng phụ có thể khiến một số bài kiểm tra không thành công nếu chúng không còn đúng thứ tự

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
70 buộc các bài kiểm tra của bạn chạy theo thứ tự ngẫu nhiên.
# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 luôn thu thập tất cả các bài kiểm tra mà nó có thể tìm thấy trước khi chạy chúng.
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
70 chỉ xáo trộn danh sách các bài kiểm tra đó trước khi thực hiện

Đây là một cách tuyệt vời để phát hiện ra các bài kiểm tra phụ thuộc vào việc chạy theo một thứ tự cụ thể, có nghĩa là chúng có sự phụ thuộc trạng thái vào một số bài kiểm tra khác. Nếu bạn đã xây dựng bộ thử nghiệm của mình từ đầu trong

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4, thì điều này rất có thể không xảy ra. Nó có nhiều khả năng xảy ra trong các bộ thử nghiệm mà bạn di chuyển sang
# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4

Plugin sẽ in một giá trị hạt giống trong mô tả cấu hình. Bạn có thể sử dụng giá trị đó để chạy thử nghiệm theo thứ tự giống như khi bạn cố gắng khắc phục sự cố

$ python -m venv venv $ source venv/bin/activate (venv) $ python -m pip install pytest 77

Nếu bạn muốn đo lường mức độ kiểm tra của bạn bao gồm mã triển khai của bạn như thế nào, thì bạn có thể sử dụng gói bảo hiểm.

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
77 tích hợp phạm vi bảo hiểm, vì vậy bạn có thể chạy
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
79 để xem báo cáo phạm vi kiểm tra và khoe khoang về nó trên trang đầu dự án của bạn

$ python -m venv venv $ source venv/bin/activate (venv) $ python -m pip install pytest 39

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
39 cung cấp một số đồ đạc và điểm hữu ích để xử lý các bài kiểm tra Django. Bạn đã thấy dấu
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
40 trước đó trong hướng dẫn này. Vật cố định
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
83 cung cấp quyền truy cập trực tiếp vào một phiên bản của Django's
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
84. Lịch thi đấu
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pytest
85 cung cấp một cách nhanh chóng để đặt hoặc ghi đè cài đặt Django. Các plugin này là một sự thúc đẩy tuyệt vời cho năng suất thử nghiệm Django của bạn

Nếu bạn muốn tìm hiểu thêm về cách sử dụng

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 với Django, thì hãy xem Cách cung cấp thiết bị thử nghiệm cho các mô hình Django trong Pytest

$ python -m venv venv $ source venv/bin/activate (venv) $ python -m pip install pytest 87

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 có thể được sử dụng để chạy các thử nghiệm nằm ngoài phạm vi thử nghiệm đơn vị truyền thống. Phát triển theo định hướng hành vi (BDD) khuyến khích viết các mô tả bằng ngôn ngữ đơn giản về các hành động và kỳ vọng của người dùng, sau đó bạn có thể sử dụng những nội dung này để xác định xem có nên triển khai một tính năng nhất định hay không. pytest-bdd giúp bạn sử dụng Gherkin để viết các bài kiểm tra tính năng cho mã của bạn

Bạn có thể xem những plugin nào khác có sẵn cho

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 với danh sách đầy đủ các plugin của bên thứ ba này

Phần kết luận

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 cung cấp một tập hợp các tính năng năng suất cốt lõi để lọc và tối ưu hóa các bài kiểm tra của bạn cùng với một hệ thống plugin linh hoạt giúp mở rộng giá trị của nó hơn nữa. Cho dù bạn có một bộ
# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
02 kế thừa khổng lồ hay bạn đang bắt đầu một dự án mới từ đầu, thì
# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 đều có thứ để cung cấp cho bạn

Trong hướng dẫn này, bạn đã học cách sử dụng

  • Lịch thi đấu để xử lý các phụ thuộc kiểm tra, trạng thái và chức năng có thể tái sử dụng
  • Đánh dấu để phân loại các bài kiểm tra và giới hạn quyền truy cập vào các tài nguyên bên ngoài
  • Tham số hóa để giảm mã trùng lặp giữa các lần kiểm tra
  • Thời lượng để xác định các bài kiểm tra chậm nhất của bạn
  • Các plugin để tích hợp với các khuôn khổ và công cụ kiểm tra khác

Cài đặt

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 và dùng thử. Bạn sẽ vui vì bạn đã làm. thử nghiệm vui vẻ

Nếu bạn đang tìm kiếm một dự án ví dụ được xây dựng bằng

# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4, thì hãy xem hướng dẫn về xây dựng bảng băm bằng TDD, điều này không chỉ giúp bạn bắt kịp tốc độ với
# test_with_unittest.py

from unittest import TestCase

class TryTesting(TestCase):
    def test_always_passes(self):
        self.assertTrue(True)

    def test_always_fails(self):
        self.assertTrue(False)
4 mà còn giúp bạn thành thạo các bảng băm

Đánh dấu là đã hoàn thành

Xem ngay Hướng dẫn này có một khóa học video liên quan do nhóm Real Python tạo. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn. Kiểm tra mã của bạn bằng pytest

🐍 Thủ thuật Python 💌

Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python

Thử nghiệm Python với pytest 2022 PDF

Gửi cho tôi thủ thuật Python »

Giới thiệu về Dane Hillard

Thử nghiệm Python với pytest 2022 PDF
Thử nghiệm Python với pytest 2022 PDF

Dane là Kiến trúc sư kỹ thuật tại ITHAKA và hiện đang viết Xuất bản Gói Python

» Thông tin thêm về Dane


Mỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là

Thử nghiệm Python với pytest 2022 PDF

Aldren

Thử nghiệm Python với pytest 2022 PDF

Geir Arne

Thử nghiệm Python với pytest 2022 PDF

Ian

Thử nghiệm Python với pytest 2022 PDF

Joanna

Thử nghiệm Python với pytest 2022 PDF

Gia-cốp

Thử nghiệm Python với pytest 2022 PDF

kate

Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực

Thử nghiệm Python với pytest 2022 PDF

Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Bậc thầy Kỹ năng Python trong thế giới thực
Với quyền truy cập không giới hạn vào Python thực

Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Bạn nghĩ sao?

Đánh giá bài viết này

Tweet Chia sẻ Chia sẻ Email

Bài học số 1 hoặc điều yêu thích mà bạn đã học được là gì?

Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. Nhận các mẹo để đặt câu hỏi hay và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi

Học pytest có khó không?

Pytest cực kỳ dễ học . nếu bạn hiểu từ khóa assert của Python hoạt động như thế nào, thì bạn đã sẵn sàng để làm chủ khung. Các bài kiểm tra sử dụng pytest là các hàm Python với “test_” được thêm vào trước hoặc “_test” được thêm vào tên của hàm - mặc dù bạn có thể sử dụng một lớp để nhóm nhiều bài kiểm tra.

Có thể sử dụng pytest để kiểm tra chức năng không?

Pytest có thể chạy các bài kiểm tra được viết bằng unittest, doctest, autres và nose . Hơn 150 plugin bên ngoài có sẵn để hỗ trợ tất cả các loại thử nghiệm chức năng.

Phiên bản pytest mới nhất là gì?

pytest 7. 1. 0 (13-03-2022)

Pytest có phải là TDD không?

Phát triển dựa trên thử nghiệm (TDD) là một phương pháp phát triển phần mềm yêu cầu chúng tôi viết thử nghiệm dần dần cho các tính năng mà chúng tôi muốn thêm vào. Nó tận dụng các bộ thử nghiệm tự động, như pytest - khung thử nghiệm cho các chương trình Python .