2015-01-15 14 views
7

Tôi có một bộ thử nghiệm được thực thi như một phần của một khung công tác xây dựng lớn hơn, được viết bằng Python. Một số bài kiểm tra yêu cầu tham số, mà tôi muốn vượt qua bằng cách sử dụng các biến môi trường.khuôn khổ nosetests: làm thế nào để vượt qua các biến môi trường để kiểm tra của tôi?

Dường như vận động viên nosetests có thông số env, thực hiện những gì tôi muốn, according to the documentation. Có vẻ như, tuy nhiên, nó không hoạt động như ý nghĩ?

Dưới đây là một kịch bản thử nghiệm tối thiểu mà tiêu biểu cho vấn đề:

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

Các khẳng định thất bại, bởi vì các tham số env không có được thông qua để thử nghiệm. Có ai biết tại sao không?

NB: Tôi làm việc xung quanh vấn đề bằng cách tung ra các công cụ giao diện điều khiển 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() 

Tuy nhiên, điều này cảm thấy như một kludge, và tôi vẫn muốn được quan tâm trong việc học để sử dụng đúng cách nose.run().

Trả lời

4

Tôi không thể nhận được env để hành xử chính nó, nhưng tôi đã đưa ra một giải pháp mà tôi xem xét slludly ít kludgy hơn mở một tiến trình con. Bạn có thể thay đổi biến os.environ trước khi bạn gọi nose.run(), và chừng nào các cuộc thử nghiệm đang chạy trong quá trình đó, các bài kiểm tra tất cả sẽ thấy biến đổi 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

Bạn sẽ vẫn phải khôi phục lại tình cũ 'os.environ 'nếu bạn đang làm điều gì đó khác sau khi thử nghiệm chạy, nhưng đây là cái gì đó có thể được tính vào một phương pháp, tôi đoán vậy. Tôi sẽ chấp nhận điều này như một câu trả lời. – Mihai

0

tôi nhìn vào nguồn mũi (core.py và config.py) và truy tìm việc xử lý đối số env. Tôi nghĩ rằng đối số env không có nghĩa là bạn nghĩ. Nó không phải là để thiết lập hoặc thêm vào môi trường của người được kiểm tra. Nó chỉ dành cho các tùy chọn cấu hình dành riêng cho mũi. Tuy nhiên, thật tuyệt khi có tính năng mà bạn (và tôi cũng vậy) đang tìm kiếm.

0

Tôi bắt gặp cùng loại tình huống khi cần có biến môi trường trong quá trình thử nghiệm.

Tôi đã làm việc xung quanh bằng cách sử dụng tập lệnh bash để đặt biến môi trường đầu tiên, chạy thử nghiệm và sau đó là biến môi trường unset.

Trong run_tests.sh:

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

Sau đó, trong tests/test_env.py:

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

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

Để chạy các kiểm tra, làm $ bash run_tests.sh

Các vấn đề liên quan