1. 程式人生 > >(selenium 六)unittest通過測試套件組織用例 (2)

(selenium 六)unittest通過測試套件組織用例 (2)

上一邊文章中,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來遍歷
#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))

解決方案:把alltestnames 陣列放到一個單獨的檔案中,建立allcase_list.py 檔案,與all_tests.py 保持同級目錄

新增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' :表示用例檔名的匹配原則。星號“*”表示任意多個字元。