如何在setup_类中捕获stdout/stderr?

2024-06-17 12:03:12 发布

您现在位置:Python中文网/ 问答频道 /正文

pytest测试中,可以使用capfdcapsys装置捕获流。但这在{}中不起作用

还有别的办法吗

我想做的是:

class TestSomething:
    @classmethod
    def setup_class(cls, capsys):
        do_work_and_print_stuff()
        cls.outerr = capsys.readouterr()

1条回答
网友
1楼 · 发布于 2024-06-17 12:03:12

一种解决方法是为sys.stdoutsys.stderr使用包装类:

class Logger:
    def __init__(self, base_stream):
        self.base_stream = base_stream
        self.content = ''

    def write(self, message):
        self.base_stream.write(message)
        self.content += message

    def flush(self):
        self.base_stream.flush()


class TestSomething:
    @classmethod
    def setup_class(cls):
        sys.stdout = Logger(sys.stdout)
        sys.stderr = Logger(sys.stderr)

        do_work_and_print_stuff()  # Do your thing

        cls.out = sys.stdout.content
        cls.err = sys.stderr.content
        sys.stdout = sys.stdout.base_stream
        sys.stderr = sys.stderr.base_stream

但是,使用一些pytest内置的功能,如capsyscapfd装置来实现这一点会很好

相关问题 更多 >