(selenium 六)unittest通過測試套件組織用例 (2)
阿新 • • 發佈:2019-01-05
上一邊文章中,all_tests.py檔案與測試用例都位於同一檔案見。下面通過在測試用例資料夾下新增__init__.py形成包檔案,然後再all_test.py中新增PATH路徑匯入包即可。具體操作如下:
1、在test_case資料夾下新建__init__.py檔案,
import baidu
import youdao
2、將all_test.py移至test_case資料夾所在目錄,
#coding = utf-8 import unittest #把test_case 目錄新增到path 下,這裡用的相對路徑 import sys sys.path.append(r"F:\技術提高學習\自動化框架\web自動化\例項\例項6.1_unittest通過測試套件組織用例\test_case") #from test_case import baidu, youdao 若__init.py內容為空,需手動匯入模組 from test_case import * import HTMLTestRunner import time testunit = unittest.TestSuite() #將測試用例加入到測試容器(套件)中 testunit.addTest(unittest.makeSuite(baidu.Baidu)) #<span style="color:#FF0000;">弊端:隨著用例的增加,測試套件可能要羅列幾百上千條用例,不便於管理</span> testunit.addTest(unittest.makeSuite(youdao.Youdao))
解決方案:用例檔案組裝一陣列,用for來遍歷
解決方案:把alltestnames 陣列放到一個單獨的檔案中,建立allcase_list.py 檔案,與all_tests.py 保持同級目錄#coding = utf-8 import unittest import sys sys.path.append(r"F:\技術提高學習\自動化框架\web自動化\例項\例項6.1_unittest通過測試套件組織用例\test_case") from test_case import * import HTMLTestRunner import time #將用例組裝陣列 alltestnames = [baidu.Baidu, youdao.Youdao] #<span style="color:#33CC00;"><span style="color:#3333FF;">弊端:每次新增或刪除用例時,都要改動該檔案</span></span> #建立測試套件 testunit = unittest.TestSuite() for test in alltestnames: testunit.addTest(unittest.makeSuite(test))
新增allcase_list.py
#coding = utf-8 import sys sys.path.append(r"F:\技術提高學習\自動化框架\web自動化\例項\例項6.1_unittest通過測試套件組織用例\test_case") from test_case import * #用例檔案列表 def caselist(): alltestnames = [ baidu.Baidu, youdao.Youdao ] print('success read case list!') return alltestnames
all_tests.py做相應修改
import allcase_list
#獲取陣列方法
alltestnames = allcase_list.caselist()
問題:如新建一條用例aaa.py,仍需要改動兩個檔案__init__.py、allcase_list.py
需要在用例當前目錄下開啟__init__.py 檔案,新增“import aaa”;
還需要開啟allcase_list.py 檔案,在alltestnames 陣列中新增aaa.calss_name 。然後,用例才能新增到測試套件中執行。
原因:引入了HTMLTestRunner測試報告,需要用runner.run(testunit)(否則可以直接用unittest.main()來執行)
解決方案:TestLoader 下的discover()方法來實現,以通過檔案的名稱來判斷是否為測試用例檔案,如為用例檔案則自動新增到測試套件中
1、刪除__init__.py、allcase_list.py檔案
2、重新命名待測測試用例,命名規則符合discover函式規則
3、修改all_tests.py
#coding = utf-8
import unittest
import HTMLTestRunner
import time, os
listcasedir = r"F:\技術提高學習\自動化框架\web自動化\例項\例項6.2_unittest通過testloader載入用例\test_case"
def creatsuitel():
testunit = unittest.TestSuite()
#discover方法定義
discover = unittest.defaultTestLoader.discover(listcasedir, pattern ='start*.py', top_level_dir = None)
#discover 方法篩選出來的用例,迴圈新增到測試套件中
for test_suite in discover:
for test_case in test_suite:
testunit.addTests(test_case)
print(testunit)
return testunit
alltestnames = creatsuitel()
now = time.strftime("%Y-%m-%M-%H_%M_%S",time.localtime(time.time()))
filename = r"F:\技術提高學習\自動化框架\web自動化\例項\例項6.2_unittest通過testloader載入用例\{0}result.html".format(now)
print(filename)
fp = open(filename, 'wb')
#執行測試用例
runner = HTMLTestRunner.HTMLTestRunner(stream = fp, title = '百度搜索測試報告', description = '測試執行情況')
runner.run(alltestnames)
語法點:
TestLoader:測試用例載入器,其包括多個載入測試用例的方法。返回一個測試套件。
discover(start_dir,pattern='test*.py',top_level_dir=None)
找到指定目錄下所有測試模組,並可遞迴查到子目錄下的測試模組,只有匹配到檔名才能被載入。
如果啟動的不是頂層目錄,那麼頂層目錄必須要單獨指定。
start_dir :要測試的模組名或測試用例目錄。
pattern='test*.py' :表示用例檔名的匹配原則。星號“*”表示任意多個字元。