详解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 相关文章推荐
动态创建类实例代码
Oct 07 Python
python uuid模块使用实例
Apr 08 Python
python调用java模块SmartXLS和jpype修改excel文件的方法
Apr 28 Python
Android分包MultiDex策略详解
Oct 30 Python
Python实现的HMacMD5加密算法示例
Apr 03 Python
Windows 64位下python3安装nltk模块
Sep 19 Python
python中将zip压缩包转为gz.tar的方法
Oct 18 Python
Python3 max()函数基础用法
Feb 19 Python
python编写计算器功能
Oct 25 Python
Python 生成VOC格式的标签实例
Mar 10 Python
Keras 实现加载预训练模型并冻结网络的层
Jun 15 Python
matplotlib如何设置坐标轴刻度的个数及标签的方法总结
Jun 11 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
php写的AES加密解密类分享
2014/06/20 PHP
使用ob系列函数实现PHP网站页面静态化
2014/08/13 PHP
thinkphp3.2.2实现生成多张缩略图的方法
2014/12/19 PHP
php获取一定范围内取N个不重复的随机数
2016/05/28 PHP
PHP中的输出echo、print、printf、sprintf、print_r和var_dump的示例代码
2020/12/01 PHP
用JavaScript获取网页中的js、css、Flash等文件
2006/12/20 Javascript
textarea中的手动换行处理的jquery代码
2011/02/26 Javascript
JQuery 自定义CircleAnimation,Animate方法学习笔记
2011/07/10 Javascript
基于jquery的滚动条滚动固定div(附演示下载)
2012/10/29 Javascript
JS实现仿百度输入框自动匹配功能的示例代码
2014/02/19 Javascript
jquery选择器大全 全面详解jquery选择器
2014/03/06 Javascript
jQuery基于图层模仿五星星评价功能的方法
2015/05/07 Javascript
JS中使用DOM来控制HTML元素
2016/07/31 Javascript
javascript实现的图片预览功能
2017/03/25 Javascript
微信小程序 自定义Toast实例代码
2017/06/12 Javascript
vue+springmvc导出excel数据的实现代码
2018/06/27 Javascript
Vue.js 中的 v-show 指令及用法详解
2018/11/19 Javascript
用VsCode编辑TypeScript的实现方法
2020/05/07 Javascript
在vue中对数组值变化的监听与重新响应渲染操作
2020/07/17 Javascript
解决Antd Table组件表头不对齐的问题
2020/10/27 Javascript
python持久性管理pickle模块详细介绍
2015/02/18 Python
Python如何为图片添加水印
2016/11/25 Python
python 从文件夹抽取图片另存的方法
2018/12/04 Python
Python通过paramiko远程下载Linux服务器上的文件实例
2018/12/27 Python
python实现集中式的病毒扫描功能详解
2019/07/09 Python
python读取并写入mat文件的方法
2019/07/12 Python
解决torch.autograd.backward中的参数问题
2020/01/07 Python
python 贪心算法的实现
2020/09/18 Python
民族团结先进个人材料
2014/02/05 职场文书
奥巴马就职演讲稿
2014/05/15 职场文书
新农村建设典型材料
2014/05/31 职场文书
安全保卫工作竞聘材料
2014/08/25 职场文书
未中标通知书
2015/04/17 职场文书
煤矿百日安全活动总结
2015/05/07 职场文书
Springboot如何同时装配两个相同类型数据库
2021/11/17 Java/Android
Spring Bean是如何初始化的详解
2022/03/22 Java/Android