Cá nhân hóa Quy trình Phát hiện Kiểm thử trong Pytest

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

Thẻ: pytest python-testing Customization

Đăng vào ngày 14 tháng 6 lúc 00:01