我想使用python日志记录模块记录unittest的所有输出,以便我可以将它合并到我试图编写的测试框架中。这样做的目的是使用2组输出运行测试,一组具有简单输出,告诉测试用例步骤和更多调试级别输出,以便在出现问题时尽可能多地提供信息。输出将被放入两个文件中,一个可以通过电子邮件发送给人们,另一个可以保存。我注意到TextTestRunner可以使用流,这可以用于日志记录模块吗?我打算在python 2.7中使用一些新功能。
答案 0 :(得分:1)
你可以,但我不确定这是你最好的方法。
对于这种方法,你会:
实例化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 - 它将测试输出以你想要的方式输出到记录器。这样可以避免所有这三个问题。