Selenium+python之HTML測試報告
一、準備
1、本節(jié)用到的模塊——HTMLTestRunner
1)下載:下載地址:
鼠標右鍵→目標另存為,保存到本地。
2)安裝:將下載的HTMLTestRunner.py文件復(fù)制到Python安裝目錄下即可
...\Python36\Lib
3)驗證:在Python交互模式下引入HTMLTestRunner模塊,如系統(tǒng)沒有報錯,則說明添加成功

2、修改HTMLTestRunner
因為HTMLTestRunner是基于Python2開發(fā)的,如果在Python3環(huán)境下使用,需要對其部分內(nèi)容進行修改。使用notepad++打開HTMLTestRunner.py文件,修改如下內(nèi)容:
第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、代碼實現(xiàn)
?# -*- 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__":
? ? ?#構(gòu)造測試套件
? ? ?testsuit = unittest.TestSuite()
? ? ?testsuit.addTest(BaiduIdeTest("test_baidu_ide"))
? ? ?#定義測試報告存放路徑
? ? ?fp = open('./result.html','wb')
? ? ?#定義測試報告
? ? ?runner = HTMLTestRunner(stream=fp,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?title='自動化測試報告',
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?description='用例執(zhí)行情況:')
? ? ?runner.run(testsuit)
? ? ?#關(guān)閉測試報告
? ? ?fp.close()
2、代碼分析
1)將HTMLTestRunner模塊用import導(dǎo)入進來。
2)通過open()方法以二進制寫模式('wb')打開當前目錄下的result.heml,如果沒有,則自動創(chuàng)建。
3)調(diào)用HTMLTestRunner模塊下的HTMLTestRunner類。
stream 指定測試報告文件
title 定義測試報告的標題
description 定義測試報告的副標題
4)通過HTMLTestRunner的run()方法來運行測試套件中的測試用例
5)關(guān)閉測試報告文件close()
3、代碼效果

4、tips
代碼執(zhí)行的時候?qū)⑹髽朔诺?code>“if __name__ == "__main__":”右鍵選擇“Run'baidu_ide_text'” 而不要使用“Run untitest in baidu_ide_text'”,否則無法生成測試報告
三、更易讀的測試報告
通過Python的doc string類型的注釋增強測試報告的可度性。
python代碼注釋分為兩種:commen(普通注釋#開頭)和doc string(描述函數(shù)、類和方法三引號表示)
1、代碼實現(xiàn)
?......
?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):
? ? ? ? ?'''搜索關(guān)鍵字'''
? ? ? ? ?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、代碼效果

四、測試報告名稱
1、知識準備
time.time():獲取當前時間戳
time.ctime():當前時間的字符串形式
time.location():當前時間的struct_time形式
time.strftime():獲得當前時間,可以將時間格式化字符串
常用格式化符號:
%Y:帶世紀的年,2017
%y:不帶世紀的年,17
%m:月份
%d:天
%H:24小時制的小時
%M:分
%S:秒
2、代碼實現(xiàn)
?......
?if __name__ == "__main__":
? ? ?#構(gòu)造測試套件
? ? ?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='用例執(zhí)行情況:')
? ? ?runner.run(testsuit)
? ? ?#關(guān)閉測試報告
? ? ?fp.close()
3、代碼效果

五、項目集成測試報告
將以上內(nèi)容集成到項目的runtest.py文件中,使其作用于整個測試項目
1、代碼實現(xiàn)
?# -*- 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、代碼效果
