py.test:programmaticalyl忽略unittest测试

时间:2015-10-25 13:58:47

标签: python django pytest

我正在努力推动我们的团队从unittest迁移到py.test,希望更少的样板和更快的运行将减少为什么他们不会编写尽可能多的单元测试的指责。

我们遇到的一个问题是,几乎所有旧版django.unittest.TestCase都因错误而失败。而且,他们中的大多数都非常慢。

我们已经决定新测试系统将忽略旧测试,并且仅用于新测试。我试图通过在conftest.py中创建以下内容来让py.test忽略旧测试:

def pytest_collection_modifyitems(session, config, items):
  print ("Filtering unittest.TestCase tests")
  selected = []
  for test in items:
    parent = test.getparent(pytest.Class)
    if not parent or not issubclass(parent.obj, unittest.TestCase) or hasattr(parent.obj, 'use_pytest'):
        selected.append(test)

  print("Filtered {} tests out of {}".format(len(items) - len(selected), len(items)))
  items[:] = selected

问题是,它过滤了所有测试,也是这个测试:

import pytest


class SanityCheckTest(object):

  def test_something(self):
    assert 1

对新测试使用一些不同的命名模式将是一个相当差的解决方案。

1 个答案:

答案 0 :(得分:0)

我的测试类不符合命名约定。我将其更改为:

import pytest


class TestSanity(object):

  def test_something(self):
    assert 1

还修复了我的pytest_collection_modifyitems中的错误并且有效。