zoukankan      html  css  js  c++  java
  • 如何生成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, ‘ Time Elapsed: %s‘ %(self.stopTime-self.startTime)修改成print(sys.stderr, ‘ TimeElapsed: %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:Python34Lib目录中,检验是否加载成功,在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脚本,就需要学习测试套件。 

  • 相关阅读:
    DevExpress GridControl使用方法
    DevExpress中,添加Winform窗体到DockPanel z
    取消默认 $ 定义
    五角星效果实现
    jquery的each函数的用法
    Object类型转换为long或者Long
    easyui datagrid 列排序
    redis.clients.jedis.exceptions.JedisDataException: WRONGTYPE Operation against a key holding the wrong kind of value
    DIV元素不换行
    JS 中div内容的显示和隐藏
  • 原文地址:https://www.cnblogs.com/my-blogs-for-everone/p/6058386.html
Copyright © 2011-2022 走看看