簡介
我們在寫用例的時候,單個腳本的用例好執(zhí)行,那么多個腳本的時候,如何批量執(zhí)行呢?這時候就需要用到 unittest 里面的 discover 方法來加載用例了。加載用例后,用 unittest 里面的 TextTestRunner 這里類的 run 方法去一次執(zhí)行多個腳
本的用例。那么前邊介紹那么多都是半道開始,半道出家,這篇就帶大家從頭到尾,一步一步給小伙伴們詳細(xì)介紹一下。
新建測試項目
1、pycharm 左上角 File>New Projetc>Pure Python,在 location 位置命名一個測試工程的名稱:honggetest
2、然后點(diǎn)擊“Create”
3、選中剛才新建的工程右鍵>New>Python Package>新建一個 case 文件夾
4、重復(fù)第 3 步的操作,新建一個 case 的文件夾,在里面添加一個 baidu 和一個 blog 的文件夾,里面分別有兩個用例的腳本,如下圖所示。test_01,test_02,test_03,test_04 是我們寫用例的腳本
5、test_01創(chuàng)建完后,打開腳本,寫入用例,其他的可以復(fù)制即可
6、參考代碼
1# coding:utf-8 2import unittest 3import time 4 5class Test(unittest.TestCase): 6? ? def setUp(self): 7print ("start!") 8? ? def tearDown(self): 9time.sleep(1)10print ("end!")11? ? def test01(self):12print ("執(zhí)行測試用例 01")13? ? def test02(self):14print ("執(zhí)行測試用例 02")15? ? def test03(self):16print ("執(zhí)行測試用例 03")1718if__name__ =="__main__":19unittest.main()
7、在 honggetest 這個項目下面創(chuàng)建一個腳本 run_all_case.py,接下來用這個腳本去批量執(zhí)行所有的用例。
discover 加載測試用例
1、discover 方法里面有三個參數(shù):
-case_dir:這個是待執(zhí)行用例的目錄。
-pattern:這個是匹配腳本名稱的規(guī)則,test*.py 意思是匹配 test 開頭的所有腳本。
-top_level_dir:這個是頂層目錄的名稱,一般默認(rèn)等于 None 就行了。
2、discover 加載到的用例是一個 list 集合,需要重新寫入到一個 list 對象 testcase 里,這樣就可以用 unittest 里面的 TextTestRunner 這里類的 run 方法去執(zhí)行。
3、運(yùn)行后結(jié)果入下,就是加載到的所有測試用例了:
參考代碼
1# coding=utf-8 2#1.先設(shè)置編碼,utf-8可支持中英文,如上,一般放在第一行 3 4#2.注釋:包括記錄創(chuàng)建時間,創(chuàng)建人,項目名稱。 5''' 6Created on2019-4-29 7@author: 北京-宏哥 8Project:學(xué)習(xí)和使用discover批量執(zhí)行測試用例 9'''10#3.導(dǎo)入unittest模塊11import unittest12#4.編寫測試用例和斷言13def all_case():14? ? # 待執(zhí)行用例的目錄15case_dir ="C:\\Users\\DELL\\PycharmProjects\\honggetest\\case"16testcase = unittest.TestSuite()17discover = unittest.defaultTestLoader.discover(case_dir,18pattern="test*.py",19top_level_dir=None)20? ? #discover方法篩選出用例,循環(huán)添加到測試套件中21fortest_suitin discover:22fortest_casein test_suit:23? ? ? ? ? ? #添加用力到testcase24? ? ? ? ? ? testcase.addTests(test_case)25? ? print(testcase)26return testcase27if__name__ =="__main__":28? ? # 返回實(shí)例29runner = unittest.TextTestRunner()30? ? # run 所有用例31runner.run(all_case())
run 測試用例
1、為了更方便的理解,可以把上面 discover 加載用例的方法封裝下,寫成一個函數(shù)
2、先返回 TextTestRunner()類的實(shí)例
3、調(diào)用 run 方法去執(zhí)行 all_case()這個函數(shù)
參考代碼
# coding=utf-8#1.先設(shè)置編碼,utf-8可支持中英文,如上,一般放在第一行
#2.注釋:包括記錄創(chuàng)建時間,創(chuàng)建人,項目名稱。'''Created on2019-4-29@author: 北京-宏哥
Project:學(xué)習(xí)和使用discover批量執(zhí)行測試用例'''#3.導(dǎo)入unittest模塊
import unittest
#4.編寫測試用例和斷言
def all_case():
? ? # 待執(zhí)行用例的目錄
? ? case_dir ="C:\\Users\\DELL\\PycharmProjects\\honggetest\\case"? ? testcase = unittest.TestSuite()
? ? discover = unittest.defaultTestLoader.discover(case_dir,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? pattern="test*.py",
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? top_level_dir=None)
? ? testcase.addTests(discover)? # 直接加載 discover? ? 可以兼容python2和3
? ? print(testcase)
? ? return testcaseif__name__ =="__main__":
? ? # 返回實(shí)例
? ? runner = unittest.TextTestRunner()
? ? # run 所有用例
? ? runner.run(all_case())
小結(jié)
1、unittest模塊中的TestLoader類有一個discover方法(Python2.7之后)discover(start_dir,pattern='test*.py',top_level_dir=None)遞歸查找指定目錄(start_dir)及其子目錄下的全部測試模塊,將這些測試模塊放入一個TestSuite 對象并返
回。只有匹配pattern的測試文件才會被加載到TestSuite中。如果一個測試文件的名稱符合pattern,將檢查該文件是否包含 load_tests() 函數(shù),如果 load_tests() 函數(shù)存在,則由該函數(shù)負(fù)責(zé)加載本文件中的測試用例。如果不存在,就會執(zhí)行
loadTestsFromModule(),查找該文件中派生自TestCase 的類包含的 test 開頭的方法。
2、用例路徑另一種寫法
1case_dir = os.path.join(os.getcwd(),"case")