如何找出当前正在运行的测试

时间:2017-01-04 15:23:27

标签: python pytest

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

1 个答案:

答案 0 :(得分:1)

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