[ Pytest ] [ Better ] 5 ví dụ testing with pytest trong python và Test Report

Avatar admin | July 2, 2024

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

5 ví dụ testing with pytest trong python và
Cấu trúc thư mục test report

Viết bài kiểm thử

  1. 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.

  2. 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"
  1. 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
5 ví dụ testing with pytest trong python và Test Report
5 ví dụ testing trong python và Test Report – lệnh cơ bản

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_addtest_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 mẫu tại đây

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
5 ví dụ testing with pytest trong python và
thống kê test report

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.

5 ví dụ testing with pytest trong python và
test report trực quan
5 ví dụ testing with pytest trong python và
test report trực quan
5 ví dụ testing with pytest trong python và
view test report lên web trực quan

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 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.

Leave a Reply