模拟"鼻子测试-w working-dir"使用py.test

时间:2016-02-12 19:04:42

标签: python testing pytest nose

我正在移植从nosetests + python unittestpy.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

1 个答案:

答案 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

它不干净,但在我修复所有测试之前它会完成。