2016-02-12 37 views
0

我正在移植一系列測試,從nosetests + python unittestpy.test。我很驚喜地發現py.test支持python unittests並且運行py.test的現有測試就像在命令行上調用py.test而不是nosetests一樣簡單。但是,我在指定working directory進行測試時遇到問題。他們不在根項目目錄中,而是在一個子目錄中。目前的測試運行是這樣的:使用py.test模擬「nosetests -w working-dir」行爲

$ nosetests -w test-dir/ tests.py 

從而改變當前的工作目錄test-dirtests.py運行所有測試。然而,當我使用py.test

$ py.test test-dir/tests.py 

所有的測試中tests.py正在運行,但當前的工作目錄不會更改爲test-dir。大多數測試假設工作目錄是test-dir並嘗試打開並從中讀取文件,這顯然會失敗。

所以我的問題是如何在使用py.test時更改所有測試的當前工作目錄。

這是很多的測試,我不想投入時間來解決所有問題,並使他們工作,無論順時針。

是的,我可以簡單地做cd test-dir; py.test tests.py,但我習慣從項目根目錄開始工作,並且不想在每次運行測試時都進行CD操作。

下面是一些代碼,可能會給你更好的主意是我想實現:當我

my-project/ 
    test-dir/ 
     tests.py 
     testing-info.txt 

然後:

內容的 tests.py

import unittest 
class MyProjectTestCase(unittest.TestCase): 
    def test_something(self): 
     with open('testing-info.txt', 'r') as f: 
      test something with f 

目錄佈局嘗試運行測試:

$ pwd 
my-project 
$ nosetests -w test-dir tests.py 
# all is fine 
$ py.test ttest-dir/tests.py 
# tests fail because they cannot open testing-info.txt 
+0

您應該需要更改目錄,我通常使用py.test從項目根目錄的'/ tests'中運行測試。你能舉出一個更明確的例子來說明你面臨的具體問題嗎? – jonrsharpe

+0

@jonrsharpe我編輯的問題提供了一個更好的解釋我想做的事情。 –

+0

您是否考慮讓測試相對於自己查找資源,而不是查找測試目錄?這將使您的測試更加明確地超出工作目錄問題。 – jonrsharpe

回答

0

所以這是我能想出的最好的:運行測試

$ py.test -W test-dir test-dir/tests.py 

這是不乾淨的時候

# content of conftest.py 
import pytest 
import os 

def pytest_addoption(parser): 
    parser.addoption("-W", action="store", default=".", 
     help="Change current working dir before running the collected tests.") 

def pytest_sessionstart(session): 
    os.chdir(session.config.getoption('W')) 

然後但直到我解決所有的測試中,它會做的伎倆。