[ Pytest ] [ Better ] 5 ví dụ testing with pytest trong python và Test Report
Mục lục
Pytest là một framework dùng để viết và chạy các bài kiểm thử (tests) trong Python.
Nó được ưa chuộng vì sự đơn giản và mạnh mẽ, hỗ trợ nhiều tính năng hữu ích như fixtures, parametrize, và plugins.
Cài đặt pytest
Để cài đặt bạn có thể sử dụng pip:
pip install pytest
Cấu trúc thư mục và các phụ thuộc – thư viện
Viết bài kiểm thử
Tạo file kiểm thử: Các file kiểm thử nên được đặt trong các file có tên bắt đầu bằng
test_
hoặc kết thúc bằng_test.py
.
Ví dụ:test_sample.py
.Viết hàm kiểm thử: Các hàm kiểm thử nên có tên bắt đầu bằng
test_
.
Ví dụ:
Tạo file kiểm thử: Các file kiểm thử nên được đặt trong các file có tên bắt đầu bằng test_ hoặc kết thúc bằng _test.py.
Ví dụ: test_sample.py.
Viết hàm kiểm thử: Các hàm kiểm thử nên có tên bắt đầu bằng test_.
Ví dụ:
# test_sample.py def test_example(): assert 1 + 1 == 2 def test_string(): assert "hello".upper() == "HELLO"
- Chạy bài kiểm thử: Để chạy các bài kiểm thử, bạn có thể sử dụng lệnh
pytest
trong terminal:
pytest
Fixtures
Fixtures là một tính năng mạnh mẽ để thiết lập trạng thái cần thiết cho các bài kiểm thử.
Bạn có thể sử dụng decorator @pytest.fixture để xác định một fixture.
import pytest @pytest.fixture def sample_data(): return {"key1": "value1", "key2": "value2"} def test_data(sample_data): assert sample_data["key1"] == "value1"
Các hàm trong cung cấp trạng thái hoặc dữ liệu cần thiết cho các bài kiểm thử.
Chúng làm cho mã kiểm thử dễ đọc và bảo trì hơn bằng cách giúp phân biệt phần thiết lập ban đầu khỏi các bài kiểm thử.
Dưới đây là một ví dụ về cách sử dụng fixtures:
Giả sử bạn có một module tính math.py có các hàm thêm và trừ.
def add(a, b): return a + b def subtract(a, b): return a - b
Tôi muốn kiểm tra các hàm này bằng cách sử dụng các thiết bị trong
import pytest from calculator import add, subtract # Định nghĩa một fixture để cung cấp dữ liệu kiểm thử @pytest.fixture def input_data(): return {"a": 10, "b": 5} # Sử dụng fixture trong bài kiểm thử def test_add(input_data): result = add(input_data["a"], input_data["b"]) assert result == 15 def test_subtract(input_data): result = subtract(input_data["a"], input_data["b"]) assert result == 5
Giải thích: Fixture có nghĩa là:
Decorator @pytest.fixture được sử dụng để định nghĩa hàm input_data.
Dữ liệu kiểm thử được cung cấp bởi hàm này.
Trong bài kiểm tra, sử dụng bộ phận:
Các hàm kiểm thử test_add và test_subtract nhận được tham số input_data.
pytest sẽ tự động gọi fixture input_data và đưa kết quả đến tham số này.
Dữ liệu từ input_data được sử dụng để kiểm tra các hàm tăng và giảm trong mỗi bài kiểm thử.
Parametrize
Nó cho phép bạn chạy cùng một bài kiểm thử với nhiều tập dữ liệu khác nhau bằng cách sử dụng decorator @pytest.mark.parametrize.
import pytest @pytest.mark.parametrize("input,expected", [ (1 + 1, 2), (2 * 2, 4), (3 - 1, 2), ]) def test_math(input, expected): assert input == expected
Sử dụng Plugins
Nó có một hệ sinh thái plugin phong phú, bạn có thể cài đặt thêm các plugin để mở rộng chức năng.
Ví dụ, để cài đặt plugin pytest-cov để kiểm tra độ bao phủ mã:
pip install pytest-cov
Sau đó, bạn có thể sử dụng nó khi chạy bài kiểm thử:
pytest --cov=my_module
Đây là một số điểm cơ bản để bạn bắt đầu.
Nếu bạn có câu hỏi cụ thể hoặc cần hướng dẫn chi tiết hơn về một tính năng nào đó, hãy cho tôi biết!
pytest-cov là một plugin dùng để đo độ bao phủ mã (code coverage) của các bài kiểm thử.
Độ bao phủ mã cho biết phần trăm mã nguồn của bạn đã được kiểm thử.
Dưới đây là cách cài đặt và sử dụng pytest-cov với một số ví dụ:
Cài đặt pytest-cov
Bạn có thể cài đặt pytest-cov bằng pip:
pip install pytest-cov
Sử dụng pytest-cov
Ví dụ 1: Đo độ bao phủ của một module cụ thể
Giả sử bạn có một module my_module.py và một file kiểm thử test_my_module.py.
my_module.py:
def add(a, b): return a + b def subtract(a, b): return a - b
test_my_module.py:
from my_module import add, subtract def test_add(): assert add(1, 2) == 3 def test_subtract(): assert subtract(2, 1) == 1
Bạn có thể chạy các bài kiểm thử và đo độ bao phủ mã bằng lệnh sau:
pytest --cov=my_module test_my_module.py
Kết quả sẽ hiển thị độ bao phủ mã cho my_module.py trên terminal
Source đây nhá bạn có thể clone về để xem và chạy lênh .run.sh nó sẽ tự động cài đặt tất cả thư viện
Ví dụ 2: Tạo báo cáo HTML
Bạn có thể tạo báo cáo HTML để dễ dàng xem kết quả độ bao phủ mã:
pytest --cov=my_module --cov-report=html test_my_module.py
Lệnh này sẽ tạo ra một thư mục htmlcov chứa báo cáo HTML.
Bạn có thể mở file index.html trong trình duyệt để xem báo cáo.
Ví dụ 3: Đo độ bao phủ của toàn bộ dự án
Giả sử bạn có một dự án với cấu trúc thư mục như sau:
project/ ├── my_module.py ├── another_module.py └── tests/ ├── test_my_module.py └── test_another_module.py
Bạn có thể chạy pytest-cov để đo độ bao phủ của toàn bộ dự án:
pytest --cov=project
Ví dụ 4: Loại trừ một số file hoặc thư mục khỏi báo cáo độ bao phủ
Bạn có thể loại trừ một số file hoặc thư mục khỏi báo cáo độ bao phủ bằng cách sử dụng –cov-exclude:
pytest --cov=project --cov-exclude=test_
Ví dụ 5: Kết hợp nhiều báo cáo
Bạn có thể chạy các bài kiểm thử nhiều lần và kết hợp các báo cáo độ bao phủ lại với nhau:
Chạy kiểm thử lần đầu:
pytest --cov=project --cov-report=term --cov-append
Chạy kiểm thử lần hai (hoặc nhiều lần hơn nếu cần):
pytest --cov=project --cov-report=term --cov-append
Tạo báo cáo cuối cùng:
pytest --cov=project --cov-report=html
Với các ví dụ trên, bạn có thể sử dụng pytest-cov để đo và quản lý độ bao phủ mã của dự án một cách hiệu quả.
Bảng functions and features
Dưới đây là một tóm tắt về các chức năng của, được trình bày dưới dạng bảng để bạn dễ dàng nắm bắt:
Chức năng | Mô tả |
---|---|
assert
| Kiểm tra điều kiện và tạo báo cáo chi tiết nếu điều kiện không đúng. |
@pytest.mark.parametrize
| Cho phép chạy một test với nhiều bộ dữ liệu khác nhau. |
pytest.fixture
| Định nghĩa fixture để chuẩn bị môi trường hoặc dữ liệu cần thiết cho các test cases. |
@pytest.mark.skip
| Bỏ qua một test case cụ thể. |
@pytest.mark.skipif
| Bỏ qua test case dựa trên điều kiện nhất định. |
@pytest.mark.xfail
| Đánh dấu test case dự kiến sẽ thất bại nhưng không ảnh hưởng đến kết quả tổng thể. |
pytest.raises
| Kiểm tra xem một ngoại lệ cụ thể có được ném ra hay không. |
pytest.main
| Chạy pytest từ mã Python. |
pytest.addoption
| Thêm tùy chọn dòng lệnh tùy chỉnh cho pytest. |
pytest.config
| Truy cập cấu hình hiện tại. |
pytest.importorskip
| Chỉ nhập một module nếu nó tồn tại, nếu không thì bỏ qua các test case liên quan. |
capfd
và
capsys
| Nắm bắt đầu ra tiêu chuẩn và lỗi tiêu chuẩn trong các test cases. |
#Mtips5s #Contact
Fanpage: https://www.facebook.com/mtipscoder
Group trao đổi, chia sẻ: https://www.facebook.com/groups/mtipscoder
Website: https://mtips5s.com
Youtube: https://mtips5s.com
Twitter(X): @takagiks99
Instagram: @khuongkara
Threads: @khuongkara
Google Maps: @khuongkara
#Base Code #Souce Code
Bộ công cụ My Self: @tools.mtips5s.com
Github: @github
Npm: @npm
Docker: @docker
Chúc các bạn thành công!
Written by admin
Comments
This post currently has no responses.