如何生成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()

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脚本,就需要学习测试套件。
且看下回分解。

你可能感兴趣的:(Selenium)