Я написал Python код, в котором я учусь использовать pytest и ведение журнала для теста, который я делаю. Я хочу отправить список параметров, через которые будет проходить функция pytest test_. Это мой код:
import pytest
import numpy as np
import logging
class TestClass:
@pytest.fixture
def initializeLogger(self):
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(levelname)s:%(name)s:%(message)s')
file_handler = logging.FileHandler(r'C:\Users\user\Data\Cross correlation\RunLog.log')
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)
return logger
# Define parameters
params = []
params.append({'no' : 1})
params.append({'no' : 2})
params.append({'no' : 3})
@pytest.mark.parametrize("params", params)
def test_ZeroI(self, initializeLogger, params):
logger = initializeLogger
read = params['no']
logger.info(f'Value inputted: {read}, Value read: {read}')
print('success')
assert params['no'] == read
Я определил initializeLogger (self) как прибор pytest, который инициализируется перед вызовом моей основной тестовой функции: test_ZeroI (..).
Функция initializeLogger (self) просто инициализирует регистратор, и я присоединяю его к обработчику file_handler, который создает файл для меня. Затем я возвращаю регистратор.
Я создаю список с именем params и добавляю значения словаря с ключом «no» вместе со значениями, которые я хочу перебрать; поэтому в этом сценарии: 1, 2, 3.
тогда функция testZeroI () должна (по моему пониманию) запускаться три раза с параметрами 1, 2 и 3 соответственно по порядку. Я добавил строку: logger.info (f'Value inputted: {read}, Value read: {read} '), которая просто читает значение и выводит его в журнал.
Однако проблема в журнале, вот что я вижу:
INFO: module2: введено значение: 1, прочитано значение: 1 INFO: module2: введено значение: 2, Value прочитано: 2 INFO: module2: введено значение: 2, прочитано значение: 2 INFO: module2: введено значение: 3, прочитано значение: 3 INFO: module2: введено значение: 3, прочитано значение: 3 INFO: module2: введено значение: 3 , Значение читается: 3
Как видите, значение 1 записывается один раз. Значение 2 записывается дважды. Значение 3 записывается три раза. Что я делаю не так в своем коде? Моя цель состоит в том, чтобы мой код выводил журнал следующим образом:
INFO: module2: введенное значение: 1, считанное значение: 1 INFO: module2: введенное значение: 2, считанное значение: 2 INFO: module2: Value введено: 3, значение прочитано: 3