Python тесты на нос - запускайте динамически созданные тесты одновременно - PullRequest
0 голосов
/ 02 марта 2020

В каталоге input у меня есть коллекция каталогов input_01 , input_02 и так далее, каждый из которых содержит файл конфигурации input_01.txt , input_02.txt , et c. Я хочу проверить один и тот же вызов функции для каждого из этих файлов конфигурации. Я рассмотрел подход к созданию динамических c тестов для ответа SO здесь и поста в блоге здесь . У меня есть следующий минимальный рабочий пример, основанный на последней ссылке.

"""A simple dynamic test set-up.

Based on the approach used at:
https://eli.thegreenplace.net/2014/04/02/dynamically-generating-python-test-cases
"""

import unittest
import os
import time


def do_something(input_file_path):
    time.sleep(5)
    print('Do something with file {}'.format(input_file_path))


class MyTests(unittest.TestCase):
    pass


def create(input_file):
    # noinspection PyUnusedLocal
    def test(self):
        do_something(input_file)
    return test


def create_all():

    for d in os.listdir('input'):
        input_f = os.path.join('input', d, d + '.txt')
        if os.path.isfile(input_f):
            test_func = create(input_f)
            class_name = 'Test_{0}'.format(d)
            globals()[class_name] = type(class_name, (MyTests,), {'test_{0}'.format(d): test_func})


create_all()

if __name__ == '__main__':
    unittest.main()

Это хорошо работает, когда я запускаю тесты в одном процессе. Например, когда я запускаю с использованием тестов носа с nosetests --nocapture --verbosity=2 test_mwe.py, я получаю следующий вывод:

test_input_01 (test_mwe.Test_input_01) ... Do something with file input\input_01\input_01.txt
ok
test_input_02 (test_mwe.Test_input_02) ... Do something with file input\input_02\input_02.txt
ok

----------------------------------------------------------------------
Ran 2 tests in 10.006s

OK

Однако, когда я пытаюсь запустить с использованием нескольких процессов с помощью параметра носовых тестов --processes=2, то есть nosetests --nocapture --processes=2 --verbosity=2 test_mwe.py Я получаю ошибки ниже. Для краткости я оставил фрагмент трассировки стека, но при необходимости могу включить его в редактирование.

Failure: ValueError (no such test method in <class 'test_mwe.Test_input_01'>: test) ... ERROR
Failure: ValueError (no such test method in <class 'test_mwe.Test_input_02'>: test) ... ERROR

<stack trace here>

Ran 2 tests in 2.113s

FAILED (errors=2)

Я не очень разбираюсь в Python и тестах на носу, поэтому я, вероятно, здесь упускаю что-то фундаментальное. Есть ли подход или реорганизация этого подхода, где я могу заставить эти динамически созданные тестовые случаи запускаться параллельно, используя параметр --processes=N тестов носа? Также я могу перейти от использования тестов носа к чему-то другому здесь.

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