我想使用Python日志模块记录所有来自unittest的输出,以便将其纳入我正在尝试编写的测试框架中。这样做的目的是使用两组输出运行测试,一组为简单输出,告诉测试用例步骤,另一组为更详细的调试级别输出,以便在出现问题时我们拥有尽可能多的信息。输出将放置在两个文件中,一个可以通过电子邮件发送给其他人,另一个则保留以防失败。我注意到TextTestRunner可以使用流,这是否可以与日志模块一起使用?我计划使用Python 2.7中的一些新功能。
你可以这样做,但我不确定这是最好的方法。
对于这个方法,你需要:
实例化一个内存流,可以被TextTestRunner
使用。这种情况下,io.StringIO
几乎是完美的选择,但它只能处理Unicode输入,而且我不确定TextTestRunner是否能正确地将Unicode写入流中。另一种选择是编写自己的内存流,以满足你的需求,可能需要用编码器包装StringIO
。
创建自己的TextTestRunner,并用这个内存流进行初始化。
创建一个从流中读取并写入日志的类。
这可以很简单,例如:
class StreamLogger(object):
def __init__(self, input_stream, output_logger):
self.input_stream = input_stream
self.output_logger
def run(self):
while True:
line = input_stream.readline()
if not line:
break
output_logger.error(line)
这种方法存在的问题:
stream_logger.run()
。因此,您将无法实时获得日志输出,并且您的日志时间戳将无用。您可以通过生成一个单独的线程来解决这个问题,例如,但然后您需要选择/滚动一个可以同时处理读取器和编写器线程的流,或者分叉一个进程并放弃内存中的流,或者进行相对复杂的操作。我建议的方法是放弃流,简单地滚动自己的测试运行程序-称为LoggingTestRunner-以按照您想要的方式将测试输出写入记录器。这将使您避免这三个问题。