六、捕获标准输出和标准错误输出

1、标准输出/标准错误输出/标准输入的默认捕获行为

在测试执行期间,任何标准输出和标准错误输出都将会被捕获;如果测试失败或者发生异常,异常信息的堆栈也将一同显示,可以通过--show-capture命令行选项来自定义这些行为;

--show-capture的配置项可以为:

  • no
  • stdout
  • stderr
  • log
  • all,默认是all;

另外,标准输入被设置为一个"null"对象。因为在自动化测试中,很少需要使用到交互输入的场景;

实际上,当想要使用标准输入时,会得到一个错误:OSError: reading from stdin while output is captured;

通常情况下,捕获行为是通过拦截对低级别文件描述符的写入操作来实现的。这就使得可以捕获简单的print()语句以及测试中子程序的输出行为;

2、修改和去使能捕获行为

pytest有两种捕获行为,可以通过--capture命令行选项来指定;

(1)文件描述符级别的捕获行为(默认)
所有向操作系统的文件描述符1(标准输入)和2(标准错误输入)的写入行为都会被捕获,这个也是pytest的默认捕获行为,也可以通过--capture=fd来指定;

文件描述符是与当前进程打开的文件相对应的小整数。例如,标准输入的文件描述符通常是0,标准输出的是1,标准错误的是2,之后被进程打开的文件的描述符依次指定为3、4、5等。

(2)sys级别的捕获行为
只有向Python的sys.stdout和sys.stderr的写入行为会被捕获,不执行对文件描述符的写入的捕获,通过--capture=sys来指定;

(3)去使能捕获行为
通过--capture=no可以去使能pytest的捕获行为;

也可以通过-s命令行选项实现相同的效果,它只是--capture=no的一个快捷方式,本质上是一样的;

3、使用print()函数调试用例

默认的捕获行为带来的一个主要的好处是,就是可以使用print()函数帮助调试用例;

 

 

4、通过capsyscapsysbinarycapfdcapfdbinary fixtures来访问测试执行过程中产生的输出信息

 

posted @ 2020-03-23 20:22  晨尛  阅读(550)  评论(0)    收藏  举报