2015-01-15 3 views
7

파이썬으로 작성된 더 큰 빌드 프레임 워크의 일부로 실행되는 테스트 슈트가 있습니다. 일부 테스트에는 환경 변수를 사용하여 전달하려는 매개 변수가 필요합니다.nosetests 프레임 워크 : 테스트에 환경 변수를 전달하는 방법은 무엇입니까?

분명히 nosetests 러너는 내가 원하는 것을 수행하는 env 매개 변수를 가지고 있습니다. 그러나 according to the documentation. 그것은 예상대로 작동하지 않습니다. env 매개 변수는 테스트에 전달되지 않기 때문에,

#!/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'}) 

어설 션이 실패

다음은 문제를 예시 최소한의 테스트 스크립트입니다. 아무도 이유를 아나요?

주의 :

#!/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()를 사용하는 학습에 관심이있을 것 : 나는 콘솔 nosetests 도구를 실행하여 문제를 해결했다.

답변

4

env도 자체적으로 동작하지 않지만 하위 프로세스를 여는 것보다 덜 슬프게 생각하는 해결책을 찾았습니다. 당신이 nose.run()를 호출하기 전에 당신은 os.environ 변수를 수정할 수 있으며, 한 테스트가 동일한 프로세스에서 실행하는 것처럼 테스트는 모두 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 다음 tests/test_env.py에서 다음

#!/bin/bash export HELLO='WORLD' nosetests -v unset HELLO 

'시험이 끝난 후에 다른 일을한다면이 방법이 고려 될 수 있습니다. 나는 이것을 대답으로 받아 들일 것이다. – Mihai

0

내가 코 소스 보았다 core.py을 config.py)를 호출하고 env 인수 처리를 추적합니다. 나는 env 주장이 당신이 생각한대로 의미가 없다고 생각합니다. 피고인의 환경을 설정하거나 추가하는 것이 아닙니다. 이는 코 관련 구성 옵션에만 해당됩니다. 그러나 당신 (그리고 나도)이 찾고있는 기능을 갖는 것이 좋을 것입니다.

0

테스트 중에 환경 변수가 필요한 동일한 유형의 상황이 발생했습니다.

환경 변수를 먼저 설정하고 테스트를 실행 한 다음 환경 변수 unset을 사용하기 위해 bash 스크립트를 사용했습니다. 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

당신은 여전히 ​​이전 복원해야 할 것
관련 문제