2016-05-18 2 views
0

У меня есть три тестовых примера с некоторой зависимостью двух из них от третьего. А именно, тесты test_inner_1 и test_inner_2 не зависят друг от друга, но их выполнение не имеет смысла, если test_outher не работает. Оба они должны запускаться, если тест test_outher проходит, и оба должны быть пропущены, если test_outher не работает.Как организовать шаги из нескольких тестовых функций при использовании pytest?

The pytest ручного https://pytest.org/latest/example/simple.html представляет некоторый простой пример, как реализовать инкрементное тестирование с тестовых шагами. Я пытаюсь применить этот подход к моей ситуации и реализовать что-то подобное:

Содержание conftest.py:

import pytest 

def pytest_runtest_makereport(item, call): 
    if "incremental" in item.keywords: 
     if call.excinfo is not None: 
      parent = item.parent 
      parent._previousfailed = item 


def pytest_runtest_setup(item): 
    if "incremental" in item.keywords: 
     previousfailed = getattr(item.parent, "_previousfailed", None) 
     if previousfailed is not None: 
      pytest.xfail("previous test failed (%s)" % previousfailed.name) 

содержание test_example.py:

import pytest 

@pytest.mark.incremental 
class TestUserHandling: 
    def test_outher(self): 
     assert 0 

    class TestInner: 
     def test_inner_1(self): 
      assert 0 

     def test_inner_2(self): 
      pass 

К сожалению, у меня есть выход

==================== 2 failed, 1 passed in 0.03 seconds ====================

в то время как ожидается, чтобы получить выход

=================== 1 failed, 2 xfailed in 0.03 seconds ====================

Как исправить conftest.py, чтобы получить желаемое поведение?

+0

Возможный дубликат [Если у меня несколько тестов в одном классе и предыдущий тест не удается, как мне его пропустить или выйти из класса вместо тестирования оставшихся тестов?] (Http://stackoverflow.com/questions/ 37422806/if-i-have-multiple-tests-in-one-class-and-a-before-test-fail-how-do-i-have) –

+0

Это еще один вопрос. Мне нужно сгруппировать два теста, чтобы заставить их ОБА запустить/пропустить в зависимости от пропущенного теста. Эти два теста независимы друг от друга. – Andriy

ответ

1

Существует плагин для pytest под названием pytest-dependency, который делает то, что вы хотите сделать в этом случае.

Ваш код может выглядеть следующим образом:

import pytest 
import pytest_dependency 

@pytest.mark.dependency() 
def test_outher(): 
    assert 0 

@pytest.mark.dependency(depends=["test_outher"]) 
def test_inner_1(): 
    assert 0 

@pytest.mark.dependency(depends=["test_outher"]) 
def test_inner_2(): 
    pass 

Выход:

=================================== FAILURES =================================== 
_________________________________ test_outher __________________________________ 

@pytest.mark.dependency() 
def test_outher(): 
>  assert 0 
E  assert 0 

test_example.py:6: AssertionError 
===================== 1 failed, 2 skipped in 0.02 seconds ====================== 

Вы можете использовать классы, конечно, но для этого примера не надо. Если вам нужен пример с классами, дайте мне знать.

Смежные вопросы