PYTHON UNIT TESTING
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.

Sử dụng Unittest Coverage trong Python

Trong bài viết này, bạn sẽ học cách sử dụng lệnh coverage của unittest trong Python để tạo báo cáo về độ bao phủ kiểm thử. Độ bao phủ kiểm thử là một chỉ số quan trọng giúp đánh giá mức độ mà bộ kiểm thử của bạn đã kiểm tra mã nguồn. Bằng cách sử dụng công cụ coverage, bạn có thể xác định các phần của mã nguồn chưa được kiểm thử và cải thiện chất lượng kiểm thử của mình. Hướng dẫn này sẽ chỉ cho bạn từng bước cụ thể để tạo báo cáo độ bao phủ kiểm thử, giúp bạn có cái nhìn toàn diện và chi tiết về hiệu quả của các bài kiểm thử hiện tại.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Độ bao phủ kiểm thử là gì?

Độ bao phủ kiểm thử là tỷ lệ giữa số dòng mã được thực thi ít nhất một lần bởi một trường hợp kiểm thử và tổng số dòng mã của toàn bộ mã nguồn:

độ bao phủ kiểm thử = số dòng mã được thực thi / tổng số dòng mã

Độ bao phủ kiểm thử thường được sử dụng để đánh giá chất lượng của bộ kiểm thử. Nếu độ bao phủ kiểm thử thấp, ví dụ 5%, điều đó cho thấy bạn chưa kiểm thử đủ.

Tuy nhiên, điều ngược lại không phải lúc nào cũng đúng. Ví dụ, độ bao phủ kiểm thử 100% không đảm bảo rằng bạn có một bộ kiểm thử tốt. Nói cách khác, một bộ kiểm thử có độ bao phủ cao vẫn có thể kém chất lượng.

Bài viết này được đăng tại [free tuts .net]

Ví dụ về độ bao phủ kiểm thử với unittest

Chúng ta sẽ sử dụng cấu trúc dự án sau để minh họa cách sử dụng coverage với unittest. Bạn có thể lấy mã nguồn từ hướng dẫn này.

D:\python-unit-testing
├── shapes
|   ├── circle.py
|   ├── shape.py
|   └── square.py
└── test
    ├── test_circle.py
    ├── test_square.py
    └── __init__.py

Để tạo báo cáo độ bao phủ, bạn cần thực hiện hai bước:

Bước 1: Chạy mô-đun coverage để tạo dữ liệu độ bao phủ:

python -m coverage run -m unittest

Bước 2: Biến dữ liệu độ bao phủ thành một báo cáo:

python -m coverage report

Output:

Name                  Stmts   Miss  Cover
-----------------------------------------
shapes\circle.py          9      0   100%
shapes\shape.py           4      0   100%
shapes\square.py          9      0   100%
test\__init__.py          0      0   100%
test\test_circle.py      14      0   100%
test\test_square.py      14      0   100%
-----------------------------------------
TOTAL                    50      0   100%

Để tạo báo cáo độ bao phủ ở định dạng HTML, bạn thay đổi tùy chọn của mô-đun coverage thành HTML như sau:

python -m coverage html

Output:

Wrote HTML report to htmlcov\index.html

Kết quả cho thấy vị trí của báo cáo độ bao phủ HTML tại htmlcov\index.html trong thư mục dự án. Nếu bạn mở tệp index.html trong thư mục htmlcov, nó sẽ trông như sau:

python unittest coverage png

Xem chi tiết báo cáo độ bao phủ với unittest

Đầu tiên, thêm phương thức perimeter() vào lớp Circle như sau:

import math
from .shape import Shape


class Circle(Shape):
    def __init__(self, radius: float) -> None:
        if radius < 0:
            raise ValueError('The radius cannot be negative')

        self._radius = radius

    def area(self) -> float:
        return math.pi * math.pow(self._radius, 2)

    def perimeter(self) -> float:
        return 2 * math.pi * self._radius

Tiếp theo, thu thập dữ liệu độ bao phủ bằng cách chạy lệnh sau:

python -m coverage run -m unittest

Sau đó, tạo báo cáo độ bao phủ bằng lệnh:

python -m coverage report

python unittest coverage example png

Output:

Name                  Stmts   Miss  Cover
-----------------------------------------
shapes\circle.py         11      1    91%
shapes\shape.py           4      0   100%
shapes\square.py          9      0   100%
test\__init__.py          0      0   100%
test\test_circle.py      14      0   100%
test\test_square.py      14      0   100%
-----------------------------------------
TOTAL                    52      1    98%

Độ bao phủ hiện tại là 98% tổng thể và 91% trong mô-đun shapes\circle.py. Điều này là do phương thức perimeter() chưa được kiểm thử.

Sau đó, tạo báo cáo độ bao phủ ở định dạng HTML:

python -m coverage html

python unittest coverage detail 20 1  png

Kết bài

Trong bài viết này, mình đã tìm hiểu cách sử dụng công cụ coverage để đánh giá độ bao phủ kiểm thử của mã nguồn Python. Bằng cách sử dụng lệnh python -m coverage run -m unittest, chúng ta có thể thu thập dữ liệu về độ bao phủ của các bài kiểm thử. Sau đó, lệnh python -m coverage report cho phép chúng ta tạo báo cáo chi tiết về độ bao phủ dưới dạng văn bản. Cuối cùng, lệnh python -m coverage html giúp mình tạo báo cáo độ bao phủ ở định dạng HTML, cung cấp một giao diện trực quan và dễ dàng phân tích. Việc sử dụng công cụ coverage không chỉ giúp mình đảm bảo rằng các phần quan trọng của mã nguồn đã được kiểm thử mà còn cung cấp thông tin chi tiết để cải thiện chất lượng bộ kiểm thử. Hãy áp dụng những kiến thức này vào dự án của bạn để nâng cao hiệu quả kiểm thử và chất lượng mã nguồn.

Cùng chuyên mục:

Cách tạo thư mục lồng nhau (nested directory) trong Python

Cách tạo thư mục lồng nhau (nested directory) trong Python

Cách thêm số 0 vào đầu chuỗi trong Python

Cách thêm số 0 vào đầu chuỗi trong Python

Sự khác biệt giữa @classmethod, @staticmethod và instance methods trong Python

Sự khác biệt giữa @classmethod, @staticmethod và instance methods trong Python

Sự khác biệt giữa str và repr trong Python

Sự khác biệt giữa str và repr trong Python

Các cách nối hai danh sách trong Python

Các cách nối hai danh sách trong Python

Sự khác biệt giữa append() và extend() trong list Python

Sự khác biệt giữa append() và extend() trong list Python

5 lỗi thường gặp trong Python

5 lỗi thường gặp trong Python

Các tính năng mới trong Python 3.10

Các tính năng mới trong Python 3.10

Tạo app ghi chú trong Python với nhận dạng giọng nói và API Notion

Tạo app ghi chú trong Python với nhận dạng giọng nói và API Notion

Làm chủ Pattern Matching trong Python 3.10

Làm chủ Pattern Matching trong Python 3.10

Cách yêu cầu người dùng nhập liệu đến khi nhận được phản hồi hợp lệ trong Python

Cách yêu cầu người dùng nhập liệu đến khi nhận được phản hồi hợp lệ trong Python

8 Mẹo Refactor Code Python nhanh gọn (Phần 2)

8 Mẹo Refactor Code Python nhanh gọn (Phần 2)

Cách sao chép file trong Python

Cách sao chép file trong Python

31 Phương thức xử lý chuỗi (String) quan trọng trong Python

31 Phương thức xử lý chuỗi (String) quan trọng trong Python

Cách xóa file và thư mục trong Python

Cách xóa file và thư mục trong Python

Tìm hiểu về *args và **kwargs trong Python

Tìm hiểu về *args và **kwargs trong Python

Cách làm phẳng danh sách lồng nhau trong Python

Cách làm phẳng danh sách lồng nhau trong Python

Phân tích dữ liệu Apple Health bằng Python

Phân tích dữ liệu Apple Health bằng Python

Cách loại bỏ phần tử trùng lặp khỏi danh sách (List) trong Python

Cách loại bỏ phần tử trùng lặp khỏi danh sách (List) trong Python

Cách cắt (slicing) chuỗi trong Python

Cách cắt (slicing) chuỗi trong Python

Top