2015-01-15 8 views
7

मेरे पास एक टेस्ट सूट है जो पाइथन में लिखे गए बड़े निर्माण ढांचे के हिस्से के रूप में निष्पादित होता है। कुछ परीक्षणों में पैरामीटर की आवश्यकता होती है, जिन्हें मैं पर्यावरण चर का उपयोग करके पास करना चाहता हूं।नोसेटेट फ्रेमवर्क: मेरे परीक्षणों में पर्यावरण चर कैसे पारित करें?

स्पष्ट रूप से नोसेटेट रनर के पास env पैरामीटर है, जो मैं चाहता हूं, according to the documentation. ऐसा लगता है कि यह ऐसा नहीं लगता है कि यह चाहिए? ,

#!/usr/bin/env python 
# pip install nose 

import os, nose, unittest 

class Test(unittest.TestCase): 
    def test_env(self): 
     self.assertEquals(os.environ.get('HELLO'), 'WORLD') 

if __name__ == '__main__': 
    nose.run(env={'HELLO': 'WORLD'}) 

दावे विफल रहता है क्योंकि env पैरामीटर परीक्षण के लिए पारित नहीं होता है:

यहाँ एक न्यूनतम परीक्षण स्क्रिप्ट है कि समस्या एक मिसाल है। क्या किसी को पता है क्यों?

एनबी: मैं सांत्वना nosetests उपकरण के लॉन्च के साथ समस्या को हल काम किया:

#!/usr/bin/env python 

import sys, os, nose, unittest, subprocess 

class Test(unittest.TestCase): 
    def test_env(self): 
     self.assertEquals(os.environ.get('HELLO'), 'WORLD') 

if __name__ == '__main__': 
    subprocess.Popen(['nosetests', sys.argv[0]], 
        env={'HELLO': 'WORLD'}).wait() 

बहरहाल, यह एक kludge की तरह लगता है, और मैं अभी भी nose.run() ठीक से उपयोग करने के बारे में जानना चाहते हैं।

उत्तर

4

मुझे env प्राप्त करने के लिए खुद को व्यवहार करने के लिए नहीं मिला, लेकिन मैं एक समाधान के साथ आया हूं जिसे मैं एक उपप्रोसेस खोलने से थोड़ा कम क्लेडी मानता हूं। आप os.environ चर संशोधित कर सकते हैं इससे पहले कि आप nose.run() कहते हैं, और जब तक परीक्षण एक ही प्रक्रिया में चल रहे हैं, परीक्षण सभी संशोधित os.environ देखेंगे:

#!/usr/bin/env python 
import os, nose, unittest 

class Test(unittest.TestCase): 
    def test_env(self): 
     self.assertEquals(os.environ.get('HELLO'), 'WORLD') 

if __name__ == '__main__': 
    os.environ["HELLO"] = "WORLD" 
    nose.run() 
+0

आप अभी भी पुराने बहाल करने के लिए होगा 'os.environ:

#!/bin/bash export HELLO='WORLD' nosetests -v unset HELLO 
फिर tests/test_env.py में

'यदि आप परीक्षण के बाद कुछ और कर रहे हैं, लेकिन ऐसा कुछ है जिसे एक विधि में लगाया जा सकता है, मुझे लगता है। मैं इसे एक उत्तर के रूप में स्वीकार करूंगा। – Mihai

0

मैं नाक स्रोतों को देखा (core.py और config.py) और env तर्क के हैंडलिंग का पता लगाया। मुझे लगता है कि env तर्क का मतलब यह नहीं है जैसा आपने सोचा था। यह टेस्टी के पर्यावरण को स्थापित करने या जोड़ने के लिए नहीं है। यह केवल नाक-विशिष्ट विन्यास विकल्पों के लिए है। फिर भी, यह सुविधा अच्छा लगेगा कि आप (और मुझे भी) ढूंढ रहे थे।

0

मैं उसी प्रकार की स्थिति में आया जहां परीक्षण के दौरान एक पर्यावरणीय चर की आवश्यकता होती है।

मैंने पर्यावरणीय चर सेट करने के लिए बैश स्क्रिप्ट का उपयोग करके परीक्षण किया, परीक्षण चलाया, और फिर unset पर्यावरण चर।

run_tests.sh में:

#!/usr/bin/env python 
import os, unittest 

class Test(unittest.TestCase): 
    def test_env(self): 
     self.assertEquals(os.environ.get('HELLO'), 'WORLD') 

परीक्षण चलाने के लिए, कर $ bash run_tests.sh

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