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 thêm Progress Bar trong Python với chỉ một dòng Code

Cách thêm Progress Bar trong Python với chỉ một dòng Code

Toán tử Walrus Operator- Tính năng mới trong Python 3.8

Toán tử Walrus Operator- Tính năng mới trong Python 3.8

Cách nạp dữ liệu Machine Learning từ File trong Python

Cách nạp dữ liệu Machine Learning từ File trong Python

Hướng dẫn sử dụng Google Sheets API với Python

Hướng dẫn sử dụng Google Sheets API với Python

Xây dựng  web Python tự động hóa Twitter | Flask, Heroku, Twitter API & Google Sheets API

Xây dựng web Python tự động hóa Twitter | Flask, Heroku, Twitter API & Google Sheets API

Xây dựng Web Machine Learning đẹp mắt với Streamlit và Scikit-learn trong Python

Xây dựng Web Machine Learning đẹp mắt với Streamlit và Scikit-learn trong Python

Hướng dẫn tạo Chatbot đơn giản bằng PyTorch

Hướng dẫn tạo Chatbot đơn giản bằng PyTorch

11 mẹo và thủ thuật để viết Code Python hiệu quả hơn

11 mẹo và thủ thuật để viết Code Python hiệu quả hơn

Hướng dẫn làm ứng dụng TODO với Flask dành cho người mới bắt đầu trong Python

Hướng dẫn làm ứng dụng TODO với Flask dành cho người mới bắt đầu trong Python

Hướng dẫn viết Snake Game bằng Python

Hướng dẫn viết Snake Game bằng Python

Cách sử dụng chế độ interactive trong Python

Cách sử dụng chế độ interactive trong Python

Cách sử dụng Python Debugger với hàm breakpoint()

Cách sử dụng Python Debugger với hàm breakpoint()

Xây dựng ứng dụng Web Style Transfer với PyTorch và Streamlit

Xây dựng ứng dụng Web Style Transfer với PyTorch và Streamlit

Cách cài đặt Jupyter Notebook trong môi trường Conda và thêm Kernel

Cách cài đặt Jupyter Notebook trong môi trường Conda và thêm Kernel

Hướng dẫn xây dựng ứng dụng dự đoán giá cổ phiếu bằng Python

Hướng dẫn xây dựng ứng dụng dự đoán giá cổ phiếu bằng Python

Hướng dẫn tạo ứng dụng AI hội thoại với NVIDIA Jarvis trong Python

Hướng dẫn tạo ứng dụng AI hội thoại với NVIDIA Jarvis trong Python

Hỗ trợ Async trong Django 3.1

Hỗ trợ Async trong Django 3.1

8 mẹo tái cấu trúc Python giúp mã sạch hơn và Pythonic

8 mẹo tái cấu trúc Python giúp mã sạch hơn và Pythonic

Ý nghĩa của if __name__ ==

Ý nghĩa của if __name__ == "__main__" trong Python

Cách xóa phần tử trong danh sách Python

Cách xóa phần tử trong danh sách Python

Top