一、單元測試框架說明
單元測試是指在編程中,針對程序模塊的最小單元(類中的方法)進行正確性檢驗的測試工作。python+selenium自動化測試中通常使用unittest或者pytest作為單元測試框架。而java+selenium自動化測試中通常使用junit或者testng作為單元測試框架。
二、unittest框架的4個重要概念。
(1) test fixture(測試固件):一個測試固件代表一個或多個測試執行前的准備工作和測試結束后的清理工作,例如:創建數據庫連接、關閉數據庫連接、啟動服務進程、測試環境的清理等。
(2) test suite(測試套件):一個測試套件是一組測試用例的集合(也可以是一組測試套件的集合)。它的作用是將測試用例集合到一起一次性執行集合中所有的測試用例。
(3) test case(測試用例):一個測試用例是一個完整的測試流程,是最小的測試單元,通常會繼承unittest.TestCase類。
(4) test runner(測試運行器):一個測試運行器執行設定的測試用例並將測試結果反饋給用戶兩部分功能組成。
三、unittest框架中的特殊方法以及特殊方法執行順序。
(1)自動化中要求所有的測試用例都繼承unittest.TestCase基類。TestCase基類中定義的幾個特殊的方法如下:
setUp() 每個測試用例運行前執行,主要作用是測用例前的初始化工作。
tearDown() 每個測試用例運行后執行,主要作用是測試用例后的清理工作。
setUpClass() 所有測試用例運行前運行,必須使用@classmethod裝飾器裝飾,在setUp()方法前執行,整個測試過程只執行一次,主要作用是單元測試前的准備工作。
tearDownClass() 所有測試用例運行后運行,必須使用@classmethod裝飾器裝飾,在tearDown()方法后執行,整個測試過程只執行一次,主要作用是單元測試后的清理工作。
(2) 執行順序如下:
setUpClass()
#測試用例一
setUp()
test_01()
tearDown()
#測試用例二
setUp()
test_02()
tearDown()
tearDownClass()
四測試用例的命名。
最簡單的測試用例方法命令只需要覆蓋runTest()方法即可。而更可取的是測試用例以"test"開頭命名。
五、unittest加載並執行測試用例方法
在unittest單元測試框架中,提供兩種單元測試加載執行測試用例的方法:
(1)直接通過unittest.main()方法加載並執行當前py文件中的測試用例。這是一種最簡單的加載方法,所有的測試方法執行順序都是按照方法名字符串所表示的ASCII碼升序排序(數字與字母的順序為:0-9,A-Z,a-z)。如:
(2)將所有的測試用例添加到測試套件集合中,然后一次性加載所有的測試對象。此方法經測試執行順序是按照測試用例的加載順序執行,但是特別要注意執行方式。如果是點擊右鍵的方式運行那么總是以unittest方式執行(這種方式執行是以ASCII升序執行),而想要從main方法執行,則需要在pycharm的右上角修改Pycharm的運行方法。並按運行按鈕從main方法運行。(這種方式執行是按照測試用例加載順序執行)
測試用例添加到測試套件的方式:
注意:以上兩種方式都可以執行測試套件。
#其中:TestManage是類名,test_add是用例名,verbosity參數說明如下:
#verbosity參數可以控制輸出的錯誤報告的詳細程度,只有3個取值:
#<=0(quiet): 只顯示執行的用例的總數和全局的執行結果。輸出結果中不提示執行成功的用例數。
#1(default): 默認值,顯示執行的用例的總數和全局的執行結果,並對每個用例的執行結果(成功T或失敗F)有個標注。
#>=2(verbose): 顯示執行的用例的總數和全局的執行結果,並輸出每個用例的詳細的執行結果。
執行后測試結果說明:
.:一個點表示一個測試用例執行成功。
F:一個F表示一個測試用例執行失敗。
E:一個E表示測試用例中本身有異常。
六、按照特定順序執行測試用例
通過把測試用例按順序加載到測試套件中執行。
通過修改函數名的方式來讓測試用例按特定順序執行。如:
def test1_add(self):
def test2_delete(self):
def test3_update(self):
def test4_select(self):
注意:從后期自動化項目批量執行多個py文件的所有測試用例的角度出發第一種方式太過於繁瑣,建議使用第二種方式。
七、忽略測試用例。
在批量執行測試用例時,有時會遇到某些測試用例不需要執行,但是又想保留測試代碼。除了可以注釋掉代碼外還可以使用unittest框架提供的更簡便的注解方法來忽略那些暫時不需要執行的測試用例。忽略測試用例分為無條件忽略和有條件忽略。
另外還有一個:@expected failure #代表如果test失敗了不計入失敗的case數目
八、unittest單元測試框架中常見的斷言。
assertEqual(a, b) a == b 最常用
assertNotEqual(a,b) a != b
assertTrue(x) x is True 最常用
assertFalse(x) x is False
assertIs(a, b) a is b
assertIsNot(a, b) a is not b
assertIsNone(x) x is None
assertIsNotNone(x) x is not None
assertIn(a, b) a in b 最常用
assertNotIn(a, b) a not in b
assertIsInstance(a,b) isinstance(a, b)
assertNotIsInstance(a,b) not isinstance(a, b)
assertGreater(a,b) a > b
assertGreaterEqual(a,b) a >= b
assertLess(a, b) a < b
assertLessEqual(a,b) a <= b
其中assertEqual(a,b),asserTrue(),assertIn為常用斷言方法。
assertEqual(a,b)用於判斷兩個字符串是否相等。
assertTrue(x)用於斷言一個字符串是否在頁面資源。
assertIn(a,b)用於判斷一個jsp或php頁面在當前頁面地址中。
九、結尾
如果你覺得此文對你有幫助,如果你對此文有任何疑問,如果你對軟件測試、接口測試、自動化測試、面試經驗交流感興趣歡迎加入:
軟件測試技術群:695458161,群里發放的免費資料都是筆者十多年測試生涯的精華。還有同行大神一起交流技術哦。
作者:來自公眾號:軟測之家
原創不易,歡迎點贊、評論、轉載禮貌三連,轉載請保留此段聲明。