2017-01-04 2 views
0

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

рассмотрите следующий испытательный модуль с методами испытаний.

#content of test_module.py 
def test_1(log): 
    log.info('inside test_1') 
    util.abc(log) 


def test_2(log): 
    log.info('inside test_2') 
    util.abc(log) 

Содержание моего UTIL модуля:

#content of util.py module 
def abc(log): 
    # perform some logic here and calculate result.  
    log.info('the value is: %s' % result) 

А вот мой файл conftest.py.

#conftest.py 
@pytest.fixture() 
def log(request): 
    test_path = request.node.parent.name.strip(".py") 
    test_name = request.node.name 
    node_id = request.node.nodeid 
    logs_dir = pkg_resources.resource_filename("test_results", "logs") 
    log_file_path = '%s/%s' % (logs_dir, test_path) 
    if not os.path.exists(log_file_path): 
     os.makedirs(log_file_path) 
    logger_obj = logger.make_logger(test_name, log_file_path, node_id) 
    yield logger_obj 
    handlers = logger_obj.handlers 
    for handler in handlers: 
     handler.close() 
     logger_obj.removeHandler(handler) 

Испытательный модуль test_module.py находится в каталоге tests /. Поэтому, когда я запускаю тесты, используя тесты py.test /, он выполняет методы test_1 и test_2 и записывает тестовую информацию в каталог test_results/в файл журнала, специфичный для каждого теста. test_1.log и test_2.log.

Это работает для меня. Но проблема в том, что я должен был передать объект журнала из методов тестирования каждому методу, который я вызываю из метода тестирования.

В этом примере, когда я вызываю метод util.abc, я передаю объект журнала из тестового метода. Таким образом, метод abc внутри модуля util знает, к какому файлу журнала нужно войти в систему. Но я не хочу передавать объект журнала таким образом ко всем методам, которые я вызываю из методов тестирования. Я считаю, что должен быть лучший способ. Я думаю, если есть способ узнать, какой метод тестирования называется методом abc, тогда мне не нужно проходить в объекте журнала таким образом. Кто-нибудь знает, как это понять? или любые другие идеи для достижения этого? Спасибо!

ответ

1

Ну, вы всегда можете создать модуль logger. В своих методах тестирования, вы будете назначать log к logger.log

#content of test_module.py 
def test_1(log): 
    logger.log = log 
    log.info('inside test_1') 
    util.abc() 

def test_2(log): 
    logger.log = log 
    log.info('inside test_2') 
    util.abc() 

и в ваших обычных методов просто назвать его

def abc(): 
    # perform some logic here and calculate result.  
    logger.log.info('the value is: %s' % result) 
+0

Я думаю, что это будет работать, если я запускаю тесты последовательно. Но я планирую запустить их параллельно. – sridhar249

+0

@ sridhar249 Я никогда не запускал pytests параллельно, но если он основан на многопроцессорности (скорее всего, не многопоточности), то я думаю, что они не должны делиться «logger.log». –

+0

@ sridhar249 Я проверил документацию https://pypi.python.org/pypi/pytest-xdist и все основано на подпроцессах, поэтому решение должно работать. –

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