Khi làm việc với mã cấp sản xuất, việc kiểm tra trở nên quan trọng như chính mã đó. Nếu bạn đã từng đóng góp cho bất kỳ dự án phần mềm đáng chú ý nào, bạn sẽ biết rằng ngay cả những thay đổi nhỏ cũng yêu cầu bạn viết bài kiểm tra để đảm bảo mã của bạn không bị hỏng. Trong một bài viết khác, chúng tôi đã xem xét những kiến thức cơ bản về kiểm tra mã của bạn bằng thư viện unittest. Ở đây chúng ta sẽ xem xét thư viện thử nghiệm Python được sử dụng rộng rãi khác, pytest. Làm việc với thư viện pytest có thể nhanh chóng trở nên khó hiểu và đôi khi thậm chí không phải Pythonic. Chúng tôi sẽ xem xét một số phần quan trọng của thư viện cũng như chức năng có thể gây nhầm lẫn cho người dùng mới Tham số hóa chức năng kiểm tra Có nhiều tình huống khi chúng ta có thể muốn kiểm tra nhiều đầu vào cho cùng một chức năng kiểm tra. Thông thường, điều này sẽ được thực hiện bằng cách sử dụng vòng lặp Sử dụng trình trang trí ở trên, chúng tôi thấy rằng chúng tôi đang trang trí chức năng Sử dụng đồ đạc Sử dụng lịch thi đấu cho phép chúng tôi thiết lập môi trường thử nghiệm trước khi chạy thử nghiệm thực tế. Lịch thi đấu là một loại môi trường mà chúng tôi sử dụng để đảm bảo rằng chúng tôi có mọi thứ cần thiết để chạy thử nghiệm thành công. Pytest có công cụ trang trí vật cố định riêng cho mục đích này. Giả sử chúng ta có một nhóm nhiệm vụ cần thực hiện trước khi chạy thử nghiệm. Đây có thể là đăng nhập vào máy chủ hoặc lấy một số dữ liệu. Với sự trợ giúp của một vật cố định, chúng tôi có thể tự động chạy các hoạt động như thế này trước khi chạy thử nghiệm của mình Sử dụng vật cố định để đọc trong tệp CSV trước khi kiểm traỞ trên, chúng ta thấy chức năng conftest. tập tin py Việc sử dụng (và sự tồn tại) của conftest. py là một bí ẩn đối với tôi khi tôi lần đầu tiên bắt đầu sử dụng pytest để kiểm tra mã của mình. Tôi sẽ thấy một số thử nghiệm với các tham số không được xác định trong cùng một tệp cũng như không được nhập rõ ràng từ một tệp khác. Nó rất bất thường và tôi phải mất một thời gian để hiểu đầy đủ. Chỉ khi tôi nhận ra rằng conftest. py đã tồn tại mà cuối cùng tôi đã hiểu các tham số này đến từ đâu Một bài kiểm tra đơn giản để kiểm tra xem đầu vào có phải là một chuỗi khôngGiả sử chúng ta có một chức năng kiểm tra được gọi là Bằng cách tạo tệp Bạn cũng có thể nhận thấy rằng chúng tôi đã sử dụng một tham số có tên là chức năng chế nhạo Để sử dụng mock với pytest, chúng ta có thể sử dụng thư viện pytest-mock. Nhưng chính xác thì giả là gì? . Nếu chúng tôi phải chạy chức năng đó nhiều lần trong quá trình kiểm tra, toàn bộ quá trình sẽ mất nhiều thời gian để hoàn thành. Thay vì chạy chức năng này trong thử nghiệm, chúng ta có thể tạo một đối tượng giả bắt chước nó mà không thực sự chạy tính toán đắt tiền. Bằng cách này, chúng tôi đơn giản hóa thử nghiệm của mình và tiết kiệm thời gian. Tạo một bản mô phỏng cho phép chúng ta bắt chước hành vi của một hằng số, hàm, lớp hoặc bất kỳ đối tượng Python nào khác. Hãy xem một ví dụ để minh họa rõ hơn điều này Giả sử chúng ta đang thử nghiệm một mô-đun và chúng ta phải thực hiện một số thao tác tổng hợp dữ liệu phức tạp trên một tập dữ liệu khổng lồ để có thể hoàn thành mô-đun đó Một mô-đun có lời gọi hàm đắt tiềnTrong ví dụ này, chúng ta có hàm Trong chức năng Cũng có thể sử dụng mô phỏng kết hợp với các khái niệm khác mà chúng ta đã học trước đây. Giả sử chúng ta cần chạy hàm Ở đây, chúng tôi đã chuyển cuộc gọi Phần kết luận Chúng tôi đã thảo luận về một số chức năng quan trọng có sẵn trong thư viện pytest. Chúng tôi đã xem xét cách tham số hóa các chức năng kiểm tra để dễ dàng chạy thử nghiệm với nhiều đầu vào/bộ đầu vào khác nhau. Điều này giúp loại bỏ nhu cầu sử dụng các vòng lặp rườm rà để kiểm tra. Tiếp theo, chúng tôi đã xem xét các thiết bị cố định và cách chúng tôi có thể sử dụng chúng để thiết lập môi trường thử nghiệm trước khi chạy thử nghiệm. Chúng tôi cũng đã khám phá tệp Làm cách nào để đọc tệp CSV trong JUnit?Đọc dữ liệu thử nghiệm từ tệp CSV bằng JUnit . Tạo một lớp thử nghiệm JUnit mới sử dụng trình chạy được tham số hóa bằng cách sử dụng. . Thêm phương thức testData() sẽ trả về dữ liệu thử nghiệm từ tệp CSV dưới dạng tập hợp. . Thêm phương thức getTestData() đọc tệp CSV và trả về dữ liệu trong bộ sưu tập Là pytest tốt hơn so với unittest?Đầu ra ở trên cho chúng ta biết rằng hai bài kiểm tra đã được chạy trong 0. 001 và một thất bại, nhưng không nhiều. Cuối cùng, pytest cung cấp nhiều thông tin phản hồi hơn , rất hữu ích khi đến lúc gỡ lỗi. Nói chung, cả pytest và unittest đều là những công cụ tuyệt vời để sử dụng để kiểm tra tự động trong Python. |