Làm thế nào để bạn thêm các trường hợp thử nghiệm trong python?
Trong hướng dẫn này, chúng tôi sẽ triển khai kiểm tra đơn vị bằng Python. Bản thân kiểm thử đơn vị bằng Python là một chủ đề lớn, nhưng chúng tôi sẽ đề cập đến một số khái niệm cơ bản Show
Python unittest là gì?Kiểm tra đơn vị là một kỹ thuật trong đó mô-đun cụ thể được kiểm tra để chính nhà phát triển kiểm tra xem có bất kỳ lỗi nào không. Trọng tâm chính của kiểm tra đơn vị là kiểm tra một đơn vị hệ thống riêng lẻ để phân tích, phát hiện và sửa lỗi Python cung cấp module unittest để kiểm tra đơn vị mã nguồn. Unittest đóng một vai trò thiết yếu khi chúng ta viết mã khổng lồ và nó cung cấp cơ sở để kiểm tra xem đầu ra có đúng hay không Thông thường, chúng tôi in giá trị và khớp giá trị đó với đầu ra tham chiếu hoặc kiểm tra đầu ra theo cách thủ công Quá trình này mất nhiều thời gian. Để khắc phục vấn đề này, Python giới thiệu module unittest. Chúng tôi cũng có thể kiểm tra hiệu suất của ứng dụng bằng cách sử dụng nó Chúng ta sẽ tìm hiểu cách tạo một bài kiểm tra cơ bản, tìm lỗi và thực thi nó trước khi gửi mã cho người dùng Kiểm tra mãChúng tôi có thể kiểm tra mã của mình bằng nhiều cách. Trong phần này, chúng ta sẽ tìm hiểu các bước cơ bản hướng tới các phương pháp nâng cao Tự động hóa so với. Kiểm tra bằng tayKiểm thử thủ công có một hình thức khác, được gọi là kiểm thử khám phá. Đó là một thử nghiệm được thực hiện mà không có bất kỳ kế hoạch nào. Để thực hiện kiểm thử thủ công, chúng ta cần chuẩn bị một danh sách ứng dụng; Mỗi lần chúng tôi cung cấp thông tin đầu vào hoặc thay đổi mã, chúng tôi cần xem qua từng tính năng của danh sách và kiểm tra nó Đây là cách kiểm tra phổ biến nhất và nó cũng tốn nhiều thời gian. Mặt khác, kiểm tra tự động thực thi mã theo kế hoạch mã của chúng tôi, nghĩa là nó chạy một phần mã mà chúng tôi muốn kiểm tra, thứ tự mà chúng tôi muốn kiểm tra chúng bằng tập lệnh thay vì con người. Python cung cấp một bộ công cụ và thư viện giúp chúng ta tạo các bài kiểm tra tự động cho ứng dụng Bài kiểm tra đơn vị so với. Kiểm tra tích hợpGiả sử chúng ta muốn kiểm tra đèn ô tô và chúng ta có thể kiểm tra chúng như thế nào. Chúng tôi sẽ bật đèn và đi ra ngoài xe hoặc hỏi người bạn rằng đèn có sáng hay không. Việc bật đèn sẽ được coi là bước kiểm tra, và đi ra ngoài hoặc hỏi bạn bè sẽ biết là kiểm tra khẳng định. Trong kiểm thử tích hợp, chúng ta có thể kiểm thử nhiều thành phần cùng một lúc Các thành phần này có thể là bất kỳ thứ gì trong mã của chúng ta, chẳng hạn như hàm, lớp và mô-đun mà chúng ta đã viết Nhưng có một hạn chế của thử nghiệm tích hợp; . Trong tình huống này, sẽ rất khó để nhận ra phần nào của hệ thống đang bị rơi. Hãy lấy ví dụ trước; Đó là lý do tại sao chúng tôi xem xét kiểm tra đơn vị để biết chính xác vấn đề trong mã được kiểm tra Kiểm thử đơn vị là một kiểm thử nhỏ hơn, nó kiểm tra một thành phần duy nhất xem nó có hoạt động đúng cách hay không. Sử dụng bài kiểm tra đơn vị, chúng tôi có thể phân biệt những gì cần thiết phải sửa trong hệ thống của mình Chúng tôi đã thấy hai loại thử nghiệm cho đến nay; Hãy hiểu ví dụ sau Chúng tôi áp dụng kiểm tra đơn vị hàm tích hợp sẵn của Python () đối với đầu ra đã biết. Ta kiểm tra xem tổng() của số (2, 3, 5) có bằng 10 không Dòng trên sẽ trả về kết quả đúng vì giá trị là chính xác. Nếu chúng ta truyền sai đối số, nó sẽ trả về lỗi Assertion. Ví dụ - Chúng ta có thể đặt đoạn mã trên vào tệp và thực hiện lại tại dòng lệnh đầu ra $ python sum.py Everything is correct Trong ví dụ sau, chúng tôi sẽ chuyển bộ dữ liệu cho mục đích thử nghiệm. Tạo một tệp mới có tên test_sum2. py Ví dụ - 2 đầu ra Everything is correct Traceback (most recent call last): File "", line 13, in File "", line 9, in test_sum_tuple AssertionError: It should be 10 Giải trình - Trong đoạn mã trên, chúng tôi đã chuyển đầu vào sai cho test_sum_tuple(). Đầu ra không giống với kết quả dự đoán Cách trên hay nhưng nếu sai nhiều lỗi thì sao. Trình thông dịch Python sẽ báo lỗi ngay lập tức nếu gặp lỗi đầu tiên. Để loại bỏ vấn đề này, chúng tôi sử dụng trình chạy thử nghiệm Các ứng dụng chạy thử nghiệm được thiết kế đặc biệt để kiểm tra đầu ra, chạy thử nghiệm và cung cấp các công cụ để sửa chữa và chẩn đoán các thử nghiệm và ứng dụng Chọn người chạy thửPython chứa nhiều người chạy thử nghiệm. Thư viện Python tích hợp phổ biến nhất được gọi là unittest. Unittest có thể di chuyển sang các khung khác. Hãy xem xét ba người chạy thử nhiều nhất sau đây
Chúng tôi có thể chọn bất kỳ trong số họ theo yêu cầu của chúng tôi. Hãy giới thiệu ngắn gọn đơn vị nhấtUnittest được tích hợp vào thư viện chuẩn Python kể từ 2. 1. Điều tốt nhất về unittest, nó đi kèm với cả khung thử nghiệm và người chạy thử nghiệm. Có một vài yêu cầu của unittest để viết và thực thi mã
Hãy thực hiện ví dụ trên bằng cách sử dụng trường hợp unittest Ví dụ - đầu ra .F - FAIL: test_sum_tuple (__main__.TestingSum) -- Traceback (most recent call last): File "", line 11, in test_sum_tuple AssertionError: 9 != 10 : It should be 10 ---------------------------------------------------------------------- Ran 2 tests in 0.001s FAILED (failures=1) Traceback (most recent call last): File "", line 14, in File "/usr/lib/python3.8/unittest/main.py", line 101, in __init__ self.runTests() File "/usr/lib/python3.8/unittest/main.py", line 273, in runTests sys.exit(not self.result.wasSuccessful()) SystemExit: True Như chúng ta có thể thấy ở đầu ra, nó hiển thị dấu chấm (. ) để thực hiện thành công và F cho một lần thất bại mũiĐôi khi, chúng ta cần viết hàng trăm, hàng nghìn dòng test cho ứng dụng; Người chạy thử nghiệm mũi có thể là một sự thay thế phù hợp cho người chạy thử nghiệm unittest vì nó tương thích với bất kỳ bài kiểm tra nào sử dụng khung unittest. Có hai loại mũi - mũi và mũi2. Chúng tôi khuyên bạn nên sử dụng nose2 vì đây là phiên bản mới nhất Làm việc với nose2, chúng ta cần cài đặt nó bằng lệnh sau Chạy lệnh sau trong thiết bị đầu cuối để kiểm tra mã bằng mũi2 Đầu ra như sau FAIL: test_sum_tuple (__main__.TestSum) -- Traceback (most recent call last): File "test_sum_unittest.py", line 10, in test_sum_tuple self.assertEqual(sum((2, 3, 5)), 10, "It should be 10") AssertionError: It should be 10 -- Ran 2 tests in 0.001s FAILED (failures=1) Nose2 cung cấp nhiều cờ dòng lệnh để lọc bài kiểm tra. Bạn có thể tìm hiểu thêm từ tài liệu chính thức của nó người khó tínhTrình chạy thử nghiệm pytest hỗ trợ thực hiện các trường hợp thử nghiệm nhỏ nhất. Lợi ích thực tế của pytest là viết các trường hợp kiểm tra pytest. Các trường hợp kiểm tra pytest nói chung là chuỗi các phương thức trong tệp Python bắt đầu Pytest cung cấp các lợi ích sau -
Hãy hiểu ví dụ sau Ví dụ - Viết bài kiểm tra đầu tiênỞ đây chúng ta sẽ áp dụng tất cả các khái niệm mà chúng ta đã học trong phần trước. Đầu tiên, chúng ta cần tạo một tên tệp test. py hoặc bất cứ thứ gì. Sau đó, tạo đầu vào và thực thi mã đang được kiểm tra, ghi lại đầu ra. Sau khi chạy mã thành công, khớp đầu ra với kết quả mong đợi Đầu tiên chúng ta tạo file my_sum file và viết code vào đó Chúng tôi đã khởi tạo biến tổng lặp qua tất cả các giá trị trong arg Bây giờ, chúng ta tạo một tên tệp test. py với đoạn mã sau Ví dụ - đầu ra . ---------------------------------------------------------------------- Ran 1 test in 0.000s OK Giải trình Trong đoạn mã trên, chúng tôi đã nhập sum() từ gói my_sum mà chúng tôi đã tạo. Chúng ta đã định nghĩa Checkclass, kế thừa từ unittest. Trường hợp thử nghiệm. Có một phương pháp kiểm tra -. test_list_int(), để kiểm tra số nguyên Sau khi chạy mã, nó trả về dấu chấm (. ) có nghĩa là không có lỗi trong mã Hãy hiểu một ví dụ khác Ví dụ - 2 đầu ra Peter Decosta has been added with id 0 The user associated with id 0 is Peter Các chức năng cơ bản của Python và đầu ra của bài kiểm tra đơn vịMô-đun unittest tạo ra ba kết quả có thể xảy ra. Dưới đây là kết quả tiềm năng
Hãy xem các chức năng cơ bản sau đây Phương thứcMô tả. khẳng địnhEqual(a, b)a == b. khẳng địnhTrue(x)bool(x) là Đúng. khẳng địnhFalse(x)bool(x) là Sai. khẳng địnhIs(a, b)a là b. khẳng địnhIsNone(x)x là Không có. khẳng địnhIn(a, b)a trong b. khẳng địnhIsInstance(a, b)isinstance(a, b). khẳng địnhNotIn(a, b)a không có trong b. assertNotIsInstance(a,b)not isinstance(a, b). khẳng địnhIsNot(a, b)a không phải là bVí dụ kiểm tra đơn vị Pythonđầu ra Start set_name test The length of user_id is = 4 [0, 1, 2, 3] The length of user_name is = 4 ['name0', 'name1', 'name2', 'name3'] Finish set_name test Start get_name test The length of user_id is = 4 The lenght of user_name is = 4 Testing for get_name no user test .F ====================================================================== FAIL: test_1_get_name (__main__.Test) ---------------------------------------------------------------------- Traceback (most recent call last): File "C:/Users/DEVANSH SHARMA/PycharmProjects/Hello/multiprocessing.py", line 502, in test_1_get_name self.assertEqual('There is no such user', self.person.get_name(i)) AssertionError: 'There is no such user' != ' No such user Find' - There is no such user + No such user Find ---------------------------------------------------------------------- Ran 2 tests in 0.002s FAILED (failures=1) Kịch bản thử nghiệm nâng caoChúng ta phải làm theo các bước đã cho trong khi tạo thử nghiệm cho ứng dụng
Tạo đầu vào như giá trị tĩnh cho đầu vào như chuỗi hoặc số là một nhiệm vụ hơi phức tạp. Đôi khi, chúng ta cần tạo một thể hiện của một lớp hoặc một ngữ cảnh Dữ liệu đầu vào mà chúng ta tạo ra được gọi là vật cố định. Chúng tôi có thể sử dụng lại đồ đạc trong ứng dụng của mình Khi chúng tôi chạy mã nhiều lần và chuyển các giá trị khác nhau mỗi lần và mong đợi kết quả giống nhau, quá trình này được gọi là tham số hóa Xử lý lỗi dự kiếnTrong ví dụ trước, chúng ta chuyển số nguyên để kiểm tra sum(); sum() sẽ báo lỗi như mong đợi. Nó sẽ xảy ra do thử nghiệm thất bại Chúng ta có thể sử dụng. assertRaises() để xử lý các lỗi dự kiến. Nó được sử dụng bên trong với tuyên bố. Hãy hiểu ví dụ sau Ví dụ - đầu ra .. ---------------------------------------------------------------------- Ran 2 tests in 0.006s OK Python unittest Bỏ qua bài kiểm traChúng ta có thể bỏ qua một phương pháp kiểm tra riêng lẻ hoặc TestCase bằng cách sử dụng kỹ thuật kiểm tra bỏ qua. Thất bại sẽ không được tính là thất bại trong TestResult Xem xét ví dụ sau để bỏ qua phương thức vô điều kiện Ví dụ - đầu ra ________số 8 Giải trình Trong ví dụ trên, phương thức bỏ qua () có tiền tố là @token. Nó nhận một đối số là một thông điệp tường trình nơi chúng tôi có thể mô tả lý do bỏ qua. Ký tự s biểu thị rằng một bài kiểm tra đã được bỏ qua thành công Chúng ta có thể bỏ qua một phương thức hoặc khối cụ thể dựa trên điều kiện cụ thể Ví dụ - 2 đầu ra Fsx. ====================================================================== FAIL: test_add (__main__.suiteTest) ---------------------------------------------------------------------- Traceback (most recent call last): File "C:/Users/DEVANSH SHARMA/PycharmProjects/Hello/multiprocessing.py", line 539, in test_add self.assertEqual(res, 100) AssertionError: 50 != 100 ---------------------------------------------------------------------- Ran 4 tests in 0.001s FAILED (failures=1, skipped=1, expected failures=1) Giải trình Như chúng ta có thể thấy ở đầu ra, các điều kiện b == 0 và a>b là đúng nên phương thức test_mul() đã bỏ qua. Mặt khác, test_mul đã được đánh dấu là lỗi dự kiến Phần kết luậnChúng ta đã thảo luận về khái niệm cực kỳ quan trọng liên quan đến kiểm thử đơn vị Python. Là người mới bắt đầu, chúng ta cần viết các phương thức thông minh, có thể bảo trì để xác thực mã của mình. Khi chúng tôi nhận được một lệnh phù hợp trong bài kiểm tra đơn vị Python, chúng tôi có thể chuyển sang các khung khác như pytest và tận dụng các tính năng nâng cao hơn |