Hướng dẫn pytest python - trăn pytest
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" def test_equal_2(): 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" def test_equal_2(): Nội dung file test_2.py 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: import pytest def test_equal_1(): a = 1 b = 2 assert a==b, "a không bằng b" def test_equal_2(): Nội dung file test_2.py 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 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
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 0 Để cài đặt và sử dụng 0, ta chạy câu lệnh sau:2 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à 3 Việc ta cần làm là:
3
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 5 sẽ cho ta biết máy tính đang sử dụng Windows hay Linux
Trong đó, hàm 6 để check nếu hệ điều hành hiện tại là Windows hay không, ta giả sử hàm này khá phức tạp và tốn khá nhiều thời gian để chạy, ta giả sử bằng hàm sleep(5), nghĩa là chương trình sẽ mất 5s để xử lý Hàm 5 sẽ là phần code base và ta cần phải mang nó đi test để kiểm thử Ta cần một hàm chạy test, có tên là 8 sau:
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à 9 và để nó là tham số của hàm test, nó có tác dụng làm test của ta khi gọi đến hàm 0 sẽ không chạy hàm thật, mà return luôn về giá trị mà ta định sẵn trong đối số của 9 9 sẽ nhận 2 đối số, một là 3 - là đường dẫn đến nơi hàm mà ta định fake hàm, hai là 4 là giá trị trả về khi gọi hàm fake đó Bây giờ ta sẽ update lại hàm test, sử dụng 9:
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ị 6, giờ muốn nó là 7 thì sẽ viết như sau:
Tài liệu tham khảohttps://www.freblogg.com/pytest-functions-mocking-1 |