Я использую 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, тогда мне не нужно проходить в объекте журнала таким образом. Кто-нибудь знает, как это понять? или любые другие идеи для достижения этого? Спасибо!
Я думаю, что это будет работать, если я запускаю тесты последовательно. Но я планирую запустить их параллельно. – sridhar249
@ sridhar249 Я никогда не запускал pytests параллельно, но если он основан на многопроцессорности (скорее всего, не многопоточности), то я думаю, что они не должны делиться «logger.log». –
@ sridhar249 Я проверил документацию https://pypi.python.org/pypi/pytest-xdist и все основано на подпроцессах, поэтому решение должно работать. –