1. 程式人生 > >應用HTMLTestRunner整合測試報告

應用HTMLTestRunner整合測試報告

為了便於測試指令碼的維護,以及更多測試用例的管理,於是根據上次學習的HTMLTestRunner生成的測試報告,今天將對其進行整理。我們之前使用 TestSuite 只是在一個.py 檔案裡新增多個測試用例,那麼我們可以法把多個.py 檔案中的用例通過測試套件來組織。
測試套件結構如圖所示(在此,謝謝蟲師部落格的分享):
這裡寫圖片描述

測試案例:
1.通過載入baidu模組,sogou模組以及PythonOrg模組
2.生成測試報告
為此,本文的實際用例如下:
這裡寫圖片描述

3.根據需要,寫好測試指令碼。待完成後的測試指令碼分別另存為檔案
(TestBaidu.py,TestSogou.py,PythonOrg.py,All_HTMLTest.py)將其放在同一目錄下,然後執行All_HTMLTest.py的指令碼。

測試指令碼:
TestBaidu.py
測試搜尋和連結的控制元件。

#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

import unittest
import
time import re import HTMLTestRunner class TestBaidu(unittest.TestCase): def setUp(self): self.browser=webdriver.Chrome() self.browser.implicitly_wait(30) self.base_url="http://www.baidu.com" self.verficationErrors=[] self.accept_next_alert=True def test_search
(self):
browser = self.browser browser.get(self.base_url+'/') browser.find_element_by_id("kw").clear() browser.find_element_by_id("kw").send_keys("自動化測試") browser.find_element_by_id("su").click() time.sleep(2) browser.find_element_by_id("su").submit() time.sleep(3) title=browser.title print ("title is %s"%title) time.sleep(5) browser.close() def test_link(self): browser=self.browser browser.get(self.base_url+'/') browser.find_element_by_link_text("貼吧").click() time.sleep(5) browser.close() def tearDown(self): self.browser.quit() self.assertEqual([],self.verficationErrors) if __name__=="__main__": unittest.main()

TestSogou.py
測試搜尋,微信link以及設定連結的控制元件。

#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

import unittest
import time
import re
import HTMLTestRunner

class TestSogou(unittest.TestCase):
    def setUp(self):
        self.browser=webdriver.Chrome()
        self.browser.implicitly_wait(30)
        self.base_url="https://www.sogou.com"
        self.verficationErrors=[]
        self.accept_next_alert=True
    def test_search(self):
        browser=self.browser
        browser.get(self.base_url+'/')
        browser.maximize_window()         
        keyworld=browser.find_element_by_name("query")
        keyworld.send_keys("Selenium Python")
        browser.find_element_by_id("stb").click()
        time.sleep(3)
        browser.close()
    def test_weixin(self):
        browser=self.browser
        browser.get(self.base_url+'/')
        browser.maximize_window()
        browser.find_element_by_link_text("微信").click()
        time.sleep(2)
        browser.close()
    def test_config(self):
        browser=self.browser
        browser.get(self.base_url+'/')
        browser.maximize_window()                             
        browser.find_element_by_class_name.
        ("s_usersetting").click()
        time.sleep(2)
        browser.close()
    def tearDown(self):
        self.browser.quit()
        self.assertEqual([],self.verficationErrors)

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

PythonOrg.py
測試搜尋和link控制元件。

import unittest
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import os
class PythonOrgSearch(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome()
        #這樣可以根據需要自動載入時間
        self.driver.implicitly_wait(30)
        self.base_url="http://www.python.org"
        self.verficationErrors=[]
        self.accept_next_alert=True
    def test_search(self):
        driver = self.driver
        driver.get(self.base_url+"/")
        self.assertIn("Python", driver.title)
        elem = driver.find_element_by_name("q")
        elem.send_keys("selenium")
        elem.send_keys(Keys.RETURN)
        #判斷title中是否有Welcome欄位
        self.assertIn("Welcome", driver.title)
        driver.close()
    def test_download(self):
        driver = self.driver
        driver.get(self.base_url+"/")
        self.assertIn("Python", driver.title 
        link=driver.find_element_by_link_text("Downloads")
        link.click()
        time.sleep(3)
        driver.close()
    def tearDown(self):
        self.driver.quit()
        self.assertEqual([],self.verficationErrors)
if __name__ == "__main__":
    unittest.main()

All_HTMLTest.py
此.py載入了TestBaidu.py,TestSogou.py,PythonOrg.py

#coding=utf-8
import unittest
#載入模組TestBaidu,TestSogou,PythonOrg
import TestSogou
import PythonOrg
import TestBaidu

import time
import HTMLTestRunner

testunit=unittest.TestSuite()
#將測試用例加入到測試容器中
testunit.addTest(unittest.makeSuite(TestSogou.TestSogou))
testunit.addTest(unittest.makeSuite(PythonOrg.PythonOrgSearch))
testunit.addTest(unittest.makeSuite(TestBaidu.TestBaidu))

#runner=unittest.TextTestRunner()
#runner.run(testunit)

#匯入當前時間,使用time模組的相關函式
now=time.strftime("%Y-%m-%d_%H-%M-%S",time.localtime())
#將測試結果寫入到result.html中
fp=open(now+"result.html",'wb')
runner=HTMLTestRunner.HTMLTestRunner(stream=fp,title='Test Report',description=u'Result:')
runner.run(testunit)
fp.close()

F5執行,得到:
這裡寫圖片描述
C:\Python34,得到:
這裡寫圖片描述
開啟,此檔案得到:
這裡寫圖片描述

對於錯誤的case,可以根據實際情況再做討論。
這樣一來,對於指令碼的維護便利了很多。只需要根據需要,改動相關模組的指令碼即可,或者根據需要新增需要的模組的指令碼,然後載入到All_HTMLTest.py中去。