2015-12-30 3 views
1

Привет Я использую pytest и имею следующие файлы с двумя файлами в папке.Pytest заказы из разных файлов тестовых файлов

test_abc.py, как показано ниже:

class MyTest(unittest.TestCase): 
    @classmethod 
    def setup_class(cls): 
     cls.a = 10 

    @classmethod 
    def teardown_class(cls): 
     cls.a = 20 

    @pytest.mark.run(order=2) 
    def test_method1(self): 
     logging.warning('order2 in test_abc') 
     assert (10,self.a) # fail for demo purposes 

    @pytest.mark.run(order=1) 
    def test_method2(self): 
     logging.warning('order1 in test_abc') 
     assert 0, self.db # fail for demo purposes 

test_sample2.py, как показано ниже,

class MyTest1(unittest.TestCase): 
    @classmethod 
    def setup_class(cls): 
     cls.a = 10 

    @classmethod 
    def teardown_class(cls): 
     cls.a = 20 

    @pytest.mark.run(order=2) 
    def test_mtd1(self): 
     logging.warning('order2 in test_samp') 
     assert (10,self.a) # fail for demo purposes 

    @pytest.mark.run(order=1) 
    def test_mtd2(self): 
     logging.warning('order1 in test_samp') 
     assert 0, self.db # fail for demo purposes 

Теперь я бегу с помощью команды:

py.test --tb=long --junit-xml=results.xml --html=results.html -vv 

Что здесь происходит test_method2 от обоих файлы сценариев запускаются сначала (поскольку он был указан как order1), а затем test_method1 запускается из обоих файлов (si сть было дать как заказ 2)

Так что я заметил здесь Упорядочение общее для тестового прогона, а не для отдельного класса/файлы

Есть ли способ, чтобы устранить эту проблему? Прямо сейчас я использую порядковый номер для всех, как первый файл i give (1,2), а затем в следующем файле я даю (3,4), и он отлично работает.

Но я не заказываю во всех тестовых классах только в нескольких местах, в которых я нуждаюсь. Есть ли крючок, чтобы сказать pytest, чтобы видеть порядок только в определенном файле?

ответ

2

Я предполагаю, что вы используете pytest-плагин для заказа - если только отдельные области в ваших тестах требуют заказа, вы можете использовать относительный порядок:

@pytest.mark.run(after='test_second') 
def test_third(): 
    assert True 

def test_second(): 
    assert True 

@pytest.mark.run(before='test_second') 
def test_first(): 
    assert True 

Ссылка: (http://pytest-ordering.readthedocs.org/en/develop/#relative-to-other-tests)

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