如何生成HTMLTestRunner报告
今天,学习了如何生成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报告的更多相关文章
- 【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 ...
- 用PyCharm执行测试成功但无法生成HTMLTestRunner报告
问题:代码写的没问题,执行也成功了,但就是无法生成HTMLTestRunner的报告 其实这是编辑器搞得鬼,编辑器为了方便用户执行测试,都有一项功能,可以用编辑器来调用unittest或者nose来执 ...
- Python不生成HTMLTestRunner报告-转载学习
1.问题:Python中同一个.py文件中同时用unittest框架和HtmlReport框架后,HtmlReport不被执行. 2.为什么?其实不是HtmlReport不被执行,也不是HtmlRep ...
- unittest 运行slenium(五)---运行代码并生成HTMLTestRunner报告
整体代码如下: import os import sys import time import datetime import unittest import HTMLTestRunner # git ...
- 解惑unittest框架中导入HTMLTestRunner模块后正常运行却无法生成HTML报告问题
1.HTMLTestRunner介绍 HTMLTestRunner是一个第三方的unittest HTML报告库,用于python单元测试框架的TestRunner.它是生成一个HTML报告,以一目了 ...
- unittest同时支持参数化和生成html报告
最近在用python3.6+unittest+requests做自动化接口测试.发现一个问题,unittest中使用第3方插件parameterized进行参数化,再生成html报告时,运行就会失败. ...
- python+requests+excel+unittest+ddt接口自动化数据驱动并生成html报告
1.环境准备: python3.6 requests xlrd openpyxl HTMLTestRunner_api 2.目前实现的功能: 封装requests请求方法 在excel填写接口请求参数 ...
- python+requests+excel+unittest+ddt接口自动化数据驱动并生成html报告(二)
可以参考 python+requests接口自动化完整项目设计源码(一)https://www.cnblogs.com/111testing/p/9612671.html 原文地址https://ww ...
- Python 同一文件中,有unittest不执行“if __name__ == '__main__”,不生成HTMLTestRunner测试报告的解决方案
1.问题:Python中同一个.py文件中同时用unittest框架和HtmlReport框架后,HtmlReport不被执行. 2.为什么?其实不是HtmlReport不被执行,也不是HtmlRep ...
随机推荐
- [No000029]程序员的那些事儿 -- 皆大欢喜的加薪
我的朋友A君是个典型的.NET开发人员,技术不错,人品也不错,在一家小公司(姑且称为甲公司)做项目开发,是技术骨干. 3个月前,他找到我说想跳槽,让我帮忙介绍工作.我说为什么想跳了? 1. 为什么想离 ...
- java 23 - 3 单例模式实现Runtime类
Runtime:每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接. 其中一个方法: exec(String command) 在单独的进程中执行指定的字符串 ...
- iOS UITableView 分割线从零开始
第一种(不自己画线): 代码如下 // tableView的分割线从零开始 -(void)viewDidLayoutSubviews { if ([self.tableView respondsToS ...
- angularjs之$timeout指令
angular.js的$timeout指令对window.setTimeout做了一个封装,它的返回值是一个promise对象.当定义的时间到了以后,这个promise对象就会被resolve,回调函 ...
- 链剖&LCT总结
在搞LCT之前,我们不妨再看看喜闻乐见的树链剖分. 树链剖分有一道喜闻乐见的例题:NOI2015 软件包管理器 如果你看懂题目了,你就会明白它是叫你维护一个树,这棵树是不会动的,要兹磁子树求和,子树修 ...
- varnish 的一个配置
backend default { .host = "10.32.26.31"; .port = "; } sub vcl_recv { if (req.url ~ &q ...
- 002商城项目:maven工程的测试以及svn的使用
我们上一篇文章搭建了maven工程,这一篇文章我们就要测试这个工程. 1: 由于这个工程还没有页面,我们要首先建立一个页面.在建立页面的jsp的过程中,我发现了一个问题,我这个eclipse由于缺少J ...
- [转]C#压缩打包文件
/// <summary> /// 压缩和解压文件 /// </summary> public class ZipClass { /// <summary> /// ...
- typedef 和define的区别
总结一下typedef和#define的区别 1.概念 #define 它在编译预处理时进行简单的替换,不作正确性检查.它是预处理指令. typedef 它在自己的作用域内给一个已经存在的类型一个别名 ...
- 【腾讯GAD暑期训练营游戏程序开发】游戏中的动画系统作业
游戏中的动画系统作业说明文档 一.实现一个动画状态机:至少包含3组大的状态节点