मैं pytest का उपयोग करके परीक्षण को कैसे अक्षम कर सकता हूं?


86

मान लीजिए कि मेरे पास परीक्षणों का एक गुच्छा है:

def test_func_one():
    ...

def test_func_two():
    ...

def test_func_three():
    ...

क्या एक डेकोरेटर या कुछ ऐसा ही है जिसे मैं pytestसिर्फ उस टेस्ट को चलाने से रोकने के लिए कार्यों में जोड़ सकता हूं ? परिणाम कुछ इस तरह दिख सकता है ...

@pytest.disable()
def test_func_one():
    ...

def test_func_two():
    ...

def test_func_three():
    ...

जवाबों:


133

पाइस्ट में पायथन अनीटेस्ट मॉड्यूल (जो उपयोग करता है skipऔर skipIf) के समान स्किप और स्किपिफ़ डेकोरेटर्स है , जो यहां प्रलेखन में पाया जा सकता है

लिंक से उदाहरण यहां देखे जा सकते हैं:

@pytest.mark.skip(reason="no way of currently testing this")
def test_the_unknown():
    ...

import sys
@pytest.mark.skipif(sys.version_info < (3,3),
                    reason="requires python3.3")
def test_function():
    ...

पहला उदाहरण हमेशा परीक्षण को छोड़ देता है, दूसरा उदाहरण आपको सशर्त रूप से परीक्षण छोड़ने की अनुमति देता है (महान जब परीक्षण प्लेटफॉर्म, निष्पादन योग्य संस्करण या वैकल्पिक पुस्तकालयों पर निर्भर करता है।

उदाहरण के लिए, अगर मैं जांचना चाहता हूं कि क्या किसी के पास लाइब्रेरी पंडों को परीक्षण के लिए स्थापित किया गया है।

import sys
try:
    import pandas as pd
except ImportError:
    pass

@pytest.mark.skipif('pandas' not in sys.modules,
                    reason="requires the Pandas library")
def test_pandas_function():
    ...

क्या .skipमोचा (Node.js) के समान कुछ है? it('tests something'...)-> it.skip('tests something'...)जो उस विशेष परीक्षा को निष्क्रिय कर देगा। इसके विपरीत काम भी है: .onlyजो केवल उस परीक्षा को चलाएगा और कुछ नहीं।
जूहा अनटाइनन

मैं मतलब, के लिए only: हिस्सा है, आप आदेश पंक्ति या जो भी आप परीक्षण धावक प्रारंभकर्ता करने के लिए उपयोग के माध्यम से ऐसा कर सकते हैं stackoverflow.com/a/36539692/4131059 का सवाल है itऔर it.skipमुझे विश्वास है कार्यक्षमता यहां पूरी तरह से है कि शामिल किया गया।
अलेक्जेंडर हुज़ैग

21

skipडेकोरेटर काम करना होगा:

@pytest.mark.skip(reason="no way of currently testing this")
def test_func_one():
    # ...

( reasonतर्क वैकल्पिक है, लेकिन हमेशा यह निर्दिष्ट करना एक अच्छा विचार है कि परीक्षण क्यों छोड़ दिया गया है)।

skipif()कुछ विशिष्ट स्थिति पूरी होने पर परीक्षण को अक्षम करने की अनुमति भी है।


इन सज्जाकारों को विधियों, कार्यों या कक्षाओं में लागू किया जा सकता है।

एक मॉड्यूल में सभी परीक्षणों को छोड़ने के लिए , एक वैश्विक pytestmarkचर को परिभाषित करें :

# test_module.py
pytestmark = pytest.mark.skipif(...)

10

मुझे यकीन नहीं है कि अगर यह पदावनत है, लेकिन आप pytest.skipपरीक्षण के अंदर फ़ंक्शन का उपयोग भी कर सकते हैं :

def test_valid_counting_number():
     number = random.randint(1,5)
     if number == 5:
         pytest.skip('Five is right out')
     assert number <= 3

2
सबसे मदद के लिए आया था, संदर्भ के लिए रुका था
Uzebeckatrente

इसका क्या संदर्भ है। मुझे जानना होगा
XChikuX


मुझे डर है कि यह मेरे समय से पहले था। लेकिन, मुझे खुशी है कि मैं इसे अब जानता हूं।
XChikuX

6

आप परीक्षण को चलाना चाहते हैं, भले ही आपको संदेह हो कि परीक्षण विफल हो जाएगा। ऐसे परिदृश्य के लिए https://docs.pytest.org/en/latest/skipping.html डेकोरेटर @ pytest.mark.xfail का उपयोग करने का सुझाव देता है

@pytest.mark.xfail
def test_function():
    ...

इस मामले में, पिएस्टेस्ट अभी भी आपके परीक्षण को चलाएगा और आपको बताएगा कि यह पास होता है या नहीं, लेकिन शिकायत नहीं करेगा और बिल्ड को तोड़ देगा।


2

यदि आप परीक्षण को छोड़ना चाहते हैं, लेकिन हार्ड कोड को मार्कर नहीं, तो बचने के लिए कीवर्ड अभिव्यक्ति का बेहतर उपयोग करें।

pytest test/test_script.py -k 'not test_func_one'

1

आप के साथ एक परीक्षण चिह्नित कर सकते हैं skipऔर skipifसज्जाकार जब आप में एक परीक्षण छोड़ना चाहते pytest

एक परीक्षण लंघन

@pytest.mark.skip(reason="no way of currently testing this")
def test_func_one():
    ...

एक परीक्षण को छोड़ने का सबसे सरल तरीका यह है कि इसे skipडेकोरेटर के साथ चिह्नित किया जाए जो वैकल्पिक हो सकता है reason

यह भी संभव है कि परीक्षण निष्पादन या सेटअप के दौरान अनिवार्य रूप से छोड़ें pytest.skip(reason)फ़ंक्शन । यह उपयोगी है जब आयात समय के दौरान स्किप स्थिति का मूल्यांकन करना संभव नहीं है।

def test_func_one():
    if not valid_config():
        pytest.skip("unsupported configuration")

एक शर्त के आधार पर एक परीक्षण लंघन

@pytest.mark.skipif(sys.version_info < (3, 6), reason="requires python3.6 or higher")
def test_func_one():
    ...

यदि आप एक सशर्त के आधार पर छोड़ना चाहते हैं तो आप skipifइसके बजाय उपयोग कर सकते हैं । पिछले उदाहरण में, पायथन 3.6 की तुलना में एक दुभाषिया पर चलने पर परीक्षण फ़ंक्शन को छोड़ दिया जाता है।

अंत में, यदि आप एक परीक्षण छोड़ना चाहते हैं क्योंकि आप सुनिश्चित हैं कि यह विफल हो रहा है, तो आप xfailमार्कर का उपयोग करके यह भी संकेत करने के लिए विचार कर सकते हैं कि आप परीक्षण में विफल होने की उम्मीद करते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.