解决方案:
在Python tests的启动配置文件中加入JB_DISABLE_BUFFERING变量。
在PyCharm的新版本(2017.1.3以后)的版本中,引入了一个JB_DISABLE_BUFFERING变量,用来关闭buffer。
buffer官方的解释是:
buffer
If set to true, sys.stdout and sys.stderr will be buffered in between startTest() and stopTest() being called. Collected output will only be echoed onto the real sys.stdout and sys.stderr if the test fails or errors. Any output is also attached to the failure / error message.
New in version 2.7.
也就是说buffer这个属性如果被设为True,则在测试中(startTest()方法和stopTest()方法中)sys.stdout和sys.stderr将会变为StringIO类型,当测试失败或者出现错误时,sys.stdout和sys.stderr就会恢复到原来的类型,因而缓冲的信息就会输出到标准输出和错误输出中,随后的输出都会被附加到failure/error信息中。
如果测试没有错误,则在stopTest()方法中,sys.stdout和sys.stderr将会恢复到原来的类型。
然而如果用户在单元测试中没有设置JB_DISABLE_BUFFERING变量并且在测试中调用了reload(sys),则sys.stdout和sys.stderr就会重置为原来的状态,导致sys.stdout.getvalue()方法出现上述错误,因为getvalue()是StringIO的方法。