我正在移植从nosetests
+ python unittest
到py.test
的一系列测试。我很惊喜地得知py.test
支持python unittests
并使用py.test
运行现有测试就像在命令上调用py.test
而不是nosetests
一样简单线。但是我在为测试指定working directory时遇到问题。它们不在根项目目录中,而是在子目录中。目前测试运行如下:
$ nosetests -w test-dir/ tests.py
将当前工作目录更改为test-dir
并运行tests.py
中的所有测试。但是当我使用py.test
$ py.test test-dir/tests.py
tests.py
中的所有测试都已运行,但当前工作目录未更改为test-dir
。大多数测试都假设工作目录为test-dir
并尝试打开并读取显然失败的文件。
所以我的问题是如何在使用py.test
时更改所有测试的当前工作目录。
这是很多测试,我不想花时间来解决这些问题,并且无论cwd如何都能让它们发挥作用。
是的,我可以简单地执行cd test-dir; py.test tests.py
但我习惯于从项目根目录开始工作,并且每次想要运行测试时都不想使用cd。
这里有一些代码可以让您更好地了解我想要实现的目标:
tests.py
的内容:
import unittest
class MyProjectTestCase(unittest.TestCase):
def test_something(self):
with open('testing-info.txt', 'r') as f:
test something with f
目录布局:
my-project/
test-dir/
tests.py
testing-info.txt
然后当我尝试运行测试时:
$ 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 :(得分:0)
所以这是我能想到的最好的:
# 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'))
然后在运行测试时
$ py.test -W test-dir test-dir/tests.py
它不干净,但在我修复所有测试之前它会完成。