1. 程式人生 > >selenium+python之HTML測試報告

selenium+python之HTML測試報告

d+ 百度 復制 tips 代碼 drive ext 情況 lec

r一、準備

1、本節用到的模塊——HTMLTestRunner

1)下載:下載地址:http://tungwaiyip.info/software/HTMLTestRunner.html

鼠標右鍵→目標另存為,保存到本地。

2)安裝:將下載的HTMLTestRunner.py文件復制到Python安裝目錄下即可

...\Python36\Lib

3)驗證:在Python交互模式下引入HTMLTestRunner模塊,如系統沒有報錯,則說明添加成功

技術分享

2、修改HTMLTestRunner

因為HTMLTestRunner是基於Python2開發的,如果在Python3環境下使用,需要對其部分內容進行修改。使用notepad++打開HTMLTestRunner.py文件,修改如下內容:

第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 not cls in rmap:

第766行,將uo = o.decode(‘latin-1‘)修改成uo = e

第772行,將ue = e.decode(‘latin-1‘)修改成ue = e


二、生成HTML測試報告

以百度搜索為例生成HTML測試報告

1、代碼實現

# -*- coding: utf-8 -*-
from selenium import webdriver
from HTMLTestRunner import HTMLTestRunner
import unittest,time

class BaiduIdeTest(unittest.TestCase):
    def setUp(self):
        self.driver 
= webdriver.Firefox() self.driver.implicitly_wait(30) self.base_url = "https://www.baidu.com/" def test_baidu_ide(self): driver = self.driver driver.get(self.base_url) driver.find_element_by_id("kw").clear() driver.find_element_by_id("kw").send_keys("HTMLTestRunner") driver.find_element_by_id("su").click() time.sleep(5) self.assertEqual(u"HTMLTestRunner_百度搜索", driver.title) def tearDown(self): self.driver.quit() if __name__ == "__main__": #構造測試套件 testsuit = unittest.TestSuite() testsuit.addTest(BaiduIdeTest("test_baidu_ide")) #定義測試報告存放路徑 fp = open(./result.html,wb) #定義測試報告 runner = HTMLTestRunner(stream=fp, title=自動化測試報告, description=用例執行情況:) runner.run(testsuit) #關閉測試報告 fp.close()

2、代碼分析

1)將HTMLTestRunner模塊用import導入進來。

2)通過open()方法以二進制寫模式(‘wb‘)打開當前目錄下的result.heml,如果沒有,則自動創建。

3)調用HTMLTestRunner模塊下的HTMLTestRunner類。

  stream 指定測試報告文件

  title 定義測試報告的標題

  description 定義測試報告的副標題

4)通過HTMLTestRunner的run()方法來運行測試套件中的測試用例

5)關閉測試報告文件close()

3、代碼效果

技術分享

4、tips

代碼執行的時候將鼠標放到“if __name__ == "__main__":”右鍵選擇“Run‘baidu_ide_text‘” 而不要使用“Run untitest in baidu_ide_text‘”,否則無法生成測試報告

三、更易讀的測試報告

通過Python的doc string類型的註釋增強測試報告的可度性。

python代碼註釋分為兩種:commen(普通註釋#開頭)和doc string(描述函數、類和方法三引號表示)

1、代碼實現

......
class BaiduIdeTest(unittest.TestCase):
    ‘‘‘百度搜索測試‘‘‘
    def setUp(self):
        self.driver = webdriver.Firefox()
        self.driver.implicitly_wait(30)
        self.base_url = "https://www.baidu.com/"

    
    def test_baidu_ide(self):
        ‘‘‘搜索關鍵字‘‘‘
        driver = self.driver
        driver.get(self.base_url)
        driver.find_element_by_id("kw").clear()
        driver.find_element_by_id("kw").send_keys("HTMLTestRunner")
        driver.find_element_by_id("su").click()
        time.sleep(5)
        self.assertEqual(u"HTMLTestRunner_百度搜索", driver.title)
........

2、代碼效果

技術分享

四、測試報告名稱

使用python的time模塊,在報告名稱中加入當前時間增強測試報告文件的識別性。

1、知識準備

time.time():獲取當前時間戳

time.ctime():當前時間的字符串形式

time.location():當前時間的struct_time形式

time.strftime():獲得當前時間,可以將時間格式化字符串

常用格式化符號:

%Y:帶世紀的年,2017

%y:不帶世紀的年,17

%m:月份

%d:天

%H:24小時制的小時

%M:分

%S:秒

2、代碼實現

......
if __name__ == "__main__":
    #構造測試套件
    testsuit = unittest.TestSuite()
    testsuit.addTest(BaiduIdeTest("test_baidu_ide"))
    
    #按照一定格式獲取當前時間
    now = time.strftime("%Y%m%d_%H%M%S")
    #將當前時間加入到報告文件名稱中
    filename = ./+now+result.html
    #定義測試報告存放路徑
    fp = open(filename,wb)
    #定義測試報告
    runner = HTMLTestRunner(stream=fp,
                            title=自動化測試報告,
                            description=用例執行情況:)
    runner.run(testsuit)
    #關閉測試報告
    fp.close()

3、代碼效果

技術分享

五、項目集成測試報告

將以上內容集成到項目的runtest.py文件中,使其作用於整個測試項目

1、代碼實現

# -*- coding: utf-8 -*-
from selenium import webdriver
import unittest, time

class YoudaoIdeTest(unittest.TestCase):
    ‘‘‘有道翻譯測試‘‘‘
    def setUp(self):
        self.driver = webdriver.Firefox()
        self.driver.implicitly_wait(30)
        self.base_url = "http://www.youdao.com/"

    
    def test_youdao_ide(self):
        ‘‘‘中英翻譯測試‘‘‘
        driver = self.driver
        driver.get(self.base_url)
        driver.find_element_by_id("translateContent").clear()
        driver.find_element_by_id("translateContent").send_keys(u"自動化測試報告")
        driver.find_element_by_css_selector("button").click()
        time.sleep(5)
        self.assertEqual(u"【自動化測試報告】", driver.title)

    
    def tearDown(self):
        self.driver.quit()


if __name__ == "__main__":
    unittest.main()

2、代碼效果

技術分享

selenium+python之HTML測試報告