详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决


Posted in Python onAugust 27, 2019

python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'的解决方法:

1.原因是官网的是python2语法写的,看官手动把官网的HTMLTestRunner.py改成python3的语法:

参考:http://bbs.chinaunix.net/thread-4154743-1-1.html

下载地址:http://tungwaiyip.info/software/HTMLTestRunner.html

修改后下载地址:HTMLTestRunner_3water.rar (懒人直接下载吧)

2.修改汇总:

第94行,将import StringIO修改成import io

第539行,将self.outputBuffer = StringIO.StringIO()修改成self.outputBuffer = io.StringIO()

第642行,将if not rmap.has_key(cls):修改成if not cls in rmap:

第766行,将uo = o.decode('latin-1')修改成uo = e

第775行,将ue = e.decode('latin-1')修改成ue = e

第631行,将print >> sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime)修改成print(sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime))

在Python3.4下使用HTMLTestRunner,开始时,引入HTMLTestRunner模块报错。

详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决

在HTMLTestRunner的94行中,是使用的StringIO,但是Python3中,已经没有StringIO了。取而代之的是io.StringIO。所以将此行修改成import io

详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决

在HTMLTestRunner的539行中,self.outputBuffer = StringIO.StringIO()修改成self.outputBuffer = io.StringIO()

详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决

修改以后,成功引入模块了

详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决

执行脚本代码:

# -*- coding: utf-8 -*-
#引入webdriver和unittest所需要的包
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import NoAlertPresentException
import unittest, time, re

#引入HTMLTestRunner包
import HTMLTestRunner  

class Baidu(unittest.TestCase):
  #初始化设置
  def setUp(self):
    self.driver = webdriver.Firefox()
    self.driver.implicitly_wait(30)
    self.base_url = "http://www.baidu.com/"
    self.verificationErrors = []
    self.accept_next_alert = True
  
  #百度搜索用例
  def test_baidu(self):
    driver = self.driver
    driver.get(self.base_url)
    driver.find_element_by_id("kw").click()
    driver.find_element_by_id("kw").clear()
    driver.find_element_by_id("kw").send_keys("Selenium Webdriver")
    driver.find_element_by_id("su").click()
    time.sleep(2)
    driver.close()

  def tearDown(self):
    self.driver.quit()
    self.assertEqual([], self.verificationErrors)

if __name__ == "__main__":
  #定义一个测试容器
  test = unittest.TestSuite()

  #将测试用例,加入到测试容器中
  test.addTest(Baidu("test_baidu"))

  #定义个报告存放的路径,支持相对路径
  file_path = "F:\\RobotTest\\result.html"
  file_result= open(file_path, 'wb')

  #定义测试报告
  runner = HTMLTestRunner.HTMLTestRunner(stream = file_result, title = u"百度搜索测试报告", description = u"用例执行情况")

  #运行测试用例
  runner.run(test)
  file_result.close()

运行测试脚本后,发现报错:

File "C:\Python34\lib\HTMLTestRunner.py", line 642, in sortResult

if not rmap.has_key(cls):

所以前往642行修改代码:

详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决

运行后继续报错:

AttributeError: 'str' object has no attribute 'decode'

前往766, 772行继续修改(注意:766行是uo而772行是ue,当时眼瞎,没有注意到这些,以为是一样的,导致报了一些莫名其妙的错误,折腾的半天):

详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决

修改后运行,发现又报错:

File "C:\Python34\lib\HTMLTestRunner.py", line 631, in run

print >> sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime)

TypeError: unsupported operand type(s) for >>: 'builtin_function_or_method' and '_io.TextIOWrapper'

前往631查看,发现整个程序中,唯一一个print:

print >> sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime

这个是2.x的写法,咱们修改成3.x的print,修改如下:

print(sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime))

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现socket端口重定向示例
Feb 10 Python
Python2随机数列生成器简单实例
Sep 04 Python
Flask数据库迁移简单介绍
Oct 24 Python
python爬取网页转换为PDF文件
Jun 07 Python
漂亮的Django Markdown富文本app插件的实现
Jan 02 Python
Python实现查找二叉搜索树第k大的节点功能示例
Jan 24 Python
Python语言进阶知识点总结
May 28 Python
Python qqbot 实现qq机器人的示例代码
Jul 11 Python
Python的numpy库下的几个小函数的用法(小结)
Jul 12 Python
Opencv图像处理:如何判断图片里某个颜色值占的比例
Jun 03 Python
python解释器安装教程的方法步骤
Jul 02 Python
PYTHON基于Pyecharts绘制常见的直角坐标系图表
Apr 28 Python
Python3分析处理声音数据的例子
Aug 27 #Python
python中struct模块之字节型数据的处理方法
Aug 27 #Python
Python的bit_length函数来二进制的位数方法
Aug 27 #Python
使用python将excel数据导入数据库过程详解
Aug 27 #Python
python读取指定字节长度的文本方法
Aug 27 #Python
Django中的cookie和session
Aug 27 #Python
Python3之字节串bytes与字节数组bytearray的使用详解
Aug 27 #Python
You might like
PHPMyAdmin 快速配置方法
2009/05/11 PHP
深入apache配置文件httpd.conf的部分参数说明
2013/06/28 PHP
PHP翻页跳转功能实现方法
2020/11/30 PHP
PHP常见数组函数用法小结
2016/03/21 PHP
基于jquery的一个简单的脚本验证插件
2010/04/05 Javascript
jquery.cookie用法详细解析
2013/12/18 Javascript
javascript实现文本域写入字符时限定字数
2014/02/12 Javascript
对table和ul实现js分页示例分享
2014/02/24 Javascript
jquery序列化表单以及回调函数的使用示例
2014/07/02 Javascript
javascript中with()方法的语法格式及使用
2014/08/04 Javascript
jQuery实现自动切换播放的经典滑动门效果
2015/09/12 Javascript
原生JS取代一些JQuery方法的简单实现
2016/09/20 Javascript
对Angular.js Controller如何进行单元测试
2016/10/25 Javascript
4 种滚动吸顶实现方式的比较
2019/04/09 Javascript
优雅地使用loading(推荐)
2019/04/20 Javascript
基于canvasJS在PHP中制作动态图表
2020/05/30 Javascript
在项目vue中使用echarts的操作步骤
2020/09/07 Javascript
[03:23]我的刀塔你不可能这么可爱 第一期金萌萌的故事
2014/06/20 DOTA
举例讲解Linux系统下Python调用系统Shell的方法
2015/11/07 Python
PYTHON压平嵌套列表的简单实现
2016/06/08 Python
Python中xrange与yield的用法实例分析
2017/12/26 Python
Python3.6简单反射操作示例
2018/06/14 Python
网易2016研发工程师编程题 奖学金(python)
2019/06/19 Python
opencv resize图片为正方形尺寸的实现方法
2019/12/26 Python
Python基于内置库pytesseract实现图片验证码识别功能
2020/02/24 Python
python 已知三条边求三角形的角度案例
2020/04/12 Python
简单了解pytest测试框架setup和tearDown
2020/04/14 Python
python Pexpect模块的使用
2020/12/25 Python
HTML5 Canvas中绘制椭圆的4种方法
2015/04/24 HTML / CSS
材料物理专业大学毕业生求职信
2013/10/15 职场文书
《九色鹿》教学反思
2014/02/27 职场文书
模具专业毕业推荐信
2014/03/08 职场文书
《黄山奇石》教学反思
2014/04/19 职场文书
2015元旦节寄语
2014/12/08 职场文书
个人典型事迹材料
2014/12/30 职场文书
观后感格式
2015/06/19 职场文书