如何找出当前 运行 测试

How to find out the current running test

我正在使用 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 tests/ 进行测试时,它会执行 test_1 和 test_2 方法并将 test_results/ 目录下的测试特定信息记录到一个特定于每个测试的日志文件。 test_1.log 和 test_2.log.

这对我有用。但是,问题是我必须将日志对象从测试方法传递到我从测试方法调用的每个方法。

在这个例子中,当我调用 util.abc 方法时,我从测试方法中传递了日志对象。因此,util 模块中的方法 abc 知道要记录到哪个日志文件。但是,我不想以这种方式将日志对象传递给我从测试方法调用的所有方法。我相信应该有更好的方法。我在想,如果有办法找出调用方法 abc 的测试方法,那么我就不必以这种方式传入日志对象。任何人都知道如何解决这个问题?或任何其他想法来实现这一目标?谢谢!

嗯,您可以随时创建 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)