详解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中的文件和目录操作实现代码
Mar 13 Python
python实现数通设备tftp备份配置文件示例
Apr 02 Python
Python中使用PyHook监听鼠标和键盘事件实例
Jul 18 Python
python 读取文本文件的行数据,文件.splitlines()的方法
Jul 12 Python
padas 生成excel 增加sheet表的实例
Dec 11 Python
Python 从一个文件中调用另一个文件的类方法
Jan 10 Python
详解Python循环作用域与闭包
Mar 21 Python
django admin 自定义替换change页面模板的方法
Aug 23 Python
Django-xadmin后台导入json数据及后台显示信息图标和主题更改方式
Mar 11 Python
Python smtp邮件发送模块用法教程
Jun 15 Python
如何使用PyCharm引入需要使用的包的方法
Sep 22 Python
python爬取豆瓣电影TOP250数据
May 23 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
教你如何快捷的使用cmd访问mysql小技巧
2014/05/26 PHP
Yii配置文件用法详解
2014/12/04 PHP
全面解读PHP的Yii框架中的日志功能
2016/03/17 PHP
PHP PDOStatement::setFetchMode讲解
2019/02/03 PHP
PHP信号处理机制的操作代码讲解
2019/04/19 PHP
PHP接入微信H5支付的方法示例
2019/10/28 PHP
JQuery在光标位置插入内容的实现代码
2010/06/18 Javascript
鼠标事件延时切换插件
2011/03/12 Javascript
高效率JavaScript编写技巧整理
2013/08/23 Javascript
用模版生成HTML的的框架jquery.tmpl使用详解
2015/01/07 Javascript
jQuery插件支持同一页面被多次调用
2016/02/14 Javascript
js实现带农历和八字等信息的日历特效
2016/05/16 Javascript
AngularJS在IE下取数据总是缓存问题的解决方法
2016/08/05 Javascript
jQuery validata插件实现方法
2017/06/25 jQuery
Vue resource中的GET与POST请求的实例代码
2017/07/21 Javascript
Vue实现仿iPhone悬浮球的示例代码
2020/03/13 Javascript
vue 解决setTimeOut和setInterval函数无效报错的问题
2020/07/30 Javascript
微信小程序实现登录注册功能
2020/12/29 Javascript
Python3实现从指定路径查找文件的方法
2015/05/22 Python
用python实现的线程池实例代码
2018/01/06 Python
python构建深度神经网络(DNN)
2018/03/10 Python
Diango + uwsgi + nginx项目部署的全过程(可外网访问)
2018/04/22 Python
PyQt5 QTable插入图片并动态更新的实例
2019/06/18 Python
详解Python 中sys.stdin.readline()的用法
2019/09/12 Python
python2与python3爬虫中get与post对比解析
2019/09/18 Python
python打印异常信息的两种实现方式
2019/12/24 Python
深入浅析Python 函数注解与匿名函数
2020/02/24 Python
北京-环亚运商测试题.net程序员初步测试题
2013/05/28 面试题
法学专业个人求职信
2013/09/26 职场文书
高中毕业生登记表自我鉴定范文
2014/03/18 职场文书
故宫的导游词
2015/01/31 职场文书
中秋节寄语2015
2015/03/24 职场文书
婚礼迎宾词大全
2015/08/10 职场文书
mongodb的安装和开机自启动详细讲解
2021/08/02 MongoDB
Java 通过手写分布式雪花SnowFlake生成ID方法详解
2022/04/07 Java/Android
python获取带有返回值的多线程
2022/05/02 Python