क्या यह निर्दिष्ट करने का कोई तरीका है कि किसी फ़ाइल से चलने के लिए कौन से पाइस्टेस्ट परीक्षण हैं?


190

क्या pytestफ़ाइल से चलाने के लिए परीक्षणों का चयन करने का कोई तरीका है ? उदाहरण के लिए, foo.txtनिष्पादित की जाने वाली परीक्षणों की सूची वाली फ़ाइल :

tests_directory/foo.py::test_001
tests_directory/bar.py::test_some_other_test

या, कई परीक्षणों का चयन करने का एक तरीका है, परीक्षण नाम में कोई सामान्य पैटर्न नहीं है, अलग निर्देशिकाओं से?

pytest -k <pattern> एकल पैटर्न की अनुमति देता है।

एक विकल्प pytest.markप्रत्येक परीक्षण के खिलाफ होना है, लेकिन मेरी आवश्यकता विभिन्न फ़ाइलों से परीक्षणों के विभिन्न संयोजन को चलाने की है।

क्या प्रत्येक पैटर्न के लिए कई पैटर्न और एक परीक्षण फ़ाइल नाम निर्दिष्ट करने का कोई तरीका है?

या

क्या फ़ाइल में सटीक परीक्षण पथ निर्दिष्ट करने और इनपुट के रूप में उस फ़ाइल को फीड करने का कोई तरीका है pytest?

या

क्या कोई हुक फ़ंक्शन है जिसका उपयोग इस उद्देश्य के लिए किया जा सकता है?

जवाबों:


231

आप विभिन्न पैटर्न के साथ परीक्षण मामलों को चलाने के लिए -kविकल्प का उपयोग कर सकते हैं :

py.test tests_directory/foo.py tests_directory/bar.py -k 'test_001 or test_some_other_test'

यह परीक्षण मामलों को नाम test_001 और test_some_other_test के साथ परीक्षण के बाकी मामलों को हटा देगा

नोट: यह test_001 या test_some_other_test से शुरू होने वाले किसी भी टेस्ट केस का चयन करेगा । उदाहरण के लिए, यदि आपके पास परीक्षण केस test_0012 है तो इसे भी चुना जाएगा।


1
धन्यवाद। लेकिन अगर foo.py और bar.py (test_001 कहते हैं) में एक ही नाम के साथ एक परीक्षण है, तो यह दोनों से निष्पादन को समाप्त कर देगा।
शरद

2
हाँ यह होगा, पैटर्न से मेल खाने वाली किसी भी चीज़ को जैसा कि मैंने नोट में उल्लेख किया है
सुपरमज़े

लेकिन यह मेरे लिए एक समस्या है। मैं यह चुनना चाहूंगा कि कौन सी फ़ाइल से कौन से परीक्षण निष्पादित करने हैं।
शरद

@NamGVU `-k <परीक्षण विधि का नाम>`
सुपरमेज़

4
यह होना चाहिएpy.test path/to/test/file.py -k function_name_test
LittleZero

91

परीक्षण निर्दिष्ट करना / परीक्षण का चयन करना

Pytest कमांड-लाइन से परीक्षण चलाने और चयन करने के कई तरीकों का समर्थन करता है।

एक मॉड्यूल में परीक्षण चलाएं

pytest test_mod.py

एक निर्देशिका में परीक्षण चलाएँ

pytest testing/

कीवर्ड अभिव्यक्तियों द्वारा परीक्षण चलाएं

pytest -k "MyClass and not method"

यह परीक्षण चलाएगा जिसमें ऐसे नाम होंगे जो दिए गए स्ट्रिंग अभिव्यक्ति से मेल खाते हैं, जिसमें पायथन ऑपरेटर शामिल हो सकते हैं जो फ़ाइल नाम, वर्ग नाम और फ़ंक्शन नाम को चर के रूप में उपयोग करते हैं। ऊपर का उदाहरण चलेगा TestMyClass.test_somethingलेकिन नहीं TestMyClass.test_method_simple

नोड आईडी द्वारा परीक्षण चलाएं

प्रत्येक एकत्र किए गए परीक्षण को एक अनोखा असाइन किया गया है nodeidजिसमें ::वर्णों द्वारा अलग किए गए पैरामीरीज़ेशन से निर्दिष्ट नाम, फ़ंक्शन नाम और मापदंडों जैसे विनिर्देशक के बाद मॉड्यूल फ़ाइल नाम शामिल है ।

किसी मॉड्यूल के भीतर एक विशिष्ट परीक्षण चलाने के लिए:

pytest test_mod.py::test_func

कमांड लाइन में एक परीक्षण विधि निर्दिष्ट करने वाला एक और उदाहरण:

pytest test_mod.py::TestClass::test_method

मार्कर अभिव्यक्तियों द्वारा परीक्षण चलाएं

pytest -m slow

सभी परीक्षण चलाएंगे जो @pytest.mark.slowडेकोरेटर से सजाए गए हैं ।

अधिक जानकारी के लिए अंक देखें ।

पैकेज से परीक्षण चलाएं

pytest --pyargs pkg.testing

यह आयात pkg.testingऔर परीक्षण से खोजने और चलाने के लिए अपने फाइल सिस्टम स्थान का उपयोग करेगा ।

स्रोत: https://docs.pytest.org/en/latest/usage.html#specifying-tests-selecting-tests


test_mod.py::TestClass::test_method ने मेरे लिए सबसे अच्छा काम किया
StephenGodderidge

1
इसे स्वीकार किए गए क्रोध के रूप में चिह्नित करना चाहिए
एडम ह्यूजेस

13

यदि आपके पास दो अलग-अलग वर्गों में समान विधि नाम है और आप उनमें से किसी एक को चलाना चाहते हैं, तो यह काम करता है:

pytest tests.py -k 'TestClassName and test_method_name'

6

विधि 1 : बेतरतीब ढंग से चयनित परीक्षण। लंबा और बदसूरत।

python -m pytest test/stress/test_performance.py::TestPerformance::test_continuous_trigger test/integration/test_config.py::TestConfig::test_valid_config

विधि 2: कीवर्ड एक्सप्रेशंस का उपयोग करें।

नोट: मैं टेस्टकेस नामों से खोज रहा हूं। वही TestClass नामों पर लागू होता है।

केस 1: नीचे पाया जाएगा जो भी मिल जाएगा। चूंकि हमने OR OR ’का इस्तेमाल किया है।

python -m pytest -k 'test_password_valid or test_no_configuration'

कहते हैं कि ऊपर दिए गए दो वास्तव में सही हैं, 2 परीक्षण चलाए जाएंगे।

केस 2: अब एक गलत नाम और दूसरा सही नाम।

python -m pytest -k 'test_password_validzzzzzz or test_no_configuration' 

केवल एक ही पाया और चलाया जाता है।

केस 3 : यदि आप चाहते हैं कि सभी परीक्षण चलें या कोई नहीं, तो AND का उपयोग करें

python -m pytest -k 'test_password_valid and test_no_configuration'

अगर सही या कोई नहीं तो दोनों को चलाया जाएगा।

केस 4: केवल एक फ़ोल्डर में परीक्षण चलाएं:

python -m pytest test/project1/integration -k 'test_password_valid or test_no_configuration'

केस 5: केवल एक फाइल से टेस्ट चलाएं।

python -m pytest test/integration/test_authentication.py -k 'test_password_expiry or test_incorrect_password'

केस 6: मैच को छोड़कर सभी टेस्ट चलाएं।

python -m pytest test/integration/test_authentication.py -k 'not  test_incorrect_password'

1

नोड आईडी द्वारा रन परीक्षणों के बारे में डॉक्टर के अनुसार

चूंकि आपके पास foo.txt में सभी नोड आईडी हैं, बस चलाएं

pytest `cat foo.txt | tr '\n' ' '`

यह नीचे दिए गए आदेश के साथ ही है (प्रश्न में फ़ाइल सामग्री के साथ)

pytest tests_directory/foo.py::test_001 tests_directory/bar.py::test_some_other_test

1

मेरा उत्तर विभिन्न परिदृश्यों में परीक्षण का सबसेट चलाने का एक तरीका प्रदान करता है।

किसी प्रोजेक्ट में सभी परीक्षण चलाएँ

pytest

एकल निर्देशिका में परीक्षण चलाएँ

एक निर्देशिका से सभी परीक्षण चलाने के लिए, एक पैरामीटर के रूप में निर्देशिका का उपयोग करें pytest:

pytest tests/my-directory

एकल परीक्षण फ़ाइल / मॉड्यूल में परीक्षण चलाएं

परीक्षण से भरी फ़ाइल चलाने के लिए, पैरामीटर के रूप में संबंधित पथ के साथ फ़ाइल को सूचीबद्ध करें pytest:

pytest tests/my-directory/test_demo.py

एक ही टेस्ट फंक्शन चलाएं

एकल परीक्षण फ़ंक्शन चलाने के लिए, ::परीक्षण फ़ंक्शन नाम जोड़ें और:

pytest -v tests/my-directory/test_demo.py::test_specific_function

-v का उपयोग किया जाता है ताकि आप देख सकें कि कौन सा फ़ंक्शन चलाया गया था।

सिंगल टेस्ट क्लास चलाएं

केवल एक क्लास चलाने के लिए, जैसे हमने फ़ंक्शंस के साथ किया और ::फिर फ़ाइल पैरामीटर के लिए क्लास का नाम:

pytest -v tests/my-directory/test_demo.py::TestClassName

टेस्ट क्लास का सिंगल टेस्ट मेथड चलाएं

यदि आप सभी टेस्ट क्लास नहीं चलाना चाहते हैं, तो बस एक तरीका, बस एक ::और तरीका जोड़ें :

pytest -v tests/my-directory/test_demo.py::TestClassName::test_specific_method

टेस्ट नाम के आधार पर टेस्ट का एक सेट चलाएँ

-kविकल्प आपको परीक्षण परीक्षण नाम की सबस्ट्रिंग के रूप में अभिव्यक्ति द्वारा निर्दिष्ट कुछ नाम है कि चलाने के लिए एक अभिव्यक्ति में पारित करने के लिए सक्षम बनाता है। यह उपयोग करना संभव है और , या , और नहीं जटिल भाव पैदा करने के लिए।

उदाहरण के लिए, उन सभी कार्यों को चलाने के लिए जिनके नाम में _raises है:

pytest -v -k _raises

0

हो सकता है कि pytest_collect_file()हुक का उपयोग करके आप एक .txt.yamlफाइल की सामग्री को पार्स कर सकते हैं जहाँ परीक्षण आप चाहते हैं के रूप में निर्दिष्ट किए गए हैं, और उन्हें पाइस्ट कोर में वापस कर दें।

एक अच्छा उदाहरण पाइस्ट डॉक्यूमेंटेशन में दिखाया गया है । मुझे लगता है कि तुम क्या देख रहे हो।


0

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

और यह मेरे द्वारा लीगेसी कम्पैटिबिलिटी मोड बनाम का उपयोग करके भी सीमित है unittest स्क्रिप्ट , इसलिए यह गारंटी नहीं है कि यह मूल पाइस्टेस्ट के साथ काम करेगा।

यहाँ जाता हैं:

  1. नया तानाशाही पैदा करो, कहो subset_tests_directory
  2. ln -s tests_directory/foo.py
  3. ln -s tests_directory/bar.py

  4. आयातों के बारे में सावधान रहें जो स्पष्ट रूप से मान लेते हैं कि फाइलें अंदर हैं test_directory। मुझे उनमे से कई को ठीक करके python foo.py, भीतर से subset_tests_directoryऔर आवश्यकतानुसार सही करना था।

  5. एक बार परीक्षण स्क्रिप्ट सही ढंग से निष्पादित, बस cd subset_tests_directoryऔर pytestवहाँ। Pytest केवल उन लिपियों को उठाएगा जिन्हें वह देखता है।

एक अन्य संभावना आपके वर्तमान परीक्षण निर्देशिका के भीतर सम्‍मिलित है, जैसा कि ln -s foo.py subset_foo.pyतब कहा जाता है pytest subset*.py। यह आपके आयात को समायोजित करने की आवश्यकता से बचना होगा, लेकिन जब तक आप सिमिलिंक को हटा नहीं देते, तब तक यह चीजों को अव्यवस्थित कर देगा। मेरे लिए भी काम किया।

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