今天,学习了如何生成HTMLTestRunner测试报告。 
接上篇文章,对于unittest框架,运行后,测试结果不便于查看,同时多个case存在的时候,可能会导致case result记录不正确的情况。 
为此,引入了HTMLTestRunner.py,它是Python标准库unittest模块的一个扩展。它可以生成直观的HTML测试报告。 
首先,下载HTMLTestRuner.py文件。 
源地址:http://tungwaiyip.info/software/HTMLTestRunner.html 
这是针对Python2.7版本,那么对于Python3.x的使用,需要改动几处。同时谢谢http://www.bubuko.com/infodetail-529431.html的分享。 
具体改动如下: 
第94行,将import StringIO修改成import io 
第539行,将self.outputBuffer = StringIO.StringIO()修改成self.outputBuffer= io.StringIO() 
第631行,将print >> sys.stderr, ‘\nTime Elapsed: %s‘ %(self.stopTime-self.startTime)修改成print(sys.stderr, ‘\nTimeElapsed: %s‘ % (self.stopTime-self.startTime)) 
第642行,将if not rmap.has_key(cls):修改成if notcls in rmap: 
第766行,将uo = o.decode(‘latin-1‘)修改成uo = e 
第775行,将ue = e.decode(‘latin-1‘)修改成ue = e 
第778行,将output = saxutils.escape(uo+ue),修改成output = saxutils.escape(str(uo)+str(ue)),

将上述几处改动,保存成功后,再将HTMLTestRunner.py放到C:\Python34\Lib目录中,检验是否加载成功,在Python IDLE 中输入 
import HTMLTestRunner 
若无报错,那么加载成功。

测试案例: 
1.登录百度云 
2.进入“立即注册百度账号”网页 
3.进入”会员中心”网页 
4.生成测试报告的文件名为:2015-01-02result.html。

测试脚本:

#coding=utf-8      #防止中文乱码
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 #加载unittest模块
import unittest
import time
import re
#加载HTMLTestRunner,用于生成HTMLreuslt
import HTMLTestRunner class BaiduYun(unittest.TestCase):
def setUp(self):
self.browser=webdriver.Chrome()
self.browser.implicitly_wait(30)
self.base_url="http://yun.baidu.com"
self.verficationErrors=[]
self.accept_next_alert=True
def Login(self):
browser=self.browser
browser.get(self.base_url+'/')
u"""百度云登录"""
browser.find_element_by_name("userName").clear()
username=browser.find_element_by_name("userName")
username.send_keys("alu***")
username.send_keys(Keys.TAB)
time.sleep(2)
password=browser.find_element_by_name("password")
password.send_keys("***")
password.send_keys(Keys.ENTER)
time.sleep(3)
browser.close()
def Register(self):
browser=self.browser
browser.get(self.base_url+'/')
u"""立即注册百度账号"""
browser.find_element_by_class_name("link-create").click()
time.sleep(2)
browser.close()
def Link(self):
browser=self.browser
browser.get(self.base_url+'/')
u"""会员中心"""
browser.find_element_by_link_text("会员中心").click()
time.sleep(2)
browser.close()
def tearDown(self):
self.browser.quit()
self.assertEqual([],self.verficationErrors)
if __name__=="__main__":
#unittest.main()
testunit=unittest.TestSuite()
#将测试用例加入到测试容器中
testunit.addTest(BaiduYun("Login"))
testunit.addTest(BaiduYun("Register"))
testunit.addTest(BaiduYun("Link"))
#获取当前时间,这样便于下面的使用。
now = time.strftime("%Y-%m-%M-%H_%M_%S",time.localtime(time.time()))
#打开一个文件,将result写入此file中
fp=open("result"+now+".html",'wb')
runner=HTMLTestRunner.HTMLTestRunner(stream=fp,title='test result',description=u'result:')
runner.run(testunit)
fp.close()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68

F5,运行,就这样得到了test result 
在Python3.4中,可以得到: 

在C:\Python34\目录下,有文件 
 
打开后,如图所示: 

这样看更直观。 
同时,如果出现错误的case,也就只会显示fail的case(另外的test case的结果),对于pass的case,依旧显示pass,如图所示: 

分析: 
1.对于fp=file(filename,”wb”)在Python3.x中file已经不再使用了,需要使用的是fp=open(filename,”wb”) 
同时一定要记得close fp即fp.close() 
2.为了设置result file的name更直观,需要获取当前时间,已做分辨。 
now=time.strftime(“%Y-%m-%M-%H_%M_%S”,time.localtime(time.time()))

那么,问题来了,虽然,生成的result倒是直观了,但是对于一个脚本里有多个case,这样对于脚本的维护以及使用,依旧不方便,这就需要考虑到整合case脚本,就需要学习测试套件。

如何生成HTMLTestRunner报告的更多相关文章

  1. 【python-HTMLTestRunner】生成HTMLTestRunner报告报错ERROR 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128)

    [python-HTMLTestRunner]生成HTMLTestRunner报告报错:ERROR 'ascii' codec can't decode byte 0xe5 in position 0 ...

  2. 用PyCharm执行测试成功但无法生成HTMLTestRunner报告

    问题:代码写的没问题,执行也成功了,但就是无法生成HTMLTestRunner的报告 其实这是编辑器搞得鬼,编辑器为了方便用户执行测试,都有一项功能,可以用编辑器来调用unittest或者nose来执 ...

  3. Python不生成HTMLTestRunner报告-转载学习

    1.问题:Python中同一个.py文件中同时用unittest框架和HtmlReport框架后,HtmlReport不被执行. 2.为什么?其实不是HtmlReport不被执行,也不是HtmlRep ...

  4. unittest 运行slenium(五)---运行代码并生成HTMLTestRunner报告

    整体代码如下: import os import sys import time import datetime import unittest import HTMLTestRunner # git ...

  5. 解惑unittest框架中导入HTMLTestRunner模块后正常运行却无法生成HTML报告问题

    1.HTMLTestRunner介绍 HTMLTestRunner是一个第三方的unittest HTML报告库,用于python单元测试框架的TestRunner.它是生成一个HTML报告,以一目了 ...

  6. unittest同时支持参数化和生成html报告

    最近在用python3.6+unittest+requests做自动化接口测试.发现一个问题,unittest中使用第3方插件parameterized进行参数化,再生成html报告时,运行就会失败. ...

  7. python+requests+excel+unittest+ddt接口自动化数据驱动并生成html报告

    1.环境准备: python3.6 requests xlrd openpyxl HTMLTestRunner_api 2.目前实现的功能: 封装requests请求方法 在excel填写接口请求参数 ...

  8. python+requests+excel+unittest+ddt接口自动化数据驱动并生成html报告(二)

    可以参考 python+requests接口自动化完整项目设计源码(一)https://www.cnblogs.com/111testing/p/9612671.html 原文地址https://ww ...

  9. Python 同一文件中,有unittest不执行“if __name__ == '__main__”,不生成HTMLTestRunner测试报告的解决方案

    1.问题:Python中同一个.py文件中同时用unittest框架和HtmlReport框架后,HtmlReport不被执行. 2.为什么?其实不是HtmlReport不被执行,也不是HtmlRep ...

随机推荐

  1. 我的WafBypass之道

    0x00 前言  去年到现在就一直有人希望我出一篇关于waf绕过的文章,我觉得这种老生常谈的话题也没什么可写的.很多人一遇到waf就发懵,不知如何是好,能搜到的各种姿势也是然并卵.但是积累姿势的过程也 ...

  2. (转载)ORA-14452:试图创建,更改或删除正在使用的临时表中的索引

    因为表kol_xx_fin050_temp 为临时表,而且有其他session正在使用. 处理步骤: 1.先从 dba_objects / user_objects中查询到该表的object_id: ...

  3. Java核心技术点之集合框架

    1. 概述     Java集合框架由Java类库的一系列接口.抽象类以及具体实现类组成.我们这里所说的集合就是把一组对象组织到一起,然后再根据不同的需求操纵这些数据.集合类型就是容纳这些对象的一个容 ...

  4. (原创)mybatis学习二,spring和mybatis的融合

    mybatis学习一夯实基础 上文介绍了mybatis的相关知识,这一节主要来介绍mybaits和spring的融合 一,环境搭建 1,jar包下载,下载路径为jar包 2,将包导入到java工程中 ...

  5. php常用函数(不定时更新)

    一,数据操作类 1,天花板函数(ceil)和地板函数(floor) 这两个函数是对数据进行向上取整和向下取整的操作的,比如说 echo ceil("3.01"); //这里输出的是 ...

  6. python执行linux shell管道输出内容

    干净不留痕,用过都说好. echo "print 1+1" |python

  7. P3381 【模板】最小费用最大流

    P3381 [模板]最小费用最大流 题目描述 如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用. 输入输出格式 输入格式: 第一行 ...

  8. Linux 网络编程详解九

    TCP/IP协议中SIGPIPE信号产生原因 .假设客户端socket套接字close(),会给服务器发送字节段FIN: .服务器接收到FIN,但是没有调用close(),因为socket有缓存区,所 ...

  9. 关于onbeforeunload的一些想法

    页面在关闭前会有onbeforeUnload事件,来询问用户是否要关闭这个页面OR选项卡 浏览器的F5刷新为按下F5----onbeforeUnload----onunload----onload; ...

  10. 发布我的图片预加载控件YPreLoadImg v1.0

    介绍 大家好!很高兴向大家介绍我的图片预加载控件YPreLoadImg.它可以帮助您预加载图片,并且能显示加载的进度,在预加载完成后调用指定的方法. YPreLoadImg控件由一个名为PreLoad ...