nền
Tôi đang chạy một py.test với một fixture trong một conftest file. Bạn có thể xem mã dưới đây (điều này tất cả hoạt động tốt):Làm thế nào để bỏ qua một pytest bằng cách sử dụng một vật cố định bên ngoài?
example_test.py
import pytest
@pytest.fixture
def platform():
return "ios"
@pytest.mark.skipif("platform == 'ios'")
def test_ios(platform):
if platform != 'ios':
raise Exception('not ios')
def test_android_external(platform_external):
if platform_external != 'android':
raise Exception('not android')
conftest.py
import pytest
@pytest.fixture
def platform_external():
return "android"
Vấn đề
Bây giờ tôi muốn có thể bỏ qua một số bài kiểm tra không áp dụng cho bài kiểm tra hiện tại của tôi. Trong ví dụ của tôi, tôi đang chạy thử nghiệm cho iOS hoặc Android (Đây chỉ là mục đích minh họa và có thể là bất kỳ biểu thức nào khác).
Đáng tiếc là tôi không thể có được Ahold của (tôi bên ngoài định nghĩa cố) platform_external
trong báo cáo skipif
. Khi tôi chạy mã bên dưới, tôi nhận được ngoại lệ sau: NameError: name 'platform_external' is not defined
. Tôi không biết đây có phải là lỗi py.test như cục bộ các đồ đạc đã xác định đang hoạt động hay không.
add-on cho example_test.py
@pytest.mark.skipif("platform_external == 'android'")
def test_android(platform_external):
"""This test will fail as 'platform_external' is not available in the decorator.
It is only available for the function parameter."""
if platform_external != 'android':
raise Exception('not android')
Vì vậy, tôi nghĩ rằng tôi sẽ chỉ cần tạo riêng trang trí của tôi, chỉ để thấy rằng nó sẽ không nhận được đồ đạc như các thông số:
from functools import wraps
def platform_custom_decorator(func):
@wraps(func)
def func_wrapper(*args, **kwargs):
return func(*args, **kwargs)
return func_wrapper
@platform_custom_decorator
def test_android_2(platform_external):
"""This test will also fail as 'platform_external' will not be given to the
decorator."""
if platform_external != 'android':
raise Exception('not android')
Câu hỏi
Làm cách nào tôi có thể xác định sửa đổi ture trong một tệp conftest và sử dụng nó để (có điều kiện) bỏ qua thử nghiệm?
Cảm ơn bạn - Tôi cũng đã chọn điểm đánh dấu ngày hôm qua như một công trình xung quanh, nhưng không thích nó vì nó đã không thanh lịch như bạn. (Tôi đã sử dụng 'pytest_runtest_setup' để kiểm tra điểm đánh dấu). Nhưng cho ràng buộc py.tests này có vẻ như giải pháp gần nhất cho câu hỏi của tôi và tôi sẽ cập nhật câu hỏi của tôi để sắp xếp nó. –