Заказ выполнения теста - Pytest - PullRequest
0 голосов
/ 17 февраля 2019

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

test_file1.py:

test_class 1
   test_case1
   test_case2
   test_case3...so on

test_file2.py:

test_class 1
   test_case1
   test_casPls help to solve this.e2
   test_case3...so on

Таким образом, у меня есть около 30-40 различных файлов .py сразличные тесты, специфичные для тестирования различных функций.Теперь я хотел бы знать, как заказать выполнение теста.Есть ли способ, которым я могу инициировать выполнение из одного файла, в котором я определил свой порядок выполнения?

1 Ответ

0 голосов
/ 17 февраля 2019

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

Я буду считать,вы используете модуль Python unittest, в противном случае, если у вас его нет, он почти наверняка имеет то, что я собираюсь вам показать (а если нет, то, вероятно, его не стоит использовать, и выследует переключиться на что-то лучшее).

Согласно документам , вы можете добавить метод с именем setUp(), в результате чего:

... тестированиеFramework будет автоматически вызывать каждый тест, который мы запускаем.

import unittest

class YourTestClass(unittest.TestCase):
    def setUp(self):
        # Call code here to be set up
        # Save the things into fields with self.whatever = calculate(...)

    def someTest(self):
        # Make use of self.whatever that your automatically run setUp() 
        # has provided for you, since the unit testing framework has
        # called it before this test is run

Кроме того, есть tearDown(), если вам это нужно, который запускает код после каждого модульного теста.

Это означает, чтокогда вы реализуете setUp (и, необязательно, tearDown), он будет работать так:

test_class1.setUp()
test_class1.test_case1
test_class1.tearDown()

test_class1.setUp()
test_class1.test_case2
test_class1.tearDown()

test_class1.setUp()
test_class1.test_case3
test_class1.tearDown()

...

Также вы можете сделать гораздо больше, для этого я рекомендую ознакомиться с документацией.Однако это должно делать то, что вы хотите, основываясь на комментариях, которые вы мне предоставили.

Теперь, если у вас есть код, которым они делятся (например, некоторые небольшие изменения параметров), вы должны исследовать Отличительные особенностиПротестируйте итерации, используя раздел подтестов по предоставленной ссылке, чтобы узнать, как использовать subTest(), чтобы справиться с этим для вас.Предположительно, для этого требуется Python 3.4+ (который, я надеюсь, вы используете, а не что-то архаичное, как 2.7).

Наконец, если вы хотите просто запустить что-то один раз перед всеми тестами, вы можете использовать setUpClass(), который будетсделать то же самое, что и setUp(), за исключением того, что он запускается один раз.См. Документы для получения более подробной информации.

Вкратце:

  • Используйте setUp(), если вам нужно что-то делать перед каждым тестом

  • Используйте setUpClass(), если вам нужно сделать что-то один раз перед всеми тестами

  • Просмотрите subTest(), если у вас есть много похожих тестов и только те данные, которые вывнести изменения в тесты, но это только для того, чтобы сделать ваш код чище

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...