Selenium:集成測試報告


參考內容:蟲師:《selenium2自動化測試實戰——基於python語言》

PS:書中的代碼,只能做參考,最好還是自己碼一碼,不一定照搬就全是對的,實踐出真知啊,踩了很多坑的說。。。

隨着軟件不斷迭代功能越來越多,對應的測試用例也會呈指數增長。一個實現幾十個功能的項目,對應的用例可能有上百個甚至更多,如果全部集成在一個文件中,那么這個文件就很臃腫且維護麻煩。

一個很好的方法就是將這些用例按照功能類型進行拆分,分散到不同測試文件中,即一個項目,對應多個分支。

 

一、分拆后的實現代碼

1、testbaidu.py

 1 from selenium import webdriver
 2 import unittest
 3 import time
 4 
 5 class MyTest(unittest.TestCase):
 6     def setUp(self):
 7         self.driver = webdriver.Chrome("F:\安裝工具\python\chromedriver.exe")
 8         self.driver.maximize_window()
 9         self.driver.implicitly.wait(10)
10         self.base_url = "http://www.baidu.com"
11 
12     def test_baidu(self):
13         driver = self.driver
14         driver.get(self.base_url + "/")
15         driver.find_element_by_id("kw").clear()
16         driver.find_element_by_id("kw").send_key("unittest")
17         driver.find_element_by_id("su").click()
18         time.sleep(2)
19         title = assertEqual(title,"unittest_百度搜索")
20 
21     def tearDown(self):
22         self.driver.quit()

 

2、testyoudao.py

 1 from selenium import webdriver
 2 import unittest
 3 import time
 4 
 5 class Mytest(unittest.TestCase):
 6 
 7     def setUp(self):
 8         self.driver = webdriver.Chrome("F:\安裝工具\python\chromedriver.exe")
 9         self.driver.maximize_window()
10         self.driver.implicitly_wait(10)
11         self.base_url = "http://www.youdao.com"
12     
13     def test_youdao(self):
14         driver = self.driver
15         driver.get(self.base_url + "/")
16         driver.find_element_by_id("query").clear()
17         driver.find_element_by_id("query").send.keys("webdriver")
18         driver.find_element_by_id("qb").click()
19         time.sleep(2)
20         title = driver.title
21         self.assertEqual(title, "webdriver - 有道搜索")
22 
23     def tearDown(self):
24         self.driver.close()

 

二、創建用於執行所有用例的ALL_HTMLtest.py文件

1、ALL_HTMLtest.py

 1 # coding=utf-8
 2 import unittest
 3 import time
 4 from HTMLTestRunner import HTMLTestRunner
 5 
 6 # 加載用例testbaidu,testyoudao
 7 import testbaidu
 8 import testyoudao
 9 
10 # 將測試用例添加到測試集中
11 suite = unittest.TestSuite()
12 
13 suite.addTest(testbaidu.MyTest("test_baidu"))
14 suite.addTest(testyoudao.Mytest("test_youdao"))
15 
16 if __name__ == '__main__':
17     # 執行測試
18     runner = unittest.TextTestRunner()
19     runner.run(suite)

拆分帶來的好處顯而易見,可以根據不同功能創建不同的測試文件,甚至不同的目錄,還可以將不同的小功能划分為不同的測試類,在類下編寫測試用例,整體結構更加清晰。

但依然存在缺陷(當用例達到成百上千條時,在ALL_HTMLtest.py中addTest()添加測試用例就變得很麻煩)。。。

 

2、TestLoader類

unittest單元測試框架提供了TestLoader類,該類負責根據各種標准加載測試用例,並將它們返回給測試套件。

unittest提供了可以共享的defaultTestLoader類,可以使用其子類和方法創建實例,discover()方法就是其中之一。

discover(start_dir, pattern='test*.py', top_level_dir=None)

找到指定目錄下的所有測試模塊,並遞歸查找子目錄下的測試模塊,只有匹配到文件名才能被加載,如果啟動的不是頂層目錄,則頂層目錄必須單獨指定。

start_dir:要測試的模塊名或測試用例目錄;

pattern='test*.py':表示用例文件名的匹配原則,下面的例子中匹配文件名為以“test”開頭的“.py”文件,星號“*”表示任意多個字符;

top_level_dir=None:測試模塊的頂層目錄,如果沒有頂層目錄,默認為None;

 1 # coding=utf_8
 2 import unittest
 3 from unittest import defaultTestLoader
 4 # 定義測試用例的目錄為當前目錄
 5 test_dir = './'
 6 discover = unittest.defaultTestLoader.discover(test_dir,pattern='test*.py') 
 7 
 8 if __name__ == '__main__':
 9     runner = unittest.TextTestRunner()
10     runner.run(discover)

 

三、集成測試報告

HTMLTestRunner目前只針對單個測試文件生成測試報告,因此需要對上面的代碼進行修改,修改后內容如下:
 1 # coding=utf_8
 2 import unittest
 3 import time
 4 from unittest import defaultTestLoader
 5 from HTMLTestRunner import HTMLTestRunner
 6 
 7 # 定義測試用例的目錄為當前目錄
 8 test_dir = './report'
 9 discover = unittest.defaultTestLoader.discover(test_dir,pattern='test*.py') 
10 
11 if __name__ == '__main__':
12     now = time.strftime("%Y-%m-%d %H_%M_%S")
13     filename = test_dir + '/' + now + 'result.html'
14     fp = open(filename, 'wb')
15     runner = HTMLTestRunner(stream=fp,title='集成測試報告demo',description= '用例執行情況:')
16     runner.run(discover)
17     fp.close()

 執行后,結果如下:

PS:請忽略報錯,這里主要是舉個例子,具體的實踐請以實際業務場景進行調整。。。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM