2017-02-17 9 views
20

मान लीजिए कि मैं तरह मेरे pytest.ini फ़ाइल में एक pytest प्लगइन अक्षम करते हैं:pytest: कैसे स्पष्ट रूप से आदेश पंक्ति में एक प्लगइन सक्षम करने के लिए

[pytest] 
... 
addopts= 
    -p no:myplugin 

अब मैं कमांड लाइन तर्क के साथ कभी कभी इसे सक्षम होना चाहते हैं, की तरह कुछ:

pytest -p yes:myplugin 

कि संभव है? कृपया, अगर आपके पास बेहतर सिफारिशें हैं, तो मैं भी उसे जानना चाहूंगा।

उत्तर

-2

मुझे ऐसा करने की आवश्यकता नहीं है, क्योंकि कमांडलाइन झंडे के माध्यम से प्लगइन्स को अक्षम करना आसान है। समाधान के लिए आप -c विकल्प का उपयोग कर एक अलग INI फ़ाइल निर्दिष्ट कर सकते हैं और या तो एक अलग INI फ़ाइल है या यहां तक ​​कि /dev/null का उपयोग के रूप में मैं नीचे

$ cat pytest.ini 
[pytest] 
addopts= -p no:django 
$ py.test 
================================================= test session starts 
platform linux -- Python 3.4.3, pytest-3.0.5, py-1.4.32, pluggy-0.4.0 
rootdir: /home/me/python, inifile: pytest.ini 
plugins: pep8-1.0.6, cov-2.4.0 
collected 0 items 
============================================ no tests ran in 0.02 seconds  
$ py.test -c /dev/null 
================================================= test session starts 
platform linux -- Python 3.4.3, pytest-3.0.5, py-1.4.32, pluggy-0.4.0 
rootdir: /home/me/python, inifile: /dev/null 
plugins: django-3.1.2, pep8-1.0.6, cov-2.4.0 
collected 0 items 
============================================ no tests ran in 0.02 seconds 

है क्या तुम सच में इसकी जरूरत है, तो आप की तरह कुछ कर सकता है। py.test -c <(grep -v no:django pytest.ini) एक यूनिक्स नामपटल का उपयोग करके और प्लगइन लाइन को हटाने के लिए grep या sed का उपयोग करें। लेकिन यह अभी भी सभी प्लगइन्स डिफ़ॉल्ट रूप से आसान है और कमांडलाइन के माध्यम से अक्षम लगता है।

py.test -c <(grep -v no:django pytest.ini) 
================================================= test session starts 
platform linux -- Python 3.4.3, pytest-3.0.5, py-1.4.32, pluggy-0.4.0 
rootdir: /home/me/python, inifile: /dev/fd/63 
plugins: django-3.1.2, pep8-1.0.6, cov-2.4.0 
collected 0 items 
============================================ no tests ran in 0.03 seconds 

वैकल्पिक रूप से मैं pytest.ini में addopts= -p no:myplugin निर्दिष्ट नहीं होता है और इसके बजाय PYTEST_ADDOPTS वातावरण चर का उपयोग जब मैं उन्हें बंद कर देना चाहता था। लेकिन यह

+0

धन्यवाद, हाँ, 'pytest.ini' फ़ाइल से बचने के लिए यह अच्छा है, लेकिन एक समस्या यह है कि पहले से ही कुछ प्लगइन्स अक्षम हो सकते हैं, और विचार केवल – eLRuLL

+0

में सक्षम करने के लिए है यदि आपको वास्तव में इसकी आवश्यकता है, आप कुछ ऐसा कर सकते हैं। 'py.test -c <(grep -v no: django pytest.ini) 'प्लगइन लाइन को हटाने के लिए एक यूनिक्स नामित पाइप और' grep' या 'sed' का उपयोग करना। – dinosaurwaltz

+0

हाँ, लेकिन समस्या वास्तव में परीक्षण चलाने वाले अन्य लोगों के लिए आसान बनाना है। मैं फ़ाइल से बच सकता हूं और कमांड लाइन पर प्रत्येक व्यक्ति को अलग-अलग अक्षम कर सकता हूं, लेकिन यह किसी प्रोजेक्ट में परीक्षण चलाने का डिफ़ॉल्ट तरीका नहीं हो सकता है। – eLRuLL

2

प्लगइन को फिर से लोड करने के लिए, -p pytest_myplugin का उपयोग करने के लिए थोड़ा सा विपरीत है। -p no:myplugin (या तो कमांड लाइन पर, या pytest.ini के addopts से) के बाद जंजीर होने पर यह काम करेगा।

यहां क्या हो रहा है: जब आप -p no:plugin, pytest prepends "pytest_" to "plugin" निर्दिष्ट करते हैं। ऐसा इसलिए है क्योंकि myplugin वास्तव में pytest_myplugin से आयात किया जाता है। दुर्भाग्यवश, यह सुविधा लोडिंग पक्ष पर प्रतिबिंबित नहीं है, जिसके लिए प्लगइन का पूर्ण मॉड्यूल नाम आवश्यक है।

संबंधित मुद्दे