import pytest
import time
@ pytest.fixture(scope=" session ", autouse=True)
def manage_logs(request):
""" Set log file name same as test name """
now = time.strftime("% Y -% m -% d % H -% M -% S ")
log_name = './ output / log /' + now + '. logs '
# 生成日志文件
request.config.pluginmanager.get_plugin(" logging - plugin ") \
.set_log_path(log_name)
以上这段代码是一个pytest
的fixture,用于在执行测试用例前生成日志文件,并将日志文件路径传递给logging-plugin
插件的set_log_path()
方法。具体解释如下:
-
@pytest.fixture
是一个装饰器,用于定义一个fixture。fixture是一种用于提供测试用例所需资源的机制,可以在测试用例执行前或执行后进行一些准备或清理操作。 -
scope="session"
设置fixture的作用域为session级别,表示fixture只会在整个测试会话(session)中执行一次。 -
autouse=True
表示所有测试用例都会自动应用这个fixture,不需要在测试用例中显式声明。 -
now = time.strftime("%Y-%m-%d %H-%M-%S")
使用strftime()
方法生成当前时间的字符串,用于作为日志文件名的一部分。注意%Y
表示4位数的年份,%m
表示2位数的月份,%d
表示2位数的日期,%H
表示24小时制的小时数,%M
表示分钟数,%S
表示秒数。 -
log_name = './output/log/' + now + '.logs'
拼接日志文件的完整路径,其中./output/log/
表示日志文件存放的相对路径,.logs
表示日志文件的后缀名。 -
request.config.pluginmanager.get_plugin("logging-plugin")
获取logging-plugin
插件的实例。 -
set_log_path(log_name)
是logging-plugin
插件的一个方法,用于设置日志文件路径。
优化封装:
你可以将这段代码封装成一个函数,以便在其他地方使用。比如:
import pytest
import time
def set_log_path():
"""为测试用例设置日志文件路径"""
now = time.strftime("%Y-%m-%d %H-%M-%S")
log_name = './output/log/' + now + '.logs'
return log_name
@ pytest.fixture(scope="session", autouse=True)
def manage_logs(request):
"""设置日志文件路径,并将其传递给 logging-plugin 插件"""
log_name = set_log_path()
request.config.pluginmanager.get_plugin("logging-plugin").set_log_path(log_name)
这样,在其他地方就可以直接调用set_log_path()
函数来获取日志文件路径了,而不必每次都写一遍生成日志文件和设置日志文件路径的代码。同时,manage_logs()
函数也可以直接使用set_log_path()
函数来获取日志文件路径,以保证代码的复用性。