#python #python-3.x #selenium #path #pytest
Вопрос:
У меня есть собственный регистратор. Он создает файл в папке журналов. Это часть кода
curr_time = time.strftime("%Y-%m-%d")
log_file_name = '../Logs/log' curr_time '.log'
У меня есть папка «Тесты», в которой я создаю тестовые случаи и использую ведение журнала в этих тестовых случаях. Все работает нормально для тестов, которые находятся в папке «Тесты»
Проблема возникает, когда я создаю тесты во вложенных папках в разделе Тесты
FileNotFoundError: [Ошибка 2] Такого файла или каталога нет:
Это моя иерархия папок
селен
ПОМ
Конфигурация
Бревна
Страницы
Тесты
Служебные программы
Я предполагаю, что это из-за пути к папке, потому что, когда я изменяю «../Журналы/журнал » на «../../Журналы/журнал», код начинает работать для тестов вложенных папок и выдает сообщение об ошибке для тестов, которые находятся в основной папке тестов
Это пользовательский файл регистратора
import inspect
import logging
import logging.config
import time
def custom_logger(log_level=logging.DEBUG):
logger_name = inspect.stack()[1][3]
logger = logging.getLogger(logger_name)
logger.setLevel(logging.DEBUG)
curr_time = time.strftime("%Y-%m-%d")
log_file_name = '../Logs/log' curr_time '.log'
file_handler = logging.FileHandler(log_file_name.format(logger_name), mode='a')
file_handler.setLevel(log_level)
formatter = logging.Formatter('%(asctime)s - %(filename)s:[%(lineno)s] - %(name)s - %(levelname)s: %(message)s',
datefmt='%m/%d/%Y %I:%M:%S %p')
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)
return logger
Комментарии:
1. если вы хотите, чтобы журналы были привязаны к местоположению кода , почему бы не использовать
__file__
их для построения пути?2. Спасибо @2e0byo, после некоторой борьбы я нашел частичное решение своей проблемы. Пожалуйста, посмотрите мой ответ, если вам интересно.
Ответ №1:
Я смог частично решить проблему с помощью этого решения
curr_time = time.strftime("%Y-%m-%d")
path = Path(__file__).parent.absolute().joinpath('Logs')
log_file_name = str(path) '/log' curr_time '.log'
Проблема с этим заключается в том, что он создает файлы журналов в разделе Утилиты/Журналы (потому что custom_logger.py находится в папке утилиты), в то время как я хотел, чтобы они были созданы в папке корня проекта /журналов
os.chdir не помог, так как в зависимости от того, в какой папке выполняется тест, он неправильно изменит каталог.
Я был бы рад, если бы кто-нибудь мог дать лучшее решение, а пока я буду использовать это решение.
Комментарии:
1. Если я правильно понимаю вашу иерархию, почему бы просто
Path(__file__).parent.parent / f"Logs/log{current_time}.log"
не ?2. Я не знаю, почему и как, но это решило мою проблему, большое вам спасибо!
log_file_name = f"{Path(__file__).parent.parent}/Logs/log{current_time}.log"