Hướng dẫn dùng pytest assert python
Hướng dẫn sử dụng thư viện pytest Show 1. Cài đặt thư viện pytest: Vào cmd gõ: py – m pip install pytest 2. Chạy các file test và các phương thức test: Theo mặc định thì pytest sẽ chỉ nhận dạng được các file có tên bắt đầu với test_ hoặc kết thúc với _test. Còn đối với các phương thức thì yêu cầu tên của các phương thức bắt đầu bằng “test”, những phương thức có tên khác sẽ bị bỏ qua. Dưới đây là ví dụ về đặt tên file pytest hợp lệ và không hợp lệ: test_username.py --- hợp lệ username_test.py --- hợp lệ testusername --- không hợp lệ usernametest --- không hợp lệ Và ví dụ về tên các phương thức pytest hợp lệ và không hợp lệ: def test_method(): --- hợp lệ def testmethod(): --- hợp lệ def method(): ---không hợp lệ 3. Chạy những test được chỉ định: Chúng ta sẽ sử dụng pytest markers bằng cách định nghĩa các marker trên mỗi phương thức, cách khai báo như sau: Ví dụ tạo 2 file test test_1.py và test_2.py có nội dung như bên dưới, sau đó chỉ chạy những test có mark tên example1 Nội dung file test_1.py import pytest def test_equal_1(): a = 1 b = 2 assert a==b, "a không bằng b" def test_equal_2(): a = 1 b = 2 assert a==b, "a không bằng b" Nội dung file test_2.py import pytest def test_equal_1(): a = 1 b = 2 assert a==b, "a không bằng b" def test_equal_2(): a = 1 b = 2 assert a==b, "a không bằng b" Sau khi lưu lại 2 file trên, chúng ta sẽ chạy những test có mark tên example1 bằng cách vào đường dẫn nơi đặt 2 file vừa tạo và gõ: pytest –m example1 Kết quả: Theo như trên hình thì test_1.py có 1 chức năng bị Fail, test_2 có 2 phương thức bị Fail, chỉ ra bị sai ở chỗ nào của phương thức. Ngoài ra, pytest có cung cấp các mark được định nghĩa sẵn, chúng ta sẽ vào cmd gõ: pytest - -markers 4. Fixtures: Fixtures được dùng để khởi tạo các thông số đầu vào, thay vì trong mỗi đoạn test chúng ta đều phải khai báo các giá trị để đưa vào test thì ta chỉ cần khai báo một lần duy nhất, khi muốn sử dụng vào đoạn test nào thì gọi hàm đã được chúng ta đánh dấu là fixture. Chúng ta sẽ đi đến ví dụ sau để dễ hình dung hơn import pytest def input_value(): input = 10 return input def test_mod_2(input_value): assert input_value %2 == 0 def test_mod_3(input_value): assert input_value %3 == 0 Lưu file với tên test_mod.py, sau đó vào cmd chạy file: pytest –k mod –v .Đây là một cách chạy các test có tên có chữ “mod” Kết quả: Thông tin khác
Giới thiệu về PytestĐặt vấn đềBạn viết 1 service mà nó yêu cầu lấy dữ liệu từ bên thứ ba sau đó phải xử lý dữ liệu nhận được để đưa ra kết quả trả về cho response, giả sử quá trình đó diễn ra rất mất thời gian (tầm 5s). Và bây giờ bạn muốn kiểm thử hoạt động của service của mình nhưng lại không mong muốn nó gọi API của bên thứ 3 liên tục mỗi lần test vì nó sẽ làm cho quá trình test chậm lại, vả lại việc gọi thêm API sẽ đòi hỏi nhiều bước làm của bạn Một trường hợp khác
là hàm cần test cần thao tác với database, nhưng ta không được phép thay đổi hay cập nhật vào database đó (vì sẽ làm nguy hiểm đến hệ thống đang chạy). Vậy điều chúng ta cần ở đây chính là việc có thể thay thế việc gọi API hay truy cập database bằng một hành động khác nào đó mà vẫn có dữ liệu trả về tương tự như API, chúng ta tạm gọi đó là việc PytestKhông giống như phần lớn các ngôn ngữ lập trình, Python sử dụng 1 thư viện
Cách sử dụng của PytestĐầu tiên ta cần có một hàm để mang đi test, giả sử nó có tên là
Ví dụ đơn giản về sử dụng PytestVí dụ này sẽ giúp bạn hiểu tại sao nên sử dụng
Trong đó, hàm
Sau đó ta chạy lệnh test:
Ta thấy kết quả chạy thực sự khá lâu, và để khắc phục điều đó, ta sẽ sử dụng khái niệm gọi là
Ta chạy lại code test sẽ thấy kết quả được cải thiện:
Trong ví dụ trên ta mặc định những gì ta trả về chỉ là giá trị
Tài liệu tham khảohttps://www.freblogg.com/pytest-functions-mocking-1 |