Cá nhân hóa Quy trình Phát hiện Kiểm thử trong Pytest
Loại trừ Đường dẫn Trong Quá trình Thu thập
Để loại trừ một số thư mục hoặc mô-đun kiểm tra khỏi quá trình thu thập, bạn có thể sử dụng tùy chọn
--ignore=path từ dòng lệnh. Pytest cho phép sử dụng nhiều tùy chọn
--ignore. Ví dụ:
tests/
|-- example
| |-- test_example_01.py
| |-- test_example_02.py
| '-- test_example_03.py
|-- foobar
| |-- test_foobar_01.py
| |-- test_foobar_02.py
| '-- test_foobar_03.py
'-- hello
'-- world
|-- test_world_01.py
|-- test_world_02.py
'-- test_world_03.py
Khi gọi pytest với các tùy chọn
--ignore=tests/foobar/test_foobar_03.py --ignore=tests/hello/, chỉ các mô-đun không khớp với mẫu được chỉ định sẽ được thu thập.
Tùy chọn
--ignore-glob='*pattern' cho phép loại trừ các đường dẫn dựa trên kiểu dấu hoang dã của Unix Shell. Ví dụ: để loại trừ các mô-đun kết thúc bằng
_01.py, thực thi pytest với
--ignore-glob='*_01.py'.
Hủy Chọn Các Kiểm thử Đã Thu thập
Sử dụng tùy chọn
--deselect=item, bạn có thể hủy chọn các kiểm thử riêng lẻ trong quá trình thu thập. Ví dụ: nếu
tests/foobar/test_foobar_01.py chứa
test_a và
test_b, bạn có thể chạy tất cả các kiểm thử trong
tests/ ngoại trừ
test_a bằng cách gọi pytest với
--deselect tests/foobar/test_foobar_01.py::test_a.
Bảo toàn Các Đường dẫn Lặp lại Từ Dòng lệnh
Pytest mặc định sẽ bỏ qua các đường dẫn lặp lại được chỉ định từ dòng lệnh. Để thu thập lại các kiểm thử lặp lại, sử dụng tùy chọn
--keep-duplicates. Tuy nhiên, nếu bạn chỉ định cùng một tệp kiểm thử hai lần, pytest vẫn sẽ thu thập nó hai lần dù có hay không tùy chọn này.
Thay đổi Quá trình Dò tìm Thư mục
Bạn có thể cấu hình pytest để không duyệt qua các thư mục nhất định bằng cách thiết lập tùy chọn
norecursedirs trong tập tin cấu hình như
pytest.ini.
# Nội dung của pytest.ini
[pytest]
norecursedirs = .svn _build tmp*
Thay đổi Quy ước Tên Gọi
Quy ước tên gọi cho các tệp, lớp và hàm kiểm thử có thể được tùy chỉnh thông qua các tùy chọn cấu hình
python_files,
python_classes, và
python_functions.
Ví dụ:
# Nội dung của pytest.ini
[pytest]
python_files = check_*.py
python_classes = Check
python_functions = *_check
Nếu chúng ta có một tệp
check_myapp.py sau:
# Nội dung của check_myapp.py
class CheckMyApp:
def simple_check(self):
pass
def complex_check(self):
pass
Các kiểm thử sẽ được liệt kê như sau:
$ pytest --collect-only
=========================== test session starts ============================
platform linux -- Python 3.x.y, pytest-5.x.y, py-1.x.y, pluggy-0.x.y
cachedir: $PYTHON_PREFIX/.pytest_cache
rootdir: $REGENDOC_TMPDIR, inifile: pytest.ini
collected 2 items
<Module check_myapp.py>
<Class CheckMyApp>
<Function simple_check>
<Function complex_check>
========================== no tests ran in 0.12s ===========================
Giải thích Tham số Dòng lệnh Là Gói Python
Tùy chọn
--pyargs cho phép pytest cố gắng giải thích các tham số dòng lệnh là tên gói Python, suy ra đường dẫn hệ thống tệp của nó, rồi chạy các kiểm thử tương ứng.
Xem Trước Các Kiểm thử Được Thu thập
Bạn có thể xem cây thu thập mà không cần chạy các kiểm thử bằng cách sử dụng lệnh
--collect-only.
Tùy chỉnh Tập hợp Kiểm thử
Bạn có thể dễ dàng chỉ định pytest phát hiện kiểm thử từ mỗi tệp Python bằng cách sửa đổi cấu hình. Tuy nhiên, để tránh nhập các tệp không mong muốn như
setup.py, bạn có thể động态 xác định danh sách các tệp cần bỏ qua trong tệp
conftest.py.
Ví dụ:
# Nội dung của conftest.py
import sys
collect_ignore = ["setup.py"]
if sys.version_info[0] > 2:
collect_ignore.append("pkg/module_py2.py")
Hơn nữa, bạn cũng có thể thêm các mẫu loại trừ dựa trên kiểu dấu hoang dã của Unix Shell vào danh sách
collect_ignore_glob.