Hướng dẫn how do i test a python script? - làm cách nào để kiểm tra tập lệnh python?

Xem bây giờ hướng dẫn này có một khóa học video liên quan được tạo bởi nhóm Python thực sự. Xem nó cùng với hướng dẫn bằng văn bản để làm sâu sắc thêm sự hiểu biết của bạn: phát triển theo hướng thử nghiệm với pytest This tutorial has a related video course created by the Real Python team. Watch it together with the written tutorial to deepen your understanding: Test-Driven Development With PyTest

Show

Hướng dẫn này dành cho bất cứ ai đã viết một ứng dụng tuyệt vời bằng Python nhưng vẫn chưa viết bất kỳ bài kiểm tra nào.

Thử nghiệm trong Python là một chủ đề lớn và có thể đi kèm với rất nhiều sự phức tạp, nhưng nó không cần phải khó khăn. Bạn có thể bắt đầu tạo các thử nghiệm đơn giản cho ứng dụng của mình trong một vài bước dễ dàng và sau đó xây dựng trên đó từ đó.

Trong hướng dẫn này, bạn sẽ học cách tạo một bài kiểm tra cơ bản, thực hiện nó và tìm các lỗi trước khi người dùng của bạn thực hiện! Bạn sẽ tìm hiểu về các công cụ có sẵn để viết và thực hiện các bài kiểm tra, kiểm tra hiệu suất của ứng dụng của bạn và thậm chí tìm kiếm các vấn đề bảo mật.

Kiểm tra mã của bạn

Có nhiều cách để kiểm tra mã của bạn. Trong hướng dẫn này, bạn sẽ học các kỹ thuật từ các bước cơ bản nhất và hướng tới các phương pháp nâng cao.

Kiểm tra tự động so với kiểm tra thủ công

Tin tốt là, bạn có lẽ đã tạo ra một bài kiểm tra mà không nhận ra nó. Bạn có nhớ khi bạn chạy ứng dụng của mình và sử dụng nó lần đầu tiên không? Bạn đã kiểm tra các tính năng và thử nghiệm bằng cách sử dụng chúng? Đó được gọi là thử nghiệm khám phá và là một hình thức thử nghiệm thủ công.exploratory testing and is a form of manual testing.

Thử nghiệm khám phá là một hình thức thử nghiệm được thực hiện mà không có kế hoạch. Trong một bài kiểm tra khám phá, bạn chỉ cần khám phá ứng dụng.

Để có một bộ kiểm tra thủ công đầy đủ, tất cả những gì bạn cần làm là lập danh sách tất cả các tính năng của ứng dụng của bạn, các loại đầu vào khác nhau có thể chấp nhận và kết quả dự kiến. Bây giờ, mỗi khi bạn thực hiện thay đổi mã của mình, bạn cần phải đi qua từng mục trong danh sách đó và kiểm tra nó.

Điều đó có vẻ như rất nhiều niềm vui, phải không?

Đây là nơi thử nghiệm tự động xuất hiện. Kiểm tra tự động là việc thực hiện kế hoạch thử nghiệm của bạn (các phần của ứng dụng bạn muốn kiểm tra, thứ tự bạn muốn kiểm tra chúng và các phản hồi dự kiến) . Python đã đi kèm với một bộ công cụ và thư viện để giúp bạn tạo các thử nghiệm tự động cho ứng dụng của mình. Chúng tôi sẽ khám phá những công cụ và thư viện trong hướng dẫn này.

Bài kiểm tra đơn vị so với kiểm tra tích hợp

Thế giới thử nghiệm không thiếu thuật ngữ, và bây giờ bạn biết sự khác biệt giữa thử nghiệm tự động và thủ công, đó là thời gian để đi sâu hơn.

Hãy nghĩ về cách bạn có thể kiểm tra đèn trên xe. Bạn sẽ bật đèn (được gọi là bước thử nghiệm) và đi ra ngoài xe hoặc yêu cầu một người bạn kiểm tra xem đèn có bật không (được gọi là khẳng định thử nghiệm). Kiểm tra nhiều thành phần được gọi là thử nghiệm tích hợp.test step) and go outside the car or ask a friend to check that the lights are on (known as the test assertion). Testing multiple components is known as integration testing.

Hãy nghĩ về tất cả những điều cần làm việc chính xác để một nhiệm vụ đơn giản để đưa ra kết quả đúng đắn. Các thành phần này giống như các phần cho ứng dụng của bạn, tất cả các lớp, chức năng và mô -đun mà bạn đã viết.

Một thách thức lớn với thử nghiệm tích hợp là khi một thử nghiệm tích hợp không cho kết quả đúng. Nó rất khó để chẩn đoán vấn đề mà không thể cô lập phần nào của hệ thống đang thất bại. Nếu đèn không bật, thì có lẽ các bóng đèn bị hỏng. Pin có chết không? Còn máy phát điện thì sao? Máy tính xe hơi có bị lỗi không?

Nếu bạn có một chiếc xe hiện đại lạ mắt, nó sẽ cho bạn biết khi bóng đèn của bạn đã biến mất. Nó thực hiện điều này bằng cách sử dụng một hình thức kiểm tra đơn vị.unit test.

Một bài kiểm tra đơn vị là một thử nghiệm nhỏ hơn, một thử nghiệm xem một thành phần duy nhất có hoạt động đúng cách không. Một bài kiểm tra đơn vị giúp bạn cô lập những gì bị hỏng trong ứng dụng của bạn và sửa nó nhanh hơn.

Bạn vừa thấy hai loại bài kiểm tra:

  1. Kiểm tra tích hợp kiểm tra các thành phần trong ứng dụng của bạn hoạt động với nhau.
  2. Một bài kiểm tra đơn vị kiểm tra một thành phần nhỏ trong ứng dụng của bạn.

Bạn có thể viết cả kiểm tra tích hợp và kiểm tra đơn vị trong Python. Để viết một bài kiểm tra đơn vị cho chức năng tích hợp

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

def test_sum_tuple():
    assert sum((1, 2, 2)) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    test_sum_tuple()
    print("Everything passed")
3, bạn sẽ kiểm tra đầu ra của
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

def test_sum_tuple():
    assert sum((1, 2, 2)) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    test_sum_tuple()
    print("Everything passed")
3 so với đầu ra đã biết.

Ví dụ: ở đây, cách bạn kiểm tra xem

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

def test_sum_tuple():
    assert sum((1, 2, 2)) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    test_sum_tuple()
    print("Everything passed")
3 của các số
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

def test_sum_tuple():
    assert sum((1, 2, 2)) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    test_sum_tuple()
    print("Everything passed")
6 bằng
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

def test_sum_tuple():
    assert sum((1, 2, 2)) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    test_sum_tuple()
    print("Everything passed")
7:

>>>

>>> assert sum([1, 2, 3]) == 6, "Should be 6"

Điều này sẽ không xuất ra bất cứ điều gì trên repress vì các giá trị là chính xác.

Nếu kết quả từ

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

def test_sum_tuple():
    assert sum((1, 2, 2)) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    test_sum_tuple()
    print("Everything passed")
3 không chính xác, điều này sẽ thất bại với
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

def test_sum_tuple():
    assert sum((1, 2, 2)) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    test_sum_tuple()
    print("Everything passed")
9 và tin nhắn
$ python test_sum_2.py
Traceback (most recent call last):
  File "test_sum_2.py", line 9, in 
    test_sum_tuple()
  File "test_sum_2.py", line 5, in test_sum_tuple
    assert sum((1, 2, 2)) == 6, "Should be 6"
AssertionError: Should be 6
0. Hãy thử lại câu lệnh xác nhận với các giá trị sai để xem
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

def test_sum_tuple():
    assert sum((1, 2, 2)) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    test_sum_tuple()
    print("Everything passed")
9:

>>>

>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6

Điều này sẽ không xuất ra bất cứ điều gì trên repress vì các giá trị là chính xác.

Nếu kết quả từ

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

def test_sum_tuple():
    assert sum((1, 2, 2)) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    test_sum_tuple()
    print("Everything passed")
3 không chính xác, điều này sẽ thất bại với
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

def test_sum_tuple():
    assert sum((1, 2, 2)) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    test_sum_tuple()
    print("Everything passed")
9 và tin nhắn
$ python test_sum_2.py
Traceback (most recent call last):
  File "test_sum_2.py", line 9, in 
    test_sum_tuple()
  File "test_sum_2.py", line 5, in test_sum_tuple
    assert sum((1, 2, 2)) == 6, "Should be 6"
AssertionError: Should be 6
0. Hãy thử lại câu lệnh xác nhận với các giá trị sai để xem
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

def test_sum_tuple():
    assert sum((1, 2, 2)) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    test_sum_tuple()
    print("Everything passed")
9:

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")

Trong bản sao, bạn đang thấy

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

def test_sum_tuple():
    assert sum((1, 2, 2)) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    test_sum_tuple()
    print("Everything passed")
9 được nâng lên vì kết quả của
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

def test_sum_tuple():
    assert sum((1, 2, 2)) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    test_sum_tuple()
    print("Everything passed")
3 không khớp với
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

def test_sum_tuple():
    assert sum((1, 2, 2)) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    test_sum_tuple()
    print("Everything passed")
7.test case, an assertion, and an entry point (the command line). You can now execute this at the command line:

$ python test_sum.py
Everything passed

Bạn có thể thấy kết quả thành công,

$ python test_sum_2.py
Traceback (most recent call last):
  File "test_sum_2.py", line 9, in 
    test_sum_tuple()
  File "test_sum_2.py", line 5, in test_sum_tuple
    assert sum((1, 2, 2)) == 6, "Should be 6"
AssertionError: Should be 6
6.

Trong Python,

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

def test_sum_tuple():
    assert sum((1, 2, 2)) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    test_sum_tuple()
    print("Everything passed")
3 chấp nhận bất kỳ sự khác biệt nào như đối số đầu tiên của nó. Bạn đã thử nghiệm với một danh sách. Bây giờ kiểm tra với một tuple là tốt. Tạo một tệp mới có tên
$ python test_sum_2.py
Traceback (most recent call last):
  File "test_sum_2.py", line 9, in 
    test_sum_tuple()
  File "test_sum_2.py", line 5, in test_sum_tuple
    assert sum((1, 2, 2)) == 6, "Should be 6"
AssertionError: Should be 6
8 với mã sau:

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

def test_sum_tuple():
    assert sum((1, 2, 2)) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    test_sum_tuple()
    print("Everything passed")

Khi bạn thực thi

$ python test_sum_2.py
Traceback (most recent call last):
  File "test_sum_2.py", line 9, in 
    test_sum_tuple()
  File "test_sum_2.py", line 5, in test_sum_tuple
    assert sum((1, 2, 2)) == 6, "Should be 6"
AssertionError: Should be 6
8, tập lệnh sẽ gây ra lỗi vì
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

def test_sum_tuple():
    assert sum((1, 2, 2)) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    test_sum_tuple()
    print("Everything passed")
3 của
import unittest


class TestSum(unittest.TestCase):

    def test_sum(self):
        self.assertEqual(sum([1, 2, 3]), 6, "Should be 6")

    def test_sum_tuple(self):
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")

if __name__ == '__main__':
    unittest.main()
1 là
import unittest


class TestSum(unittest.TestCase):

    def test_sum(self):
        self.assertEqual(sum([1, 2, 3]), 6, "Should be 6")

    def test_sum_tuple(self):
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")

if __name__ == '__main__':
    unittest.main()
2, không phải
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

def test_sum_tuple():
    assert sum((1, 2, 2)) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    test_sum_tuple()
    print("Everything passed")
7. Kết quả của tập lệnh cung cấp cho bạn thông báo lỗi, dòng mã và dấu vết:

$ python test_sum_2.py
Traceback (most recent call last):
  File "test_sum_2.py", line 9, in 
    test_sum_tuple()
  File "test_sum_2.py", line 5, in test_sum_tuple
    assert sum((1, 2, 2)) == 6, "Should be 6"
AssertionError: Should be 6

Ở đây bạn có thể thấy một lỗi trong mã của bạn gây ra lỗi trên bảng điều khiển với một số thông tin về lỗi ở đâu và kết quả dự kiến ​​là gì.

Viết bài kiểm tra theo cách này là ổn cho một kiểm tra đơn giản, nhưng nếu có nhiều hơn một thất bại? Đây là nơi các vận động viên kiểm tra đến. Người chạy thử là một ứng dụng đặc biệt được thiết kế để chạy thử nghiệm, kiểm tra đầu ra và cung cấp cho bạn các công cụ để gỡ lỗi và chẩn đoán các xét nghiệm và ứng dụng.

Chọn một người chạy thử nghiệm

Có rất nhiều vận động viên kiểm tra có sẵn cho Python. Một cái được xây dựng vào thư viện tiêu chuẩn Python được gọi là

import unittest


class TestSum(unittest.TestCase):

    def test_sum(self):
        self.assertEqual(sum([1, 2, 3]), 6, "Should be 6")

    def test_sum_tuple(self):
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")

if __name__ == '__main__':
    unittest.main()
4. Trong hướng dẫn này, bạn sẽ sử dụng các trường hợp thử nghiệm
import unittest


class TestSum(unittest.TestCase):

    def test_sum(self):
        self.assertEqual(sum([1, 2, 3]), 6, "Should be 6")

    def test_sum_tuple(self):
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")

if __name__ == '__main__':
    unittest.main()
4 và người chạy thử nghiệm
import unittest


class TestSum(unittest.TestCase):

    def test_sum(self):
        self.assertEqual(sum([1, 2, 3]), 6, "Should be 6")

    def test_sum_tuple(self):
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")

if __name__ == '__main__':
    unittest.main()
4. Các nguyên tắc của
import unittest


class TestSum(unittest.TestCase):

    def test_sum(self):
        self.assertEqual(sum([1, 2, 3]), 6, "Should be 6")

    def test_sum_tuple(self):
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")

if __name__ == '__main__':
    unittest.main()
4 dễ dàng di động cho các khung khác. Ba vận động viên thử nghiệm phổ biến nhất là:

  • import unittest
    
    
    class TestSum(unittest.TestCase):
    
        def test_sum(self):
            self.assertEqual(sum([1, 2, 3]), 6, "Should be 6")
    
        def test_sum_tuple(self):
            self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
    
    if __name__ == '__main__':
        unittest.main()
    
    4
  • import unittest
    
    
    class TestSum(unittest.TestCase):
    
        def test_sum(self):
            self.assertEqual(sum([1, 2, 3]), 6, "Should be 6")
    
        def test_sum_tuple(self):
            self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
    
    if __name__ == '__main__':
        unittest.main()
    
    9 hoặc
    $ python test_sum_unittest.py
    .F
    ======================================================================
    FAIL: test_sum_tuple (__main__.TestSum)
    ----------------------------------------------------------------------
    Traceback (most recent call last):
      File "test_sum_unittest.py", line 9, in test_sum_tuple
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
    AssertionError: Should be 6
    
    ----------------------------------------------------------------------
    Ran 2 tests in 0.001s
    
    FAILED (failures=1)
    
    0
  • $ python test_sum_unittest.py
    .F
    ======================================================================
    FAIL: test_sum_tuple (__main__.TestSum)
    ----------------------------------------------------------------------
    Traceback (most recent call last):
      File "test_sum_unittest.py", line 9, in test_sum_tuple
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
    AssertionError: Should be 6
    
    ----------------------------------------------------------------------
    Ran 2 tests in 0.001s
    
    FAILED (failures=1)
    
    1

Chọn người chạy thử nghiệm tốt nhất cho các yêu cầu và mức độ kinh nghiệm của bạn là rất quan trọng.

import unittest


class TestSum(unittest.TestCase):

    def test_sum(self):
        self.assertEqual(sum([1, 2, 3]), 6, "Should be 6")

    def test_sum_tuple(self):
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")

if __name__ == '__main__':
    unittest.main()
4

import unittest


class TestSum(unittest.TestCase):

    def test_sum(self):
        self.assertEqual(sum([1, 2, 3]), 6, "Should be 6")

    def test_sum_tuple(self):
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")

if __name__ == '__main__':
    unittest.main()
4 đã được tích hợp vào thư viện tiêu chuẩn Python kể từ phiên bản 2.1. Bạn có thể thấy nó trong các ứng dụng Python thương mại và các dự án nguồn mở.

import unittest


class TestSum(unittest.TestCase):

    def test_sum(self):
        self.assertEqual(sum([1, 2, 3]), 6, "Should be 6")

    def test_sum_tuple(self):
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")

if __name__ == '__main__':
    unittest.main()
4 chứa cả khung thử nghiệm và người chạy thử nghiệm.
import unittest


class TestSum(unittest.TestCase):

    def test_sum(self):
        self.assertEqual(sum([1, 2, 3]), 6, "Should be 6")

    def test_sum_tuple(self):
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")

if __name__ == '__main__':
    unittest.main()
4 có một số yêu cầu quan trọng để viết và thực hiện các bài kiểm tra.

import unittest


class TestSum(unittest.TestCase):

    def test_sum(self):
        self.assertEqual(sum([1, 2, 3]), 6, "Should be 6")

    def test_sum_tuple(self):
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")

if __name__ == '__main__':
    unittest.main()
4 yêu cầu rằng:

  • Bạn đặt các bài kiểm tra của mình vào các lớp làm phương pháp
  • Bạn sử dụng một loạt các phương thức khẳng định đặc biệt trong lớp
    $ python test_sum_unittest.py
    .F
    ======================================================================
    FAIL: test_sum_tuple (__main__.TestSum)
    ----------------------------------------------------------------------
    Traceback (most recent call last):
      File "test_sum_unittest.py", line 9, in test_sum_tuple
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
    AssertionError: Should be 6
    
    ----------------------------------------------------------------------
    Ran 2 tests in 0.001s
    
    FAILED (failures=1)
    
    7 thay vì câu lệnh
    $ python test_sum_unittest.py
    .F
    ======================================================================
    FAIL: test_sum_tuple (__main__.TestSum)
    ----------------------------------------------------------------------
    Traceback (most recent call last):
      File "test_sum_unittest.py", line 9, in test_sum_tuple
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
    AssertionError: Should be 6
    
    ----------------------------------------------------------------------
    Ran 2 tests in 0.001s
    
    FAILED (failures=1)
    
    8 tích hợp

Để chuyển đổi ví dụ trước đó thành trường hợp kiểm tra

import unittest


class TestSum(unittest.TestCase):

    def test_sum(self):
        self.assertEqual(sum([1, 2, 3]), 6, "Should be 6")

    def test_sum_tuple(self):
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")

if __name__ == '__main__':
    unittest.main()
4, bạn sẽ phải:

  1. Nhập
    import unittest
    
    
    class TestSum(unittest.TestCase):
    
        def test_sum(self):
            self.assertEqual(sum([1, 2, 3]), 6, "Should be 6")
    
        def test_sum_tuple(self):
            self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
    
    if __name__ == '__main__':
        unittest.main()
    
    4 từ thư viện tiêu chuẩn
  2. Tạo một lớp gọi là
    $ pip install nose2
    $ python -m nose2
    .F
    ======================================================================
    FAIL: test_sum_tuple (__main__.TestSum)
    ----------------------------------------------------------------------
    Traceback (most recent call last):
      File "test_sum_unittest.py", line 9, in test_sum_tuple
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
    AssertionError: Should be 6
    
    ----------------------------------------------------------------------
    Ran 2 tests in 0.001s
    
    FAILED (failures=1)
    
    1 kế thừa từ lớp
    $ pip install nose2
    $ python -m nose2
    .F
    ======================================================================
    FAIL: test_sum_tuple (__main__.TestSum)
    ----------------------------------------------------------------------
    Traceback (most recent call last):
      File "test_sum_unittest.py", line 9, in test_sum_tuple
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
    AssertionError: Should be 6
    
    ----------------------------------------------------------------------
    Ran 2 tests in 0.001s
    
    FAILED (failures=1)
    
    2
  3. Chuyển đổi các chức năng kiểm tra thành các phương thức bằng cách thêm
    $ pip install nose2
    $ python -m nose2
    .F
    ======================================================================
    FAIL: test_sum_tuple (__main__.TestSum)
    ----------------------------------------------------------------------
    Traceback (most recent call last):
      File "test_sum_unittest.py", line 9, in test_sum_tuple
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
    AssertionError: Should be 6
    
    ----------------------------------------------------------------------
    Ran 2 tests in 0.001s
    
    FAILED (failures=1)
    
    3 làm đối số đầu tiên
  4. Thay đổi các xác nhận để sử dụng phương thức
    $ pip install nose2
    $ python -m nose2
    .F
    ======================================================================
    FAIL: test_sum_tuple (__main__.TestSum)
    ----------------------------------------------------------------------
    Traceback (most recent call last):
      File "test_sum_unittest.py", line 9, in test_sum_tuple
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
    AssertionError: Should be 6
    
    ----------------------------------------------------------------------
    Ran 2 tests in 0.001s
    
    FAILED (failures=1)
    
    4 trên lớp
    $ pip install nose2
    $ python -m nose2
    .F
    ======================================================================
    FAIL: test_sum_tuple (__main__.TestSum)
    ----------------------------------------------------------------------
    Traceback (most recent call last):
      File "test_sum_unittest.py", line 9, in test_sum_tuple
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
    AssertionError: Should be 6
    
    ----------------------------------------------------------------------
    Ran 2 tests in 0.001s
    
    FAILED (failures=1)
    
    2
  5. Thay đổi điểm nhập dòng lệnh để gọi
    $ pip install nose2
    $ python -m nose2
    .F
    ======================================================================
    FAIL: test_sum_tuple (__main__.TestSum)
    ----------------------------------------------------------------------
    Traceback (most recent call last):
      File "test_sum_unittest.py", line 9, in test_sum_tuple
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
    AssertionError: Should be 6
    
    ----------------------------------------------------------------------
    Ran 2 tests in 0.001s
    
    FAILED (failures=1)
    
    6

Thực hiện theo các bước đó bằng cách tạo một tệp mới

$ pip install nose2
$ python -m nose2
.F
======================================================================
FAIL: test_sum_tuple (__main__.TestSum)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_sum_unittest.py", line 9, in test_sum_tuple
    self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
AssertionError: Should be 6

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)
7 với mã sau:

import unittest


class TestSum(unittest.TestCase):

    def test_sum(self):
        self.assertEqual(sum([1, 2, 3]), 6, "Should be 6")

    def test_sum_tuple(self):
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")

if __name__ == '__main__':
    unittest.main()

Nếu bạn thực hiện điều này ở dòng lệnh, bạn sẽ thấy một thành công (được biểu thị bằng

$ pip install nose2
$ python -m nose2
.F
======================================================================
FAIL: test_sum_tuple (__main__.TestSum)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_sum_unittest.py", line 9, in test_sum_tuple
    self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
AssertionError: Should be 6

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)
8) và một lỗi (được chỉ ra với
$ pip install nose2
$ python -m nose2
.F
======================================================================
FAIL: test_sum_tuple (__main__.TestSum)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_sum_unittest.py", line 9, in test_sum_tuple
    self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
AssertionError: Should be 6

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)
9):

$ python test_sum_unittest.py
.F
======================================================================
FAIL: test_sum_tuple (__main__.TestSum)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_sum_unittest.py", line 9, in test_sum_tuple
    self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
AssertionError: Should be 6

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)

Bạn vừa thực hiện hai thử nghiệm bằng cách sử dụng

import unittest


class TestSum(unittest.TestCase):

    def test_sum(self):
        self.assertEqual(sum([1, 2, 3]), 6, "Should be 6")

    def test_sum_tuple(self):
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")

if __name__ == '__main__':
    unittest.main()
4 Runner.

Để biết thêm thông tin về

import unittest


class TestSum(unittest.TestCase):

    def test_sum(self):
        self.assertEqual(sum([1, 2, 3]), 6, "Should be 6")

    def test_sum_tuple(self):
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")

if __name__ == '__main__':
    unittest.main()
4, bạn có thể khám phá tài liệu nhất quán.

import unittest


class TestSum(unittest.TestCase):

    def test_sum(self):
        self.assertEqual(sum([1, 2, 3]), 6, "Should be 6")

    def test_sum_tuple(self):
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")

if __name__ == '__main__':
    unittest.main()
9

Bạn có thể thấy rằng theo thời gian, khi bạn viết hàng trăm hoặc thậm chí hàng ngàn bài kiểm tra cho ứng dụng của bạn, nó ngày càng khó hiểu và sử dụng đầu ra từ

import unittest


class TestSum(unittest.TestCase):

    def test_sum(self):
        self.assertEqual(sum([1, 2, 3]), 6, "Should be 6")

    def test_sum_tuple(self):
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")

if __name__ == '__main__':
    unittest.main()
4.

import unittest


class TestSum(unittest.TestCase):

    def test_sum(self):
        self.assertEqual(sum([1, 2, 3]), 6, "Should be 6")

    def test_sum_tuple(self):
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")

if __name__ == '__main__':
    unittest.main()
9 tương thích với bất kỳ thử nghiệm nào được viết bằng khung
import unittest


class TestSum(unittest.TestCase):

    def test_sum(self):
        self.assertEqual(sum([1, 2, 3]), 6, "Should be 6")

    def test_sum_tuple(self):
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")

if __name__ == '__main__':
    unittest.main()
4 và có thể được sử dụng làm thay thế cho người chạy thử nghiệm
import unittest


class TestSum(unittest.TestCase):

    def test_sum(self):
        self.assertEqual(sum([1, 2, 3]), 6, "Should be 6")

    def test_sum_tuple(self):
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")

if __name__ == '__main__':
    unittest.main()
4. Sự phát triển của
import unittest


class TestSum(unittest.TestCase):

    def test_sum(self):
        self.assertEqual(sum([1, 2, 3]), 6, "Should be 6")

    def test_sum_tuple(self):
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")

if __name__ == '__main__':
    unittest.main()
9 như một ứng dụng nguồn mở bị tụt lại phía sau và một cái nĩa gọi là
$ python test_sum_unittest.py
.F
======================================================================
FAIL: test_sum_tuple (__main__.TestSum)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_sum_unittest.py", line 9, in test_sum_tuple
    self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
AssertionError: Should be 6

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)
0 đã được tạo ra. Nếu bạn bắt đầu từ đầu, bạn nên sử dụng
$ python test_sum_unittest.py
.F
======================================================================
FAIL: test_sum_tuple (__main__.TestSum)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_sum_unittest.py", line 9, in test_sum_tuple
    self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
AssertionError: Should be 6

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)
0 thay vì
import unittest


class TestSum(unittest.TestCase):

    def test_sum(self):
        self.assertEqual(sum([1, 2, 3]), 6, "Should be 6")

    def test_sum_tuple(self):
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")

if __name__ == '__main__':
    unittest.main()
9.

Để bắt đầu với

$ python test_sum_unittest.py
.F
======================================================================
FAIL: test_sum_tuple (__main__.TestSum)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_sum_unittest.py", line 9, in test_sum_tuple
    self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
AssertionError: Should be 6

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)
0, cài đặt
$ python test_sum_unittest.py
.F
======================================================================
FAIL: test_sum_tuple (__main__.TestSum)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_sum_unittest.py", line 9, in test_sum_tuple
    self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
AssertionError: Should be 6

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)
0 từ PYPI và thực thi nó trên dòng lệnh.
$ python test_sum_unittest.py
.F
======================================================================
FAIL: test_sum_tuple (__main__.TestSum)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_sum_unittest.py", line 9, in test_sum_tuple
    self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
AssertionError: Should be 6

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)
0 sẽ cố gắng khám phá tất cả các tập lệnh kiểm tra có tên
>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
04 và các trường hợp kiểm tra kế thừa từ
$ python test_sum_unittest.py
.F
======================================================================
FAIL: test_sum_tuple (__main__.TestSum)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_sum_unittest.py", line 9, in test_sum_tuple
    self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
AssertionError: Should be 6

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)
7 trong thư mục hiện tại của bạn:

$ pip install nose2
$ python -m nose2
.F
======================================================================
FAIL: test_sum_tuple (__main__.TestSum)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_sum_unittest.py", line 9, in test_sum_tuple
    self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
AssertionError: Should be 6

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)

Bạn vừa thực hiện bài kiểm tra bạn đã tạo trong

$ pip install nose2
$ python -m nose2
.F
======================================================================
FAIL: test_sum_tuple (__main__.TestSum)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_sum_unittest.py", line 9, in test_sum_tuple
    self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
AssertionError: Should be 6

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)
7 từ người chạy thử nghiệm
$ python test_sum_unittest.py
.F
======================================================================
FAIL: test_sum_tuple (__main__.TestSum)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_sum_unittest.py", line 9, in test_sum_tuple
    self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
AssertionError: Should be 6

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)
0.
$ python test_sum_unittest.py
.F
======================================================================
FAIL: test_sum_tuple (__main__.TestSum)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_sum_unittest.py", line 9, in test_sum_tuple
    self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
AssertionError: Should be 6

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)
0 cung cấp nhiều cờ dòng lệnh để lọc các bài kiểm tra mà bạn thực hiện. Để biết thêm thông tin, bạn có thể khám phá tài liệu mũi 2.

$ python test_sum_unittest.py
.F
======================================================================
FAIL: test_sum_tuple (__main__.TestSum)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_sum_unittest.py", line 9, in test_sum_tuple
    self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
AssertionError: Should be 6

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)
1

$ python test_sum_unittest.py
.F
======================================================================
FAIL: test_sum_tuple (__main__.TestSum)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_sum_unittest.py", line 9, in test_sum_tuple
    self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
AssertionError: Should be 6

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)
1 hỗ trợ thực hiện các trường hợp kiểm tra
import unittest


class TestSum(unittest.TestCase):

    def test_sum(self):
        self.assertEqual(sum([1, 2, 3]), 6, "Should be 6")

    def test_sum_tuple(self):
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")

if __name__ == '__main__':
    unittest.main()
4. Ưu điểm thực sự của
$ python test_sum_unittest.py
.F
======================================================================
FAIL: test_sum_tuple (__main__.TestSum)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_sum_unittest.py", line 9, in test_sum_tuple
    self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
AssertionError: Should be 6

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)
1 đến bằng cách viết
$ python test_sum_unittest.py
.F
======================================================================
FAIL: test_sum_tuple (__main__.TestSum)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_sum_unittest.py", line 9, in test_sum_tuple
    self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
AssertionError: Should be 6

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)
1 Các trường hợp thử nghiệm.
$ python test_sum_unittest.py
.F
======================================================================
FAIL: test_sum_tuple (__main__.TestSum)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_sum_unittest.py", line 9, in test_sum_tuple
    self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
AssertionError: Should be 6

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)
1 Các trường hợp thử nghiệm là một loạt các chức năng trong tệp Python bắt đầu với tên
>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
15.

$ python test_sum_unittest.py
.F
======================================================================
FAIL: test_sum_tuple (__main__.TestSum)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_sum_unittest.py", line 9, in test_sum_tuple
    self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
AssertionError: Should be 6

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)
1 có một số tính năng tuyệt vời khác:

  • Hỗ trợ cho câu lệnh
    $ python test_sum_unittest.py
    .F
    ======================================================================
    FAIL: test_sum_tuple (__main__.TestSum)
    ----------------------------------------------------------------------
    Traceback (most recent call last):
      File "test_sum_unittest.py", line 9, in test_sum_tuple
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
    AssertionError: Should be 6
    
    ----------------------------------------------------------------------
    Ran 2 tests in 0.001s
    
    FAILED (failures=1)
    
    8 tích hợp thay vì sử dụng các phương thức
    >>> assert sum([1, 1, 1]) == 6, "Should be 6"
    Traceback (most recent call last):
      File "", line 1, in 
    AssertionError: Should be 6
    
    18 đặc biệt
  • Hỗ trợ lọc cho các trường hợp thử nghiệm
  • Khả năng chạy lại từ bài kiểm tra thất bại cuối cùng
  • Một hệ sinh thái gồm hàng trăm plugin để mở rộng chức năng

Viết ví dụ trường hợp kiểm tra

$ pip install nose2
$ python -m nose2
.F
======================================================================
FAIL: test_sum_tuple (__main__.TestSum)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_sum_unittest.py", line 9, in test_sum_tuple
    self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
AssertionError: Should be 6

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)
1 cho
$ python test_sum_unittest.py
.F
======================================================================
FAIL: test_sum_tuple (__main__.TestSum)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_sum_unittest.py", line 9, in test_sum_tuple
    self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
AssertionError: Should be 6

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)
1 sẽ trông như thế này:

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

def test_sum_tuple():
    assert sum((1, 2, 2)) == 6, "Should be 6"

Bạn đã bỏ

$ pip install nose2
$ python -m nose2
.F
======================================================================
FAIL: test_sum_tuple (__main__.TestSum)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_sum_unittest.py", line 9, in test_sum_tuple
    self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
AssertionError: Should be 6

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)
2, bất kỳ việc sử dụng các lớp và điểm nhập dòng lệnh.

Thông tin thêm có thể được tìm thấy tại trang web tài liệu pytest.

Viết bài kiểm tra đầu tiên của bạn

Hãy cùng nhau tập hợp những gì bạn đã học được cho đến nay và thay vì kiểm tra chức năng

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

def test_sum_tuple():
    assert sum((1, 2, 2)) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    test_sum_tuple()
    print("Everything passed")
3 tích hợp, hãy kiểm tra một triển khai đơn giản của cùng một yêu cầu.

Tạo một thư mục dự án mới và, bên trong đó, tạo một thư mục mới có tên là

>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
23. Bên trong
>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
23, tạo một tệp trống có tên
>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
25. Tạo tệp
>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
25 có nghĩa là thư mục
>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
23 có thể được nhập dưới dạng mô -đun từ thư mục chính.

Thư mục dự án của bạn sẽ trông như thế này:

>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
0

Mở ra

>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
28 và tạo một hàm mới có tên
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

def test_sum_tuple():
    assert sum((1, 2, 2)) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    test_sum_tuple()
    print("Everything passed")
3, có thể điều chỉnh được (một danh sách, tuple hoặc set) và thêm các giá trị lại với nhau:

>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
1

Ví dụ mã này tạo ra một biến gọi là

>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
30, lặp lại tất cả các giá trị trong
>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
31 và thêm chúng vào
>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
30. Sau đó, nó trả về kết quả một khi có thể cạn kiệt.

Viết bài kiểm tra ở đâu

Để bắt đầu viết bài kiểm tra, bạn chỉ cần tạo một tệp có tên

>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
33, sẽ chứa trường hợp thử nghiệm đầu tiên của bạn. Vì tệp sẽ cần có thể nhập ứng dụng của bạn để có thể kiểm tra nó, bạn muốn đặt
>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
33 trên thư mục gói, vì vậy cây thư mục của bạn sẽ trông giống như thế này:

>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
2

Bạn sẽ thấy rằng, khi bạn thêm ngày càng nhiều thử nghiệm, tệp đơn của bạn sẽ trở nên lộn xộn và khó duy trì, vì vậy bạn có thể tạo một thư mục có tên

>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
35 và chia các thử nghiệm thành nhiều tệp. Đó là quy ước để đảm bảo mỗi tệp bắt đầu với
>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
15 vì vậy tất cả các vận động viên kiểm tra sẽ cho rằng tệp Python chứa các thử nghiệm sẽ được thực thi. Một số dự án rất lớn chia các bài kiểm tra thành các thư mục con dựa trên mục đích hoặc cách sử dụng của chúng.

Cách cấu trúc một bài kiểm tra đơn giản

Trước khi bạn đi sâu vào các bài kiểm tra viết, trước tiên bạn sẽ muốn đưa ra một vài quyết định:

  1. Bạn muốn kiểm tra điều gì?
  2. Bạn đang viết một bài kiểm tra đơn vị hoặc kiểm tra tích hợp?

Sau đó, cấu trúc của một bài kiểm tra sẽ tuân theo quy trình công việc này một cách lỏng lẻo:

  1. Tạo đầu vào của bạn
  2. Thực thi mã đang được kiểm tra, nắm bắt đầu ra
  3. So sánh đầu ra với kết quả dự kiến

Đối với ứng dụng này, bạn đã thử nghiệm

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

def test_sum_tuple():
    assert sum((1, 2, 2)) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    test_sum_tuple()
    print("Everything passed")
3. Có nhiều hành vi trong
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

def test_sum_tuple():
    assert sum((1, 2, 2)) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    test_sum_tuple()
    print("Everything passed")
3 bạn có thể kiểm tra, chẳng hạn như:

  • Nó có thể tổng hợp một danh sách toàn bộ số (số nguyên) không?
  • Nó có thể tổng hợp một tuple hoặc đặt?
  • Nó có thể tổng hợp một danh sách phao không?
  • Điều gì xảy ra khi bạn cung cấp cho nó một giá trị xấu, chẳng hạn như một số nguyên hoặc một chuỗi?
  • Điều gì xảy ra khi một trong các giá trị là âm?

Bài kiểm tra đơn giản nhất sẽ là một danh sách các số nguyên. Tạo một tệp,

>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
33 với mã Python sau:

>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
3

Ví dụ về mã này:

  1. Nhập

    def test_sum():
        assert sum([1, 2, 3]) == 6, "Should be 6"
    
    def test_sum_tuple():
        assert sum((1, 2, 2)) == 6, "Should be 6"
    
    if __name__ == "__main__":
        test_sum()
        test_sum_tuple()
        print("Everything passed")
    
    3 từ gói
    >>> assert sum([1, 1, 1]) == 6, "Should be 6"
    Traceback (most recent call last):
      File "", line 1, in 
    AssertionError: Should be 6
    
    23 bạn đã tạo

  2. Xác định một lớp trường hợp thử nghiệm mới được gọi là

    $ pip install nose2
    $ python -m nose2
    .F
    ======================================================================
    FAIL: test_sum_tuple (__main__.TestSum)
    ----------------------------------------------------------------------
    Traceback (most recent call last):
      File "test_sum_unittest.py", line 9, in test_sum_tuple
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
    AssertionError: Should be 6
    
    ----------------------------------------------------------------------
    Ran 2 tests in 0.001s
    
    FAILED (failures=1)
    
    1, được kế thừa từ
    $ python test_sum_unittest.py
    .F
    ======================================================================
    FAIL: test_sum_tuple (__main__.TestSum)
    ----------------------------------------------------------------------
    Traceback (most recent call last):
      File "test_sum_unittest.py", line 9, in test_sum_tuple
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
    AssertionError: Should be 6
    
    ----------------------------------------------------------------------
    Ran 2 tests in 0.001s
    
    FAILED (failures=1)
    
    7

  3. Xác định một phương pháp kiểm tra,

    >>> assert sum([1, 1, 1]) == 6, "Should be 6"
    Traceback (most recent call last):
      File "", line 1, in 
    AssertionError: Should be 6
    
    44, để kiểm tra danh sách các số nguyên. Phương pháp
    >>> assert sum([1, 1, 1]) == 6, "Should be 6"
    Traceback (most recent call last):
      File "", line 1, in 
    AssertionError: Should be 6
    
    44 sẽ:

    • Khai báo một biến
      >>> assert sum([1, 1, 1]) == 6, "Should be 6"
      Traceback (most recent call last):
        File "", line 1, in 
      AssertionError: Should be 6
      
      46 với danh sách các số
      def test_sum():
          assert sum([1, 2, 3]) == 6, "Should be 6"
      
      def test_sum_tuple():
          assert sum((1, 2, 2)) == 6, "Should be 6"
      
      if __name__ == "__main__":
          test_sum()
          test_sum_tuple()
          print("Everything passed")
      
      6
    • Gán kết quả của
      >>> assert sum([1, 1, 1]) == 6, "Should be 6"
      Traceback (most recent call last):
        File "", line 1, in 
      AssertionError: Should be 6
      
      48 cho biến
      >>> assert sum([1, 1, 1]) == 6, "Should be 6"
      Traceback (most recent call last):
        File "", line 1, in 
      AssertionError: Should be 6
      
      49
    • Khẳng định rằng giá trị của
      >>> assert sum([1, 1, 1]) == 6, "Should be 6"
      Traceback (most recent call last):
        File "", line 1, in 
      AssertionError: Should be 6
      
      49 bằng
      def test_sum():
          assert sum([1, 2, 3]) == 6, "Should be 6"
      
      def test_sum_tuple():
          assert sum((1, 2, 2)) == 6, "Should be 6"
      
      if __name__ == "__main__":
          test_sum()
          test_sum_tuple()
          print("Everything passed")
      
      7 bằng cách sử dụng phương thức
      >>> assert sum([1, 1, 1]) == 6, "Should be 6"
      Traceback (most recent call last):
        File "", line 1, in 
      AssertionError: Should be 6
      
      52 trên lớp
      $ python test_sum_unittest.py
      .F
      ======================================================================
      FAIL: test_sum_tuple (__main__.TestSum)
      ----------------------------------------------------------------------
      Traceback (most recent call last):
        File "test_sum_unittest.py", line 9, in test_sum_tuple
          self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
      AssertionError: Should be 6
      
      ----------------------------------------------------------------------
      Ran 2 tests in 0.001s
      
      FAILED (failures=1)
      
      7
  4. Xác định điểm vào dòng lệnh, chạy bộ kiểm tra

    import unittest
    
    
    class TestSum(unittest.TestCase):
    
        def test_sum(self):
            self.assertEqual(sum([1, 2, 3]), 6, "Should be 6")
    
        def test_sum_tuple(self):
            self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
    
    if __name__ == '__main__':
        unittest.main()
    
    4
    >>> assert sum([1, 1, 1]) == 6, "Should be 6"
    Traceback (most recent call last):
      File "", line 1, in 
    AssertionError: Should be 6
    
    55

Nếu bạn không chắc chắn

$ pip install nose2
$ python -m nose2
.F
======================================================================
FAIL: test_sum_tuple (__main__.TestSum)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_sum_unittest.py", line 9, in test_sum_tuple
    self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
AssertionError: Should be 6

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)
3 là gì hoặc
>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
52 được xác định như thế nào, bạn có thể đánh vào chương trình hướng đối tượng của mình với lập trình hướng đối tượng Python 3.

Cách viết các xác nhận

Bước cuối cùng của việc viết bài kiểm tra là xác nhận đầu ra so với phản hồi đã biết. Điều này được gọi là một khẳng định. Có một số thực tiễn tốt nhất xung quanh cách viết khẳng định:assertion. There are some general best practices around how to write assertions:

  • Đảm bảo các bài kiểm tra có thể lặp lại và chạy bài kiểm tra của bạn nhiều lần để đảm bảo nó mang lại kết quả tương tự mỗi lần
  • Hãy thử và khẳng định các kết quả liên quan đến dữ liệu đầu vào của bạn, chẳng hạn như kiểm tra xem kết quả là tổng giá trị thực tế trong ví dụ
    def test_sum():
        assert sum([1, 2, 3]) == 6, "Should be 6"
    
    def test_sum_tuple():
        assert sum((1, 2, 2)) == 6, "Should be 6"
    
    if __name__ == "__main__":
        test_sum()
        test_sum_tuple()
        print("Everything passed")
    
    3

import unittest


class TestSum(unittest.TestCase):

    def test_sum(self):
        self.assertEqual(sum([1, 2, 3]), 6, "Should be 6")

    def test_sum_tuple(self):
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")

if __name__ == '__main__':
    unittest.main()
4 đi kèm với rất nhiều phương pháp để khẳng định các giá trị, loại và sự tồn tại của các biến. Dưới đây là một số phương pháp được sử dụng phổ biến nhất:

Phương phápTương đương với
>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
60
>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
61
>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
62
>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
63
>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
64
>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
65
>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
66
>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
67
>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
68
>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
69
>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
70
>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
71
>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
72
>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
73

>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
74,
>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
75,
>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
76 và
>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
77 đều có các phương pháp ngược lại, được đặt tên là
>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
78, v.v.

Phản ứng phụ

Khi bạn viết các bài kiểm tra, nó thường không đơn giản như nhìn vào giá trị trả về của một hàm. Thông thường, việc thực thi một đoạn mã sẽ thay đổi những thứ khác trong môi trường, chẳng hạn như thuộc tính của một lớp, một tệp trên hệ thống tập tin hoặc giá trị trong cơ sở dữ liệu. Chúng được gọi là tác dụng phụ và là một phần quan trọng của thử nghiệm. Quyết định xem tác dụng phụ đang được kiểm tra trước khi đưa nó vào danh sách các xác nhận của bạn.side effects and are an important part of testing. Decide if the side effect is being tested before including it in your list of assertions.

Nếu bạn thấy rằng đơn vị mã bạn muốn kiểm tra có rất nhiều tác dụng phụ, bạn có thể phá vỡ nguyên tắc trách nhiệm duy nhất. Phá vỡ nguyên tắc trách nhiệm duy nhất có nghĩa là phần mã đang làm quá nhiều thứ và sẽ tốt hơn khi được tái cấu trúc. Theo nguyên tắc trách nhiệm duy nhất là một cách tuyệt vời để thiết kế mã dễ dàng để viết các bài kiểm tra đơn vị đơn giản và lặp lại và cuối cùng là các ứng dụng đáng tin cậy.

Thực hiện bài kiểm tra đầu tiên của bạn

Bây giờ bạn đã tạo ra thử nghiệm đầu tiên, bạn muốn thực hiện nó. Chắc chắn, bạn biết nó sẽ vượt qua, nhưng trước khi bạn tạo các bài kiểm tra phức tạp hơn, bạn nên kiểm tra xem bạn có thể thực hiện các bài kiểm tra thành công không.

Thực hiện các vận động viên kiểm tra

Ứng dụng Python thực thi mã kiểm tra của bạn, kiểm tra các xác nhận và cung cấp cho bạn kết quả kiểm tra trong bảng điều khiển của bạn được gọi là người chạy thử.test runner.

Ở dưới cùng của

>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
33, bạn đã thêm đoạn mã nhỏ này:

>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
4

Đây là một điểm nhập dòng lệnh. Điều đó có nghĩa là nếu bạn thực hiện tập lệnh một mình bằng cách chạy

>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
80 tại dòng lệnh, nó sẽ gọi
$ pip install nose2
$ python -m nose2
.F
======================================================================
FAIL: test_sum_tuple (__main__.TestSum)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_sum_unittest.py", line 9, in test_sum_tuple
    self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
AssertionError: Should be 6

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)
6. Điều này thực thi người chạy thử nghiệm bằng cách khám phá tất cả các lớp trong tệp này kế thừa từ
$ python test_sum_unittest.py
.F
======================================================================
FAIL: test_sum_tuple (__main__.TestSum)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_sum_unittest.py", line 9, in test_sum_tuple
    self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
AssertionError: Should be 6

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)
7.

Đây là một trong nhiều cách để thực hiện người chạy thử nghiệm

import unittest


class TestSum(unittest.TestCase):

    def test_sum(self):
        self.assertEqual(sum([1, 2, 3]), 6, "Should be 6")

    def test_sum_tuple(self):
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")

if __name__ == '__main__':
    unittest.main()
4. Khi bạn có một tệp kiểm tra có tên
>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
33, gọi
>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
80 là một cách tuyệt vời để bắt đầu.

Một cách khác là sử dụng dòng lệnh

import unittest


class TestSum(unittest.TestCase):

    def test_sum(self):
        self.assertEqual(sum([1, 2, 3]), 6, "Should be 6")

    def test_sum_tuple(self):
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")

if __name__ == '__main__':
    unittest.main()
4. Thử cái này:

>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
5

Điều này sẽ thực thi cùng một mô -đun thử nghiệm (được gọi là

>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
87) thông qua dòng lệnh.

Bạn có thể cung cấp các tùy chọn bổ sung để thay đổi đầu ra. Một trong số đó là

>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
88 cho dài dòng. Hãy thử điều đó tiếp theo:

>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
6

Điều này đã thực hiện một thử nghiệm bên trong

>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
33 và in kết quả vào bảng điều khiển. Chế độ Verbose liệt kê tên của các thử nghiệm mà nó thực hiện trước, cùng với kết quả của mỗi bài kiểm tra.

Thay vì cung cấp tên của một mô-đun có chứa các bài kiểm tra, bạn có thể yêu cầu khám phá tự động bằng cách sử dụng những điều sau:

>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
7

Điều này sẽ tìm kiếm thư mục hiện tại cho bất kỳ tệp nào có tên

>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
04 và cố gắng kiểm tra chúng.

Khi bạn có nhiều tệp kiểm tra, miễn là bạn theo mẫu đặt tên

>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
04, bạn có thể cung cấp tên của thư mục thay vì sử dụng cờ
>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
92 và tên của thư mục:

>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
8

import unittest


class TestSum(unittest.TestCase):

    def test_sum(self):
        self.assertEqual(sum([1, 2, 3]), 6, "Should be 6")

    def test_sum_tuple(self):
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")

if __name__ == '__main__':
    unittest.main()
4 sẽ chạy tất cả các thử nghiệm trong một kế hoạch thử nghiệm duy nhất và cung cấp cho bạn kết quả.

Cuối cùng, nếu mã nguồn của bạn không nằm trong root thư mục và có trong thư mục con, ví dụ trong thư mục có tên

>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
94, bạn có thể nói
import unittest


class TestSum(unittest.TestCase):

    def test_sum(self):
        self.assertEqual(sum([1, 2, 3]), 6, "Should be 6")

    def test_sum_tuple(self):
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")

if __name__ == '__main__':
    unittest.main()
4 để thực hiện các thử nghiệm để nó có thể nhập chính xác các mô -đun bằng cờ
>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
96:

>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
9

import unittest


class TestSum(unittest.TestCase):

    def test_sum(self):
        self.assertEqual(sum([1, 2, 3]), 6, "Should be 6")

    def test_sum_tuple(self):
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")

if __name__ == '__main__':
    unittest.main()
4 sẽ thay đổi thành thư mục
>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
94, quét cho tất cả các tệp
>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
04 bên trong thư mục
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
00 và thực thi chúng.

Hiểu đầu ra kiểm tra

Đó là một ví dụ rất đơn giản trong đó mọi thứ trôi qua, vì vậy bây giờ bạn sẽ thử một bài kiểm tra thất bại và giải thích đầu ra.

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

def test_sum_tuple():
    assert sum((1, 2, 2)) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    test_sum_tuple()
    print("Everything passed")
3 sẽ có thể chấp nhận các danh sách các loại số khác, như phân số.

Ở đầu tệp

>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
33, thêm một câu lệnh nhập để nhập loại
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
03 từ mô -đun
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
04 trong thư viện tiêu chuẩn:

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
0

Bây giờ thêm một bài kiểm tra với một khẳng định mong đợi giá trị không chính xác, trong trường hợp này mong đợi tổng số 1/4, 1/4 và 2/5 là 1:

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
1

Nếu bạn thực hiện lại các bài kiểm tra với

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
05, bạn sẽ thấy đầu ra sau:

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
2

Trong đầu ra, bạn sẽ thấy các thông tin sau:

  1. Dòng đầu tiên cho thấy kết quả thực thi của tất cả các thử nghiệm, một lần thất bại (

    $ pip install nose2
    $ python -m nose2
    .F
    ======================================================================
    FAIL: test_sum_tuple (__main__.TestSum)
    ----------------------------------------------------------------------
    Traceback (most recent call last):
      File "test_sum_unittest.py", line 9, in test_sum_tuple
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
    AssertionError: Should be 6
    
    ----------------------------------------------------------------------
    Ran 2 tests in 0.001s
    
    FAILED (failures=1)
    
    9) và một lần được thông qua (
    $ pip install nose2
    $ python -m nose2
    .F
    ======================================================================
    FAIL: test_sum_tuple (__main__.TestSum)
    ----------------------------------------------------------------------
    Traceback (most recent call last):
      File "test_sum_unittest.py", line 9, in test_sum_tuple
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
    AssertionError: Should be 6
    
    ----------------------------------------------------------------------
    Ran 2 tests in 0.001s
    
    FAILED (failures=1)
    
    8).

  2. Mục nhập

    def test_sum():
        assert sum([1, 2, 3]) == 6, "Should be 6"
    
    if __name__ == "__main__":
        test_sum()
        print("Everything passed")
    
    08 hiển thị một số chi tiết về bài kiểm tra thất bại:

    • Tên phương thức kiểm tra (
      def test_sum():
          assert sum([1, 2, 3]) == 6, "Should be 6"
      
      if __name__ == "__main__":
          test_sum()
          print("Everything passed")
      
      09)
    • Mô -đun thử nghiệm (
      >>> assert sum([1, 1, 1]) == 6, "Should be 6"
      Traceback (most recent call last):
        File "", line 1, in 
      AssertionError: Should be 6
      
      87) và trường hợp thử nghiệm (
      $ pip install nose2
      $ python -m nose2
      .F
      ======================================================================
      FAIL: test_sum_tuple (__main__.TestSum)
      ----------------------------------------------------------------------
      Traceback (most recent call last):
        File "test_sum_unittest.py", line 9, in test_sum_tuple
          self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
      AssertionError: Should be 6
      
      ----------------------------------------------------------------------
      Ran 2 tests in 0.001s
      
      FAILED (failures=1)
      
      1)
    • Một dấu vết cho dòng thất bại
    • Các chi tiết của khẳng định với kết quả dự kiến ​​(
      def test_sum():
          assert sum([1, 2, 3]) == 6, "Should be 6"
      
      if __name__ == "__main__":
          test_sum()
          print("Everything passed")
      
      12) và kết quả thực tế (
      def test_sum():
          assert sum([1, 2, 3]) == 6, "Should be 6"
      
      if __name__ == "__main__":
          test_sum()
          print("Everything passed")
      
      13)

Hãy nhớ rằng, bạn có thể thêm thông tin bổ sung vào đầu ra thử nghiệm bằng cách thêm cờ

>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
88 vào lệnh
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
15.

Chạy các bài kiểm tra của bạn từ Pycharm

Nếu bạn sử dụng IDE pycharm, bạn có thể chạy

import unittest


class TestSum(unittest.TestCase):

    def test_sum(self):
        self.assertEqual(sum([1, 2, 3]), 6, "Should be 6")

    def test_sum_tuple(self):
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")

if __name__ == '__main__':
    unittest.main()
4 hoặc
$ python test_sum_unittest.py
.F
======================================================================
FAIL: test_sum_tuple (__main__.TestSum)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_sum_unittest.py", line 9, in test_sum_tuple
    self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
AssertionError: Should be 6

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)
1 bằng cách làm theo các bước sau:

  1. Trong cửa sổ công cụ dự án, chọn thư mục
    def test_sum():
        assert sum([1, 2, 3]) == 6, "Should be 6"
    
    if __name__ == "__main__":
        test_sum()
        print("Everything passed")
    
    00.
  2. Trên menu ngữ cảnh, chọn lệnh chạy cho
    import unittest
    
    
    class TestSum(unittest.TestCase):
    
        def test_sum(self):
            self.assertEqual(sum([1, 2, 3]), 6, "Should be 6")
    
        def test_sum_tuple(self):
            self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
    
    if __name__ == '__main__':
        unittest.main()
    
    4. Ví dụ: chọn Run Unittests trong các bài kiểm tra của tôi.

Điều này sẽ thực thi

import unittest


class TestSum(unittest.TestCase):

    def test_sum(self):
        self.assertEqual(sum([1, 2, 3]), 6, "Should be 6")

    def test_sum_tuple(self):
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")

if __name__ == '__main__':
    unittest.main()
4 trong cửa sổ thử nghiệm và cung cấp cho bạn kết quả trong Pycharm:

Hướng dẫn how do i test a python script? - làm cách nào để kiểm tra tập lệnh python?

Thông tin thêm có sẵn trên trang web Pycharm.

Chạy các bài kiểm tra của bạn từ Visual Studio Code

Nếu bạn sử dụng Microsoft Visual Studio Code IDE, hãy hỗ trợ thực hiện

import unittest


class TestSum(unittest.TestCase):

    def test_sum(self):
        self.assertEqual(sum([1, 2, 3]), 6, "Should be 6")

    def test_sum_tuple(self):
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")

if __name__ == '__main__':
    unittest.main()
4,
import unittest


class TestSum(unittest.TestCase):

    def test_sum(self):
        self.assertEqual(sum([1, 2, 3]), 6, "Should be 6")

    def test_sum_tuple(self):
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")

if __name__ == '__main__':
    unittest.main()
9 và
$ python test_sum_unittest.py
.F
======================================================================
FAIL: test_sum_tuple (__main__.TestSum)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_sum_unittest.py", line 9, in test_sum_tuple
    self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
AssertionError: Should be 6

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)
1 được tích hợp vào plugin Python.

Nếu bạn đã cài đặt plugin Python, bạn có thể thiết lập cấu hình cho các thử nghiệm của mình bằng cách mở bảng lệnh bằng Ctrl+Shift+P và gõ bài kiểm tra Python Python. Bạn sẽ thấy một loạt các tùy chọn:Ctrl+Shift+P and typing “Python test”. You will see a range of options:

Chọn gỡ lỗi tất cả các thử nghiệm đơn vị và VSCode sau đó sẽ nâng cao một lời nhắc để định cấu hình khung thử nghiệm. Nhấp vào COG để chọn người chạy thử (

import unittest


class TestSum(unittest.TestCase):

    def test_sum(self):
        self.assertEqual(sum([1, 2, 3]), 6, "Should be 6")

    def test_sum_tuple(self):
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")

if __name__ == '__main__':
    unittest.main()
4) và thư mục nhà (
$ pip install nose2
$ python -m nose2
.F
======================================================================
FAIL: test_sum_tuple (__main__.TestSum)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_sum_unittest.py", line 9, in test_sum_tuple
    self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
AssertionError: Should be 6

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)
8).

Khi điều này được thiết lập, bạn sẽ thấy trạng thái của các bài kiểm tra ở dưới cùng của cửa sổ và bạn có thể nhanh chóng truy cập nhật ký kiểm tra và chạy lại các thử nghiệm bằng cách nhấp vào các biểu tượng này:

Điều này cho thấy các bài kiểm tra đang thực hiện, nhưng một số trong số chúng đang thất bại.

Kiểm tra các khung web như django và bình

Nếu bạn viết bài kiểm tra cho một ứng dụng web bằng cách sử dụng một trong các khung phổ biến như Django hoặc Flask, có một số khác biệt quan trọng trong cách bạn viết và chạy các bài kiểm tra.

Tại sao họ khác với các ứng dụng khác

Hãy nghĩ về tất cả các mã mà bạn sẽ thử nghiệm trong một ứng dụng web. Tất cả các tuyến đường, chế độ xem và mô hình đều yêu cầu nhiều nhập khẩu và kiến ​​thức về các khung đang được sử dụng.

Điều này tương tự như thử nghiệm xe hơi khi bắt đầu hướng dẫn: bạn phải khởi động máy tính xe hơi trước khi bạn có thể chạy thử nghiệm đơn giản như kiểm tra đèn.

Django và Flask đều giúp bạn dễ dàng bằng cách cung cấp khung thử nghiệm dựa trên

import unittest


class TestSum(unittest.TestCase):

    def test_sum(self):
        self.assertEqual(sum([1, 2, 3]), 6, "Should be 6")

    def test_sum_tuple(self):
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")

if __name__ == '__main__':
    unittest.main()
4. Bạn có thể tiếp tục viết các bài kiểm tra theo cách bạn đã học nhưng thực hiện chúng hơi khác nhau.

Cách sử dụng người chạy thử nghiệm Django

Mẫu Django

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
27 sẽ tạo một tệp
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
28 bên trong thư mục ứng dụng của bạn. Nếu bạn không có điều đó, bạn có thể tạo nó với các nội dung sau:

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
3

Sự khác biệt chính với các ví dụ cho đến nay là bạn cần phải thừa hưởng từ

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
29 thay vì
$ python test_sum_unittest.py
.F
======================================================================
FAIL: test_sum_tuple (__main__.TestSum)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_sum_unittest.py", line 9, in test_sum_tuple
    self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
AssertionError: Should be 6

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)
7. Các lớp này có cùng API, nhưng lớp Django
$ pip install nose2
$ python -m nose2
.F
======================================================================
FAIL: test_sum_tuple (__main__.TestSum)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_sum_unittest.py", line 9, in test_sum_tuple
    self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
AssertionError: Should be 6

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)
2 thiết lập tất cả các trạng thái cần thiết để kiểm tra.

Để thực hiện bộ thử nghiệm của bạn, thay vì sử dụng

import unittest


class TestSum(unittest.TestCase):

    def test_sum(self):
        self.assertEqual(sum([1, 2, 3]), 6, "Should be 6")

    def test_sum_tuple(self):
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")

if __name__ == '__main__':
    unittest.main()
4 tại dòng lệnh, bạn sử dụng
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
33:

Nếu bạn muốn có nhiều tệp thử nghiệm, hãy thay thế

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
28 bằng một thư mục có tên
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
00, hãy chèn một tệp trống bên trong được gọi là
>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
25 và tạo các tệp
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
37 của bạn. Django sẽ khám phá và thực hiện những điều này.

Thông tin thêm có sẵn tại trang web tài liệu Django.

Cách sử dụng import unittest class TestSum(unittest.TestCase): def test_sum(self): self.assertEqual(sum([1, 2, 3]), 6, "Should be 6") def test_sum_tuple(self): self.assertEqual(sum((1, 2, 2)), 6, "Should be 6") if __name__ == '__main__': unittest.main() 4 và bình

Bình yêu cầu ứng dụng phải được nhập và sau đó đặt ở chế độ thử nghiệm. Bạn có thể khởi tạo máy khách thử nghiệm và sử dụng ứng dụng khách thử nghiệm để thực hiện yêu cầu cho bất kỳ tuyến đường nào trong ứng dụng của bạn.

Tất cả các máy khách kiểm tra khởi tạo được thực hiện trong phương pháp

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
39 của trường hợp thử nghiệm của bạn. Trong ví dụ sau,
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
40 là tên của ứng dụng. Don Tiết lo lắng nếu bạn không biết những gì
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
39 làm. Bạn sẽ tìm hiểu về điều đó trong phần Kịch bản thử nghiệm nâng cao hơn.

Mã trong tệp kiểm tra của bạn sẽ trông như thế này:

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
4

Sau đó, bạn có thể thực hiện các trường hợp kiểm tra bằng lệnh

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
42.

Thông tin thêm có sẵn tại trang web tài liệu Flask.

Các kịch bản thử nghiệm nâng cao hơn

Trước khi bạn bước vào việc tạo các bài kiểm tra cho ứng dụng của mình, hãy nhớ ba bước cơ bản của mỗi bài kiểm tra:

  1. Tạo đầu vào của bạn
  2. Thực thi mã, nắm bắt đầu ra
  3. So sánh đầu ra với kết quả dự kiến

Nó không phải lúc nào cũng dễ dàng như tạo giá trị tĩnh cho đầu vào như chuỗi hoặc một số. Đôi khi, ứng dụng của bạn sẽ yêu cầu một thể hiện của một lớp hoặc một bối cảnh. Sau đó bạn làm gì?

Dữ liệu mà bạn tạo như một đầu vào được gọi là một vật cố định. Nó thực hành phổ biến để tạo ra đồ đạc và tái sử dụng chúng.fixture. It’s common practice to create fixtures and reuse them.

Nếu bạn đang chạy cùng một bài kiểm tra và vượt qua các giá trị khác nhau mỗi lần và mong đợi cùng một kết quả, thì điều này được gọi là tham số hóa.parameterization.

Xử lý thất bại dự kiến

Trước đó, khi bạn lập một danh sách các kịch bản để kiểm tra

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

def test_sum_tuple():
    assert sum((1, 2, 2)) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    test_sum_tuple()
    print("Everything passed")
3, một câu hỏi đã xuất hiện: Điều gì xảy ra khi bạn cung cấp cho nó một giá trị xấu, chẳng hạn như một số nguyên hoặc một chuỗi?

Trong trường hợp này, bạn sẽ mong đợi

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

def test_sum_tuple():
    assert sum((1, 2, 2)) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    test_sum_tuple()
    print("Everything passed")
3 sẽ ném lỗi. Khi nó ném một lỗi, điều đó sẽ khiến bài kiểm tra thất bại.

Có một cách đặc biệt để xử lý các lỗi mong đợi. Bạn có thể sử dụng

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
45 như một trình quản lý bối cảnh, sau đó bên trong khối
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
46 Thực hiện các bước kiểm tra:

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
5

Trường hợp thử nghiệm này bây giờ sẽ chỉ vượt qua nếu

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
47 tăng
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
48. Bạn có thể thay thế
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
48 bằng bất kỳ loại ngoại lệ nào bạn chọn.

Hành vi cô lập trong ứng dụng của bạn

Trước đó trong hướng dẫn, bạn đã học được tác dụng phụ là gì. Tác dụng phụ làm cho việc kiểm tra đơn vị khó khăn hơn vì mỗi lần thử nghiệm, nó có thể cho kết quả khác nhau hoặc thậm chí tệ hơn, một thử nghiệm có thể ảnh hưởng đến trạng thái của ứng dụng và khiến một thử nghiệm khác không thành công!

Hướng dẫn how do i test a python script? - làm cách nào để kiểm tra tập lệnh python?

Có một số kỹ thuật đơn giản bạn có thể sử dụng để kiểm tra các phần của ứng dụng có nhiều tác dụng phụ:

  • Mã tái cấu trúc để tuân theo nguyên tắc trách nhiệm duy nhất
  • Chế giễu bất kỳ phương thức hoặc chức năng nào các cuộc gọi để loại bỏ các tác dụng phụ
  • Sử dụng kiểm tra tích hợp thay vì thử nghiệm đơn vị cho phần này của ứng dụng

Nếu bạn không quen thuộc với việc chế giễu, hãy xem thử nghiệm Python CLI để biết một số ví dụ tuyệt vời.

Viết bài kiểm tra tích hợp

Cho đến nay, bạn đã học chủ yếu về thử nghiệm đơn vị. Kiểm tra đơn vị là một cách tuyệt vời để xây dựng mã ổn định và dự đoán. Nhưng vào cuối ngày, ứng dụng của bạn cần phải hoạt động khi nó bắt đầu!

Kiểm tra tích hợp là thử nghiệm nhiều thành phần của ứng dụng để kiểm tra xem chúng có hoạt động cùng nhau không. Kiểm tra tích hợp có thể yêu cầu hành động như người tiêu dùng hoặc người dùng của ứng dụng bằng cách:

  • Gọi API REST HTTP
  • Gọi API Python
  • Gọi một dịch vụ web
  • Chạy một dòng lệnh

Mỗi loại thử nghiệm tích hợp này có thể được viết theo cách tương tự như một bài kiểm tra đơn vị, theo mẫu đầu vào, thực thi và khẳng định mẫu. Sự khác biệt đáng kể nhất là các thử nghiệm tích hợp đang kiểm tra nhiều thành phần cùng một lúc và do đó sẽ có nhiều tác dụng phụ hơn so với thử nghiệm đơn vị. Ngoài ra, các thử nghiệm tích hợp sẽ yêu cầu có nhiều đồ đạc hơn, như cơ sở dữ liệu, ổ cắm mạng hoặc tệp cấu hình.

Đây là lý do tại sao nó thực hành tốt để tách các bài kiểm tra đơn vị của bạn và các bài kiểm tra tích hợp của bạn. Việc tạo ra các đồ đạc cần thiết cho tích hợp như cơ sở dữ liệu thử nghiệm và bản thân các trường hợp thử nghiệm thường mất nhiều thời gian hơn để thực hiện so với các bài kiểm tra đơn vị, vì vậy bạn chỉ có thể muốn chạy các thử nghiệm tích hợp trước khi bạn thúc đẩy sản xuất thay vì một lần trên mỗi cam kết.

Một cách đơn giản để phân tách các bài kiểm tra đơn vị và tích hợp chỉ đơn giản là đưa chúng vào các thư mục khác nhau:

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
6

Có nhiều cách để thực hiện chỉ một nhóm kiểm tra chọn lọc. Cờ thư mục nguồn chỉ định,

>>> assert sum([1, 1, 1]) == 6, "Should be 6"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: Should be 6
92, có thể được thêm vào
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
51 với đường dẫn chứa các thử nghiệm:

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
7

import unittest


class TestSum(unittest.TestCase):

    def test_sum(self):
        self.assertEqual(sum([1, 2, 3]), 6, "Should be 6")

    def test_sum_tuple(self):
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")

if __name__ == '__main__':
    unittest.main()
4 sẽ cung cấp cho bạn kết quả của tất cả các bài kiểm tra trong thư mục
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
53.

Kiểm tra các ứng dụng dựa trên dữ liệu

Nhiều thử nghiệm tích hợp sẽ yêu cầu dữ liệu phụ trợ như cơ sở dữ liệu tồn tại với các giá trị nhất định. Ví dụ: bạn có thể muốn kiểm tra kiểm tra xem ứng dụng có hiển thị chính xác với hơn 100 khách hàng trong cơ sở dữ liệu hay trang đặt hàng hoạt động ngay cả khi tên sản phẩm được hiển thị bằng tiếng Nhật.

Các loại thử nghiệm tích hợp này sẽ phụ thuộc vào các thiết bị kiểm tra khác nhau để đảm bảo chúng có thể lặp lại và có thể dự đoán được.

Một kỹ thuật tốt để sử dụng là lưu trữ dữ liệu thử nghiệm trong thư mục trong thư mục kiểm tra tích hợp của bạn có tên là

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
54 để chỉ ra rằng nó chứa dữ liệu thử nghiệm. Sau đó, trong các bài kiểm tra của bạn, bạn có thể tải dữ liệu và chạy thử nghiệm.

Ở đây, một ví dụ về cấu trúc đó nếu dữ liệu bao gồm các tệp JSON:

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
8

Trong trường hợp thử nghiệm của bạn, bạn có thể sử dụng phương thức

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
55 để tải dữ liệu thử nghiệm từ tệp cố định trong một đường dẫn đã biết và thực hiện nhiều thử nghiệm chống lại dữ liệu thử nghiệm đó. Hãy nhớ rằng bạn có thể có nhiều trường hợp thử nghiệm trong một tệp Python duy nhất và khám phá
import unittest


class TestSum(unittest.TestCase):

    def test_sum(self):
        self.assertEqual(sum([1, 2, 3]), 6, "Should be 6")

    def test_sum_tuple(self):
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")

if __name__ == '__main__':
    unittest.main()
4 sẽ thực thi cả hai. Bạn có thể có một trường hợp kiểm tra cho mỗi bộ dữ liệu thử nghiệm:

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
9

Nếu ứng dụng của bạn phụ thuộc vào dữ liệu từ một vị trí từ xa, như API từ xa, bạn sẽ muốn đảm bảo các bài kiểm tra của bạn có thể lặp lại. Có các bài kiểm tra của bạn thất bại vì API là ngoại tuyến hoặc có vấn đề kết nối có thể làm chậm sự phát triển. Trong các loại tình huống này, tốt nhất là cách lưu trữ đồ đạc từ xa cục bộ để chúng có thể được thu hồi và gửi đến ứng dụng.

Thư viện

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
57 có gói miễn phí có tên
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
58 cung cấp cho bạn các cách để tạo đồ đạc phản hồi và lưu chúng trong các thư mục thử nghiệm của bạn. Tìm hiểu thêm trên trang GitHub của họ.

Kiểm tra trong nhiều môi trường

Cho đến nay, bạn đã thử nghiệm chống lại một phiên bản Python duy nhất bằng cách sử dụng môi trường ảo với một bộ phụ thuộc cụ thể. Bạn có thể muốn kiểm tra xem ứng dụng của bạn có hoạt động trên nhiều phiên bản Python hay nhiều phiên bản của gói không. Tox là một ứng dụng tự động hóa thử nghiệm trong nhiều môi trường.

Cài đặt Tox

Tox có sẵn trên PYPI dưới dạng gói để cài đặt qua

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
59:

Bây giờ bạn phải cài đặt TOX, nó cần được cấu hình.

Định cấu hình Tox cho các phụ thuộc của bạn

Tox được cấu hình thông qua tệp cấu hình trong thư mục dự án của bạn. Tệp cấu hình Tox chứa các mục sau:

  • Lệnh để chạy để thực hiện các bài kiểm tra
  • Bất kỳ gói bổ sung nào được yêu cầu trước khi thực hiện
  • Các phiên bản Python mục tiêu để kiểm tra chống lại

Thay vì phải học cú pháp cấu hình Tox, bạn có thể bắt đầu bằng cách chạy ứng dụng QuickStart:

Công cụ cấu hình Tox sẽ hỏi bạn những câu hỏi đó và tạo một tệp tương tự như sau trong

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
60:

$ python test_sum.py
Everything passed
0

Trước khi bạn có thể chạy TOX, nó yêu cầu bạn có tệp

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
61 trong thư mục ứng dụng của bạn chứa các bước để cài đặt gói của bạn. Nếu bạn không có một, bạn có thể làm theo hướng dẫn này về cách tạo
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
61 trước khi bạn tiếp tục.

Ngoài ra, nếu dự án của bạn không dành cho phân phối trên PYPI, bạn có thể bỏ qua yêu cầu này bằng cách thêm dòng sau trong tệp

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
60 trong tiêu đề
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
64:

$ python test_sum.py
Everything passed
1

Nếu bạn không tạo ra một

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
61 và ứng dụng của bạn có một số phụ thuộc từ PYPI, bạn sẽ cần chỉ định chúng trên một số dòng trong phần
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
66. Ví dụ, Django sẽ yêu cầu như sau:

Khi bạn đã hoàn thành giai đoạn đó, bạn đã sẵn sàng để chạy các bài kiểm tra.

Bây giờ bạn có thể thực thi Tox và nó sẽ tạo hai môi trường ảo: một cho Python 2.7 và một cho Python 3.6. Thư mục Tox được gọi là

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
67. Trong thư mục
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
67, TOX sẽ thực thi
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
42 so với mỗi môi trường ảo.

Bạn có thể chạy quy trình này bằng cách gọi TOX tại dòng lệnh:

Tox sẽ đưa ra kết quả của các thử nghiệm của bạn đối với từng môi trường. Lần đầu tiên nó chạy, Tox mất một chút thời gian để tạo ra các môi trường ảo, nhưng một khi nó có, việc thực hiện thứ hai sẽ nhanh hơn rất nhiều.

Thực thi Tox

Đầu ra của Tox khá đơn giản. Nó tạo ra một môi trường cho mỗi phiên bản, cài đặt các phụ thuộc của bạn và sau đó chạy các lệnh kiểm tra.

Có một số tùy chọn dòng lệnh bổ sung rất tuyệt vời để nhớ.

Chỉ chạy một môi trường duy nhất, chẳng hạn như Python 3.6:

Tái tạo các môi trường ảo, trong trường hợp các phụ thuộc của bạn đã thay đổi hoặc gói trang web bị hỏng:

Chạy Tox với đầu ra ít dài hơn:

Chạy TOX với đầu ra dài dòng hơn:

Thông tin thêm về Tox có thể được tìm thấy tại trang web tài liệu Tox.

Tự động thực hiện các bài kiểm tra của bạn

Cho đến nay, bạn đã thực hiện các bài kiểm tra theo cách thủ công bằng cách chạy một lệnh. Có một số công cụ để thực hiện kiểm tra tự động khi bạn thực hiện các thay đổi và cam kết chúng vào kho lưu trữ kiểm soát nguồn như Git. Các công cụ thử nghiệm tự động thường được gọi là các công cụ CI/CD, viết tắt của tích hợp liên tục/triển khai liên tục. Họ có thể chạy các bài kiểm tra của bạn, biên dịch và xuất bản bất kỳ ứng dụng nào và thậm chí triển khai chúng vào sản xuất.

Travis CI là một trong nhiều dịch vụ CI (tích hợp liên tục) có sẵn.

Travis CI hoạt động độc đáo với Python và bây giờ bạn đã tạo ra tất cả các thử nghiệm này, bạn có thể tự động hóa việc thực hiện chúng trong đám mây! Travis CI miễn phí cho bất kỳ dự án nguồn mở nào trên GitHub và Gitlab và có sẵn cho một khoản phí cho các dự án tư nhân.

Để bắt đầu, hãy đăng nhập vào trang web và xác thực với thông tin đăng nhập GitHub hoặc Gitlab của bạn. Sau đó tạo một tệp có tên

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
70 với các nội dung sau:

$ python test_sum.py
Everything passed
2

Cấu hình này hướng dẫn Travis CI đến:

  1. Kiểm tra chống lại Python 2.7 và 3.7 (bạn có thể thay thế các phiên bản đó bằng bất kỳ phiên bản nào bạn chọn.)
  2. Cài đặt tất cả các gói bạn liệt kê trong
    def test_sum():
        assert sum([1, 2, 3]) == 6, "Should be 6"
    
    if __name__ == "__main__":
        test_sum()
        print("Everything passed")
    
    71 (bạn nên xóa phần này nếu bạn không có bất kỳ phụ thuộc nào.)
  3. Chạy
    def test_sum():
        assert sum([1, 2, 3]) == 6, "Should be 6"
    
    if __name__ == "__main__":
        test_sum()
        print("Everything passed")
    
    42 để chạy các bài kiểm tra

Khi bạn đã cam kết và đẩy tệp này, Travis CI sẽ chạy các lệnh này mỗi khi bạn đẩy vào kho lưu trữ Git từ xa của bạn. Bạn có thể kiểm tra kết quả trên trang web của họ.

Cái gì tiếp theo

Bây giờ bạn đã học cách tạo các bài kiểm tra, thực hiện chúng, đưa chúng vào dự án của bạn và thậm chí thực hiện chúng tự động, có một vài kỹ thuật nâng cao mà bạn có thể thấy tiện dụng khi thư viện thử nghiệm của bạn phát triển.

Giới thiệu Linters vào ứng dụng của bạn

Tox và Travis CI có cấu hình cho lệnh thử nghiệm. Lệnh kiểm tra bạn đã sử dụng trong suốt hướng dẫn này là

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
42.

Bạn có thể cung cấp một hoặc nhiều lệnh trong tất cả các công cụ này và tùy chọn này có mặt để cho phép bạn thêm nhiều công cụ cải thiện chất lượng ứng dụng của bạn.

Một loại ứng dụng như vậy được gọi là linter. Một linter sẽ xem xét mã của bạn và nhận xét về nó. Nó có thể cung cấp cho bạn những lời khuyên về những sai lầm mà bạn đã mắc phải, không gian theo dõi chính xác và thậm chí dự đoán các lỗi mà bạn có thể đã giới thiệu.

Để biết thêm thông tin về Linters, hãy đọc hướng dẫn chất lượng mã Python.

Lớp lót thụ động với
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
74

Một linter phổ biến nhận xét về kiểu mã của bạn liên quan đến đặc tả PEP 8 là

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
74.

Bạn có thể cài đặt

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
74 bằng
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
59:

Sau đó, bạn có thể chạy

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
74 qua một tệp, một thư mục hoặc một mẫu:

$ python test_sum.py
Everything passed
3

Bạn sẽ thấy một danh sách các lỗi và cảnh báo cho mã của bạn mà

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
74 đã tìm thấy.

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
74 có thể định cấu hình trên dòng lệnh hoặc bên trong tệp cấu hình trong dự án của bạn. Nếu bạn muốn bỏ qua các quy tắc nhất định, như
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
81 được hiển thị ở trên, bạn có thể đặt chúng trong cấu hình.
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
74 sẽ kiểm tra tệp
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
83 trong thư mục dự án hoặc tệp
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
84. Nếu bạn quyết định sử dụng TOX, bạn có thể đặt phần cấu hình
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
74 bên trong
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
60.

Ví dụ này bỏ qua các thư mục

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
87 và
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
88 cũng như quy tắc
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
81. Ngoài ra, nó đặt chiều dài dòng tối đa thành 90 thay vì 80 ký tự. Bạn có thể sẽ thấy rằng ràng buộc mặc định của 79 ký tự cho chiều rộng dòng là rất hạn chế đối với các thử nghiệm, vì chúng chứa các tên phương thức dài, chuỗi chữ có giá trị kiểm tra và các đoạn dữ liệu khác có thể dài hơn. Người ta thường đặt độ dài dòng cho các thử nghiệm lên tới 120 ký tự:

$ python test_sum.py
Everything passed
4

Ngoài ra, bạn có thể cung cấp các tùy chọn này trên dòng lệnh:

$ python test_sum.py
Everything passed
5

Một danh sách đầy đủ các tùy chọn cấu hình có sẵn trên trang web tài liệu.

Bây giờ bạn có thể thêm

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
74 vào cấu hình CI của mình. Đối với Travis CI, điều này sẽ trông như sau:

$ python test_sum.py
Everything passed
6

Travis sẽ đọc cấu hình trong

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
83 và không thành công nếu có bất kỳ lỗi LINTING nào xảy ra. Hãy chắc chắn thêm phụ thuộc
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
74 vào tệp
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
71 của bạn.

Lớp lót tích cực với một định dạng mã

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
74 là một linter thụ động: Nó khuyến nghị các thay đổi, nhưng bạn phải đi và thay đổi mã. Một cách tiếp cận tích cực hơn là một định dạng mã. Mã định dạng mã sẽ tự động thay đổi mã của bạn để đáp ứng một tập hợp các thực tiễn kiểu và bố cục.

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
95 là một định dạng rất không tha thứ. Nó không có bất kỳ tùy chọn cấu hình nào và nó có một phong cách rất cụ thể. Điều này làm cho nó tuyệt vời như một công cụ thả vào để đưa vào đường ống thử nghiệm của bạn.

Bạn có thể cài đặt

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
95 qua PIP:

Sau đó để chạy

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
95 tại dòng lệnh, cung cấp tệp hoặc thư mục bạn muốn định dạng:

Giữ cho mã kiểm tra của bạn sạch sẽ

Khi viết các bài kiểm tra, bạn có thể thấy rằng cuối cùng bạn đã sao chép và dán mã nhiều hơn nhiều so với các ứng dụng thông thường. Các bài kiểm tra có thể rất lặp đi lặp lại, nhưng đó không phải là một lý do để khiến mã của bạn cẩu thả và khó duy trì.

Theo thời gian, bạn sẽ phát triển rất nhiều khoản nợ kỹ thuật trong mã kiểm tra và nếu bạn có những thay đổi đáng kể đối với ứng dụng yêu cầu thay đổi thử nghiệm của bạn, thì đó có thể là một nhiệm vụ cồng kềnh hơn mức cần thiết vì cách bạn cấu trúc chúng.

Cố gắng tuân theo nguyên tắc khô khi viết bài kiểm tra: Don Lặp lại bản thân.DRY principle when writing tests: Don’t Repeat Yourself.

Các thiết bị kiểm tra và chức năng là một cách tuyệt vời để tạo mã thử nghiệm dễ bảo trì hơn. Ngoài ra, tính dễ đọc. Cân nhắc triển khai một công cụ Linting như

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
74 qua mã kiểm tra của bạn:

$ python test_sum.py
Everything passed
7

Kiểm tra sự suy giảm hiệu suất giữa các thay đổi

Có nhiều cách để mã điểm chuẩn trong Python. Thư viện tiêu chuẩn cung cấp mô -đun

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
99, có thể có chức năng thời gian một số lần và cung cấp cho bạn phân phối. Ví dụ này sẽ thực thi
$ python test_sum.py
Everything passed
00 100 lần và
$ python test_sum.py
Everything passed
01 Đầu ra:

$ python test_sum.py
Everything passed
8

Một tùy chọn khác, nếu bạn quyết định sử dụng

$ python test_sum_unittest.py
.F
======================================================================
FAIL: test_sum_tuple (__main__.TestSum)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_sum_unittest.py", line 9, in test_sum_tuple
    self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
AssertionError: Should be 6

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)
1 làm người chạy thử nghiệm, là plugin
$ python test_sum.py
Everything passed
03. Điều này cung cấp một trận đấu
$ python test_sum_unittest.py
.F
======================================================================
FAIL: test_sum_tuple (__main__.TestSum)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_sum_unittest.py", line 9, in test_sum_tuple
    self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
AssertionError: Should be 6

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)
1 được gọi là
$ python test_sum.py
Everything passed
05. Bạn có thể vượt qua
$ python test_sum.py
Everything passed
06 bất kỳ cuộc gọi nào và nó sẽ ghi lại thời gian của người được gọi vào kết quả của
$ python test_sum_unittest.py
.F
======================================================================
FAIL: test_sum_tuple (__main__.TestSum)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_sum_unittest.py", line 9, in test_sum_tuple
    self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
AssertionError: Should be 6

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)
1.

Bạn có thể cài đặt

$ python test_sum.py
Everything passed
03 từ PYPI bằng
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
59:

$ python test_sum.py
Everything passed
9

Sau đó, bạn có thể thêm một bài kiểm tra sử dụng vật cố và vượt qua cuộc gọi để được thực thi:

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

def test_sum_tuple():
    assert sum((1, 2, 2)) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    test_sum_tuple()
    print("Everything passed")
0

Việc thực hiện

$ python test_sum_unittest.py
.F
======================================================================
FAIL: test_sum_tuple (__main__.TestSum)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_sum_unittest.py", line 9, in test_sum_tuple
    self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
AssertionError: Should be 6

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)
1 bây giờ sẽ cho bạn kết quả điểm chuẩn:

Hướng dẫn how do i test a python script? - làm cách nào để kiểm tra tập lệnh python?

Thông tin thêm có sẵn tại trang web tài liệu.

Kiểm tra các lỗ hổng bảo mật trong ứng dụng của bạn

Một thử nghiệm khác mà bạn sẽ muốn chạy trên ứng dụng của mình là kiểm tra các lỗi hoặc lỗ hổng bảo mật phổ biến.

Bạn có thể cài đặt

$ python test_sum.py
Everything passed
11 từ PYPI bằng
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
59:

Sau đó, bạn có thể chuyển tên của mô -đun ứng dụng của mình bằng cờ

$ python test_sum.py
Everything passed
13 và nó sẽ cung cấp cho bạn một bản tóm tắt:

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

def test_sum_tuple():
    assert sum((1, 2, 2)) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    test_sum_tuple()
    print("Everything passed")
1

Như với

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
74, các quy tắc mà các cờ
$ python test_sum.py
Everything passed
11 có thể định cấu hình và nếu có bất kỳ bạn muốn bỏ qua, bạn có thể thêm phần sau vào tệp
def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    print("Everything passed")
84 của mình với các tùy chọn:

def test_sum():
    assert sum([1, 2, 3]) == 6, "Should be 6"

def test_sum_tuple():
    assert sum((1, 2, 2)) == 6, "Should be 6"

if __name__ == "__main__":
    test_sum()
    test_sum_tuple()
    print("Everything passed")
2

Thông tin chi tiết có sẵn tại trang web GitHub.

Sự kết luận

Python đã làm cho thử nghiệm có thể truy cập bằng cách xây dựng trong các lệnh và thư viện bạn cần xác nhận rằng các ứng dụng của bạn hoạt động như được thiết kế. Bắt đầu với việc thử nghiệm trong Python Needn Gen Ghé được: Bạn có thể sử dụng

import unittest


class TestSum(unittest.TestCase):

    def test_sum(self):
        self.assertEqual(sum([1, 2, 3]), 6, "Should be 6")

    def test_sum_tuple(self):
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")

if __name__ == '__main__':
    unittest.main()
4 và viết các phương pháp nhỏ, có thể duy trì để xác thực mã của bạn.

Khi bạn tìm hiểu thêm về thử nghiệm và ứng dụng của bạn phát triển, bạn có thể xem xét chuyển sang một trong các khung thử nghiệm khác, như

$ python test_sum_unittest.py
.F
======================================================================
FAIL: test_sum_tuple (__main__.TestSum)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_sum_unittest.py", line 9, in test_sum_tuple
    self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
AssertionError: Should be 6

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)
1 và bắt đầu tận dụng các tính năng nâng cao hơn.

Cảm ơn bạn đã đọc. Tôi hy vọng bạn có một tương lai không có lỗi với Python!

Xem bây giờ hướng dẫn này có một khóa học video liên quan được tạo bởi nhóm Python thực sự. Xem nó cùng với hướng dẫn bằng văn bản để làm sâu sắc thêm sự hiểu biết của bạn: phát triển theo hướng thử nghiệm với pytest This tutorial has a related video course created by the Real Python team. Watch it together with the written tutorial to deepen your understanding: Test-Driven Development With PyTest