【发布时间】:2018-08-07 08:25:36
【问题描述】:
我有一个 python 脚本,我在其中编写了一些单元测试,并且我正在使用 selenium。
我想提取控制台的整个输出(不仅是我的打印结果,还有与单元测试相关的结果),以便稍后在我的测试管理工具中导入它们。
这是我的代码:
import unittest
from selenium import webdriver
import json
import requests
import sys
class TestUbuntuHomepage(unittest.TestCase):
global strs
strs = []
def setUp(self):
sys.stdout = open("C:\\Users\\Marialena\\Downloads\\out2.log", 'wt')
self.driver = webdriver.Firefox(executable_path="C:\\Users\\Marialena\\Downloads\\selenium-drivers\\geckodriver")
def testTitle(self):
self.driver.get('http://www.ubuntu.com/')
if self.assertIn('Ubuntu', self.driver.title):
strs.append('test'})
def tearDown(self):
self.driver.quit()
if __name__ == '__main__':
unittest.main(verbosity=2)
使用sys.stdout = open("C:\\Users\\Marialena\\Downloads\\out2.log", 'wt'),我将打印的所有内容都放入了文件中,并且我也得到了这个异常:
Traceback(最近一次调用最后一次):文件“C:\Program Files\JetBrains\PyCharm\PyCharm 社区版 2017.3.3\helpers\pycharm_jb_unittest_runner.py”,第 35 行,在 main(argv=args, module=None, testRunner=unittestpy.TeamcityTestRunner, buffer=not JB_DISABLE_BUFFERING) 文件 "C:\Users\Marialena\AppData\Local\Programs\Python\Python36-32\Lib\unittest\main.py", 第 95 行,在 init 中 self.runTests() 文件 "C:\Users\Marialena\AppData\Local\Programs\Python\Python36-32\Lib\unittest\main.py", 第 256 行,在 runTests self.result = testRunner.run(self.test) File "C:\Program Files\JetBrains\PyCharm\PyCharm 社区版 2017.3.3\helpers\pycharm\teamcity\unittestpy.py",第 304 行,运行中 return super(TeamcityTestRunner, self).run(test) File "C:\Users\Marialena\AppData\Local\Programs\Python\Python36-32\Lib\unittest\runner.py", 第 176 行,运行中 测试(结果)文件“C:\Users\Marialena\AppData\Local\Programs\Python\Python36-32\Lib\unittest\suite.py”, 第 84 行,在 调用 返回 self.run(*args, **kwds) 文件 "C:\Users\Marialena\AppData\Local\Programs\Python\Python36-32\Lib\unittest\suite.py", 第 122 行,运行中 测试(结果)文件“C:\Users\Marialena\AppData\Local\Programs\Python\Python36-32\Lib\unittest\suite.py”, 第 84 行,在 调用 返回 self.run(*args, **kwds) 文件 "C:\Users\Marialena\AppData\Local\Programs\Python\Python36-32\Lib\unittest\suite.py", 第 122 行,运行中 测试(结果)文件“C:\Users\Marialena\AppData\Local\Programs\Python\Python36-32\Lib\unittest\suite.py”, 第 84 行,在 调用 返回 self.run(*args, **kwds) 文件 "C:\Users\Marialena\AppData\Local\Programs\Python\Python36-32\Lib\unittest\suite.py", 第 122 行,运行中 测试(结果)文件“C:\Users\Marialena\AppData\Local\Programs\Python\Python36-32\Lib\unittest\case.py”, 第 653 行,在 调用 return self.run(*args, **kwds) 文件 "C:\Users\Marialena\AppData\Local\Programs\Python\Python36-32\Lib\unittest\case.py", 第 624 行,运行中 result.stopTest(self) 文件“C:\Program Files\JetBrains\PyCharm\PyCharm 社区版 2017.3.3\helpers\pycharm\teamcity\unittestpy.py",第 260 行,在 stopTest output = sys.stdout.getvalue() AttributeError: '_io.TextIOWrapper' 对象没有属性 'getvalue'
这方面有什么帮助吗?谢谢。
【问题讨论】:
-
这可能是 PyCharm 本身的错误:link here.
-
我会尝试在
tearDown中恢复原来的sys.stdout... -
@ely 我会看看这是否是 pycharm 问题。谢谢
-
@zvone 我在 tearDown 中也遇到了同样的错误,但谢谢
-
@Marialena 如果即使在 setUp 中执行
self.original_stdout = sys.stdout并在 tearDown 中执行sys.stdout = self.original_stdout之后仍遇到“相同的错误”,您可能应该将整个 stdout 处理移动到每个测试中。似乎 PyCharm 已经用它期望在每次测试运行后出现的东西替换了标准输出。
标签: python python-3.x file unit-testing output