Kiểm tra mã của bạn là một phần quan trọng của vòng đời phát triển phần mềm và nó luôn phải đến trước khi triển khai ứng dụng vào sản xuất. Kiểm tra là rất quan trọng vì nó giúp theo dõi và tìm ra lỗi trong mã.
Kiểm tra là một phương pháp kiểm tra các đơn vị mã nguồn riêng lẻ để xác nhận rằng nó hoạt động tối ưu trước khi vận chuyển mã đến nơi sản xuất. Điều quan trọng cần lưu ý là việc triển khai tệp nguồn vào sản xuất cho người dùng là không cần thiết trong quá trình thử nghiệm đơn vị.
Sẽ là tốt nhất nếu bạn cũng nhớ rằng thử nghiệm không dành riêng cho Python.
Bài viết này sẽ dạy bạn cách viết các bài kiểm tra cơ bản bằng cách sử dụng các bài kiểm tra đơn vị Python để kiểm tra xem mã của bạn đạt hay không trong quá trình kiểm tra.
Để hoàn thành hướng dẫn này, bạn cần những điều sau:
Kiểm tra viết là các chương trình logic mà một lập trình viên viết để kiểm tra cơ sở mã. Trong quá trình phát triển, QA nên hiểu quy trình để làm nổi bật những gì cần cải thiện trong ứng dụng trước khi vận chuyển sản phẩm cho người dùng. Với mục đích này, hãy viết một hàm tính tổng hai số và trả về kết quả.
Để bắt đầu, hãy tạo một thư mục chứa tất cả các tệp để viết bài kiểm tra trong hướng dẫn này. Thêm tệp có tên main.py
để viết hàm trong thư mục mới này.
# main.py # Add the sum of two numbers def add_sum(num1, num2): return int(num1) + int(num2)
Bây giờ chúng ta có khối mã ở trên, hãy kiểm tra xem mã có hoạt động hay không bằng cách viết một hàm cho phép người dùng nhập giá trị mong muốn của họ thông qua dấu nhắc đầu vào. Hàm add_sum()
nhận hai số làm tham số và trả về giá trị bằng cách sử dụng toán tử + dấu để lấy tổng. Trong một tệp khác, result.py
, sao chép và dán mã sau:
# result.py from main import add_sum print("Please enter the two values\n") num1 = int(input("Please enter the first number: \n")) num2 = int(input("Please enter the second number: \n")) total = add_sum(num1, num2) print(f"The sum of the values is {total}")
Khối mã này thực hiện những việc sau:
add_sum()
từ main.py
int
Python đi kèm với một mô-đun thư viện tiêu chuẩn được tích hợp sẵn được gọi là unittest, cung cấp các công cụ để xây dựng và chạy các bài kiểm tra cho mã của bạn. Mục đích chính của kiểm thử đơn vị là để kiểm tra xem tất cả các chức năng mã có hoạt động như mong đợi hay không.
Trường hợp thử nghiệm là một cách tiêu chuẩn để làm việc với một trường hợp thử nghiệm duy nhất, với các chức năng có sẵn trong lớp tên thử nghiệm. Ngoài ra, một trường hợp thử nghiệm là điều cần thiết trong mã thành phần cho thử nghiệm đơn vị riêng lẻ. Nó sử dụng các phương pháp xác nhận khác nhau để kiểm tra và báo cáo lỗi ngay sau khi chạy mã.
Phần này là tất cả về việc viết một loạt các bài kiểm tra.
Trước khi tạo tệp thử nghiệm để viết tất cả các trường hợp thử nghiệm cho hàm add_sum()
, hãy cập nhật main.py
Sao chép và dán mã sau:
# main.py def add_sum(num1, num2): try: return int(num1) + int(num2) except ValueError as err: return err
Khối mã sử dụng câu lệnh try/except
để xử lý các ngoại lệ trong mã của bạn cảnh báo cho bạn nếu có lỗi trong khối ngoại trừ. Phương pháp này trong lập trình giúp bắt lỗi và chỉ cho bạn số dòng cụ thể nơi xảy ra lỗi.
Bây giờ, hãy tạo một tệp thử nghiệm trong cùng một thư mục có tên là test.py. Trong tệp này, sao chép và dán mã sau:
# test.py import unittest from main import add_sum class MainTest(unittest.TestCase): def test_do_stuff(self): result = add_sum(5, 10) self.assertEqual(result, 15) if __name__ == '__main__': unittest.main()
Như được hiển thị trong khối mã ở trên, điều sau xảy ra:
Hãy nhớ bắt đầu mọi phương pháp với “test_” vì test.py chạy tự động. **
**
Bất cứ khi nào bạn chạy kiểm tra, tất cả các kiểm tra dự kiến sẽ vượt qua với thông báo OK trong bảng điều khiển, có nghĩa là nó đã thành công.
Ran 1 test in 0.000s OK
Trong quá trình phát triển và thử nghiệm, nên có các tình huống thất bại. Làm điều này cho thấy rằng mọi chương trình đều có lỗ hổng và lỗi.
Trong cùng một tệp, test.py
, hãy sửa đổi mã và dán vào như sau:
# test.py import unittest from main import add_sum class MainTest(unittest.TestCase): # other test def test_do_stuff2(self): result = add_sum("hulu", 5) self.assertEqual(result, 5) if __name__ == '__main__': unittest.main()
Kết quả từ việc chạy mã này trông giống như sau:
FAIL: test_do_stuff2 (__main__.MainTest) ---------------------------------------------------------------------- Traceback (most recent call last): File "test.py", line 11, in test_do_stuff3 self.assertEqual(result, 5) AssertionError: ValueError("invalid literal for int() with base 10: 'hulu'") != 5
Từ kết quả đầu ra ở trên, có thể khắc phục sự cố sau bằng cách đọc mã lỗi và sửa mã cho phù hợp:
Khi bạn tạo nhiều tệp và mô-đun khác nhau và bạn cần kiểm tra tất cả chúng đồng thời thay vì thử mặc định một tệp, bạn có thể sử dụng lệnh này để chạy tất cả các kiểm tra đồng thời.
python3 -m unittest
Ngoài ra, để biết thêm chi tiết về bài kiểm tra, hãy sử dụng lệnh với cờ -v (verbose), hiển thị cho bạn các bài kiểm tra OK và bài kiểm tra không thành công.
python3 -m unittest -v
Kết quả trông giống như sau:
test_do_stuff (test.MainTest) ... ok test_do_stuff2 (test.MainTest) ... ok ---------------------------------------------------------------------- Ran 2 tests in 0.000s OK
Kiểm tra đơn vị nên được thực hiện bởi các QAs và các nhà phát triển liên quan đến việc viết và gửi mã bất cứ khi nào một tính năng mới được phát hành trước khi người dùng sử dụng ứng dụng. Thực hiện các bài kiểm tra thường xuyên hoặc định kỳ không phải là một suy nghĩ muộn màng mà là xây dựng niềm tin vào cách ứng dụng hoạt động hiệu quả và hoạt động.
Bài viết này đã cung cấp cho bạn tổng quan về lý do tại sao các bài kiểm tra lại cần thiết trong quá trình phát triển và cách sử dụng các bài kiểm tra đơn vị để kiểm tra chức năng mã và đáp ứng thông số kỹ thuật tiêu chuẩn cho người dùng trước khi triển khai đến sản xuất.