在Python3中,由于StringIO被移动到了io模块中,而HTMLTestRunner.py却依赖于StringIO类,所以在使用HTMLTestRunner时,可能会报ImportError:Nomodulenamed'StringIO'异常。下面详细讲解如何解决这个问题。
步骤一:下载HTMLTestRunner
首先确定你的Python版本,如果是Python3请下载HTMLTestRunner_py3.py文件。
你可以从下面这个网址下载:https://github.com/findyou/HTMLTestRunner_cn/tree/master/Python3
下载HTMLTestRunner_py3.py后,将其放到你的工作目录下。
步骤二:修改HTMLTestRunner
在下载的HTMLTestRunner_py3.py中,首先需要找到这行代码:
from StringIO import StringIO
将其替换为:
from io import StringIO
这样就可以用io模块的StringIO代替Python2中的StringIO了。
同时,还需要修改Render.py文件中的一些代码,具体的修改方法可以参考下面的示例说明。
示例一:HtmlTestRunner报错问题
假设你编写了下面这个测试用例:
import unittest
from HTMLTestRunner_py3 import HTMLTestRunner
class TestDemo(unittest.TestCase):
def test_add(self):
self.assertEqual(1+1, 2)
if name == 'main':
suite = unittest.TestSuite()
suite.addTest(TestDemo('test_add'))
with open('report.html', 'w') as f:
runner = HTMLTestRunner(stream=f, title='Test Report', verbosity=2)
runner.run(suite)
当你运行这个测试用例时,可能会遇到如下错误:
ImportError: Nomodulenamed 'StringIO'
这是由于HTMLTestRunner_py3.py中引用了Python2中的StringIO模块,而在Python3中,StringIO已被移动到了io模块下。为了解决这个问题,你需要按照上述步骤修改HTMLTestRunner_py3.py文件。
示例二:修改Render.py文件
有时,根据以上修改后还有可能出现Render.py文件中的一些问题,比如在生成报告时,如果用例失败时,展示的信息无法正确显示,那么你需要修改Render.py文件。
在Render.py文件的133行和139行分别做如下修改:
将原来的
output += '
\n'
修改为
output += '
\n'
将原来的
output.append('
\n' % (utils.getColor(self.bgcolor), utils.formatSecondAsTime(self.time)))
修改为
output.append('
\n' % (utils.getColor(self.bgcolor), utils.formatSecondAsTime(self.time)))
这样就可以避免展示失败的用例时出现问题了。
综上所述,通过以上步骤,即可解决Python3中使用HTMLTestRunner时出现ImportError:Nomodulenamed 'StringIO'的问题。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解python3中用HTMLTestRunner.py报ImportError: No module named ‘StringIO’如何解决 - Python技术站