Kiểm thử đơn vị nâng cao bằng Python - Tối ưu hiệu năng
By JoeVu, at: 19:41 Ngày 27 tháng 11 năm 2022
Thời gian đọc ước tính: __READING_TIME__ minutes


Kiểm thử đơn vị là một phần thiết yếu trong phát triển phần mềm, nhưng khi kích thước bộ kiểm thử tăng lên, thời gian chạy kiểm thử có thể trở thành một nút thắt trong quy trình phát triển. Trong bài viết này, chúng ta sẽ khám phá một số kỹ thuật nâng cao để tối ưu hóa hiệu năng của kiểm thử đơn vị trong Python.
Chọn Kiểm Thử
Một cách để tối ưu hóa hiệu năng của kiểm thử đơn vị là chỉ chạy các kiểm thử có liên quan đến các thay đổi đã thực hiện. Điều này được gọi là chọn kiểm thử. Module unittest
của Python bao gồm một trình chạy kiểm thử gọi là unittest discover
hỗ trợ chọn kiểm thử.
Để chỉ chạy các kiểm thử có liên quan, bạn có thể sử dụng một công cụ như pytest-watch
. Công cụ này theo dõi mã để phát hiện thay đổi và tự động chạy các kiểm thử có liên quan. Điều này tiết kiệm thời gian bằng cách tránh cần phải chạy toàn bộ bộ kiểm thử mỗi khi có thay đổi.
Ví dụ, giả sử bạn có một bộ kiểm thử với 1000 kiểm thử, và bạn thực hiện một thay đổi đối với một kiểm thử duy nhất. Thay vì chạy tất cả 1000 kiểm thử, bạn có thể sử dụng pytest-watch
để chỉ chạy kiểm thử đã thay đổi, tiết kiệm thời gian và tài nguyên.
# Cài đặt pytest-watch
pip install pytest-watch
# Chạy pytest-watch
ptw
Song Song Hóa Kiểm Thử
Một cách khác để tối ưu hóa hiệu năng của kiểm thử đơn vị là chạy chúng song song. Điều này có thể đặc biệt hiệu quả nếu bộ kiểm thử lớn và mất nhiều thời gian để chạy. Module unittest
của Python bao gồm một trình chạy kiểm thử gọi là unittest runner
hỗ trợ song song hóa kiểm thử.
Để chạy kiểm thử song song, bạn có thể sử dụng một công cụ như pytest-xdist
. Công cụ này chia bộ kiểm thử thành nhiều tiến trình và chạy chúng song song. Điều này tiết kiệm thời gian bằng cách tận dụng sức mạnh xử lý khả dụng và chạy kiểm thử nhanh hơn.
Ví dụ, giả sử bạn có một bộ kiểm thử với 1000 kiểm thử, và mất 10 phút để chạy toàn bộ bộ. Bằng cách sử dụng pytest-xdist
với 4 worker, bạn có thể chạy kiểm thử trong 2,5 phút.
# Cài đặt pytest-xdist
pip install pytest-xdist
# Chạy kiểm thử song song với 4 worker
pytest -n 4
Cách Ly Kiểm Thử
Cách ly kiểm thử là việc thực hành chạy mỗi kiểm thử trong môi trường riêng của nó để ngăn chặn sự can thiệp giữa các kiểm thử. Điều này có thể đặc biệt quan trọng nếu các kiểm thử dựa vào các phụ thuộc bên ngoài như cơ sở dữ liệu hoặc dịch vụ web. Module unittest
của Python bao gồm một trình chạy kiểm thử gọi là unittest runner
hỗ trợ cách ly kiểm thử.
Để chạy kiểm thử trong môi trường cách ly, bạn có thể sử dụng một công cụ như pytest-mock
. Công cụ này tạo một đối tượng mock mới cho mỗi kiểm thử, đảm bảo rằng mỗi kiểm thử chạy trong môi trường riêng của nó. Điều này tiết kiệm thời gian bằng cách tránh cần phải thiết lập và dọn dẹp môi trường cho mỗi kiểm thử.
Ví dụ, giả sử bạn có một bộ kiểm thử dựa vào kết nối cơ sở dữ liệu. Nếu không có cách ly kiểm thử, mỗi kiểm thử sẽ cần thiết lập và dọn dẹp kết nối cơ sở dữ liệu, điều này có thể tốn thời gian. Bằng cách sử dụng pytest-mock
, mỗi kiểm thử có thể chạy trong môi trường riêng của nó, và kết nối cơ sở dữ liệu có thể được mock, tiết kiệm thời gian và tài nguyên.
# Cài đặt pytest-mock
pip install pytest-mock
# Sử dụng pytest-mock trong một kiểm thửimport pytest
from unittest.mock import Mock
def test_database_connection(mocker):
# Mock kết nối cơ sở dữ liệu
mock_connection = Mock()
mocker.patch('database.connect', return_value=mock_connection)
# Chạy kiểm thử
assert database.connect() == mock_connection
Độ Phủ Mã
Độ phủ mã là thước đo mức độ mã được bao phủ bởi các kiểm thử. Bằng cách đo độ phủ mã, bạn có thể xác định các vùng mã chưa được kiểm thử và ưu tiên nỗ lực kiểm thử cho phù hợp. Module unittest
của Python bao gồm một công cụ độ phủ mã gọi là coverage.py
.
Để đo độ phủ mã, bạn có thể chạy kiểm thử với lệnh coverage
:
# Cài đặt coverage.py
pip install coverage
# Chạy kiểm thử với coverage
coverage run -m unittest discover
Sau đó, bạn có thể tạo một báo cáo về độ phủ mã với lệnh coverage report
:
# Tạo báo cáo độ phủ mã
coverage report
Báo cáo này hiển thị tỷ lệ phần trăm mã được bao phủ bởi các kiểm thử và xác định các vùng mã cần kiểm thử thêm.
Ví dụ, giả sử bạn có một cơ sở mã với 1000 dòng mã, và báo cáo độ phủ mã cho thấy chỉ có 80% mã được bao phủ bởi các kiểm thử. Bạn có thể sử dụng thông tin này để ưu tiên nỗ lực kiểm thử và viết thêm kiểm thử để tăng độ phủ mã.
Kết Luận
Tối ưu hóa hiệu năng của kiểm thử đơn vị là một phần quan trọng trong phát triển phần mềm. Bằng cách sử dụng các kỹ thuật nâng cao như chọn kiểm thử, song song hóa kiểm thử, cách ly kiểm thử và độ phủ mã, bạn có thể tăng tốc bộ kiểm thử và phát hiện lỗi sớm trong chu kỳ phát triển. Các kỹ thuật này có thể tiết kiệm thời gian và tài nguyên, làm cho quy trình phát triển hiệu quả hơn và hiệu quả hơn.