大家好,我是杨叔。每天进步一点点,关注微信公众号【程序员杨叔】,了解更多测试开发技术知识!

Unittest框架作为Python自动化测试的入门框架,很多小伙伴参照网上的一些教程使用Unittest+HTMLTestRunner框架作为自动化测试框架开始学习时,发现自己无法安装HTMLTestRunner。

安装时报错如下:
在这里插入图片描述

HTMLTestRunner是针对Python2.x的unittest单元测试框架用于生成HTML测试报告的扩展。但是,它并不支持Python3.x。即使参照网上的一些教程,修改HTMLTestRunner源码后能匹配Python3,最原始的htmlrunner生成的HTML报告也不是很好看:
在这里插入图片描述

三、解决方案

针对这种情况,网上已经有大佬帮我们优化了官方的HTMLTestRunner的测试报告模板并且直接兼容python3了,不需要重复造轮子了。并且也集成了邮件发送功能,感谢前辈无私奉献!
下载地址:
https://github.com/SeldomQA/HTMLTestRunner

下载解压后,进入目录下使用以下命令:

python setup.py install

效果图如下:
在这里插入图片描述
明显比原生的报告要好看很多。优化后的库有定制的一些LOGO、链接在上面,并且是英文,不太方便。因此为了方便大家使用,杨叔又汉化优化了一版,最终效果如下:
在这里插入图片描述

邮件发送报告功能代码示例如下:

import unittest
from TestRunner import HTMLTestRunner
from TestRunner import SMTP
class TestDemo(unittest.TestCase):
    def test_success(self):
        """执行成功"""
        self.assertEqual(1+1, 2)
if __name__ == '__main__':
    suit = unittest.TestSuite()
    suit.addTest(TestDemo("test_success"))
    report = "./result.html"
    with(open(report, 'wb')) as fp:
        runner = HTMLTestRunner(
            stream=fp,
            title='Seldom自动化测试报告',
            description='浏览器chrome,平台windows'
        runner.run(suit)
    # 发邮件功能,注意这里不是填邮箱密码而是授权码,授权码需要去邮箱设置里获取
    smtp = SMTP(user="user@qq.com", password="授权码", host="smtp.qq.com")
    smtp.sender(to="user@qq.com", attachments=report)

优化的汉化版我已上传到CSDN,需要的小伙伴可以直接下载:
HTMLTestRunner支持Python3版本中文优化版安装包

=========================================================
以上,如果对你有帮助,

欢迎搜索关注我的微信公众号【程序员杨叔】,免费了解获取更多测试相关干货内容资料,一起交流学习~
在这里插入图片描述

python3中用HTMLTestRunner.py报importError“:No module named 'StringIO'、dict' object has no attribute 'has_key'解决办法 原因是官网的是python2语法写的,进入HTMLTestRunne模块中,手动把官网的HTMLTestRunner.py改成python3的语法 第94行,将import StringIO修改成import io 第539行,将self.outputBuffer = StringIO. python3.X下使用过HTMLTestRunner,发现下到的.py是2的语法,不兼容3.X自己就改了一下,把改动的地方发出来,请大神多指教; 首先在官网下HTMLTestRunner.py 文件,并加入到Lib这个就不多说了; 在python shell里输入 >>>import HTMLTestRunner >>> dir(HTMLTest... 应该把HTMLTestTunner放在python3的lib目录下,但是由于我用的是anaconda安装python3,所以首先找出Python安装路径,将其拷贝到该路径下。 import sys print sys.path 即可查询安装路径 第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 问题原因:HTMLTestRunner通过pip安装会失败 解决办法:1.手动下载HTMLTestRunner.py,地址http://tungwaiyip.info/software/HTMLTestRunner.html 2.将放在F:\Python\Lib文件夹中,即可在程序中导入成功。 二. 环境变量没有问题的前提下 输入安装命令 pip install 模块名 如果你要安装 requests 模块 就输入 pip install requests 回车 如果你要安装selenium 模块 就输入 pip install selenium 回车 Requirement already satisfied: 表示之前已经安装过这个模块 下面的 W 1、首先咱们需要下载HTMLTestRunner.py,但是python3.X以上需要修改部分代码进行适配,因为HTMLTestRunner.py当前是根据Python2.X进行开发的,具体改动这里就不详细说明了,有想了解的可以上网搜下,我这里把已经修改好的版本放在百度网盘了,有需要的人可以直接copy。 链接: https://pan.baidu.com/s/1k0_fxqm_3Tg-4-ZMX47Hww 提取码: n4d5 2、将下载好的HTMLTestRunner.py需要拷贝到到:/Librar   在很早之前,我写过一篇文章关于HTMLTestRunner报告优化的处理:https://www.cnblogs.com/liudinglong/p/12346824.html,后面群友在群里问了一个问题,是关于通过和失败的用例,图标样式和单击响应的问题。虽然很早之前已经帮群友解决了,由于之前工作繁忙,然而一直没有写下来,现在写下来,以便帮助更多的小伙伴们少走弯路。 在之前的案例中,我们完成了自劢化测试的基本能力,也能完成测试的执行工作,但 是还没有做到将测试的结果以报表的形式输出,接下来,在之前的测试基础上加上测试报告的输出。 HTMLTestRunner 介绍 HTMLTestRunnerpython 标准库 unittest 的扩展,可以生成一个直观的测试报告。 在使用之前需要将 HTMLTestRunner.py 文件放如到 python安装目弽下,例如我的 就是 c:\\Python27 目录。 生成测试报告 下我们在之前的 LMD 登陆测试 关于安装: 使用的是pycharm,Python3.6版本 注意:HTMLTestRunner.py可以直接下载,放在D:\pycharm\test\venv\Lib\site-packages目录下(针对我自己的环境,我之前放在Python的文件夹下面,并没有什么用) 小插曲:再次之前,我在PyCharm中最初是使用pip安装htmltestrunner,命令如下:pip install ht 安装 HTMLTestRunner 库的方法非常简单,直接 pip 就可以了pip install html-testRunner在https://pypi.org/ 中可以直接搜索到,并且官方还提供了详细的文档,操作起来非常的简单官方示例代码:import HtmlTestRunnerimport unittestclass TestStringMethods(unittest.TestCas... 将HTMLTestRunner.py的文件导入到python安装路径下的lib文件夹中 问题:一开始放到了Python/Lib文件夹下 但是其实我这个是用的anaconda安装的,可以在首先查询下Python安装位置 import sys print sys.path  即可查询... 通过pip安装HTMLTestRunne失败。则需要通过手动下载。 下载地址:http://tungwaiyip.info/software/HTMLTestRunner.html 下载后,把HTMLTestRunner.py 文件复制到Python 安装路径下的lib文件夹中即可。 在python3中用HTMLTestRunner.py报importError“:No mo...