當前位置: 妍妍網 > 碼農

Python系列:淺聊uinttest框架

2024-05-10碼農

哈嘍,大家好,我是了不起!

由於軟體測試行業目前已經越來越卷,現在很多公司都會要求我們測試人員掌握編寫UI自動化或者是介面自動化,在編寫自動化時我們就需要使用到框架,今天我們就來了解一下python內建的框架:unittest框架

在學習之前我們先了解一下什麽是unittest的定義,unittest框架是什麽呢?

UnitTest是Python內建的一個單元測試框架,用它來做單元測試;內建的框架:不需要單外安裝,只要安裝了Python ,就可以使用;能夠組織多個用例去執行,內部提供了豐富的斷言,可以生成自動化測試報告

接下來我們可以先舉一個簡單的例子說明一下,在使用錢我們需要先匯入unittest模組

#匯入unittest模組
import unittest

接下來就是寫一個簡單的unittest執行程式碼

classfunc(unittest.TestCase):
deftest_1(self):
print("測試方法1")
deftest_2(self):
print("測試方法2")

if __name__ == '__main__':
func()

在使用unittest框架的時候,我們需要讓物件繼承TestCase,並且每一個函式名都要以test開頭,這個是unittest框架裏面的一些使用規則

可以看到運行程式後在控制台中打印了很多內容,我們來一次來說明一下這些內容都是什麽意思

第一行:說明了我們開始運行程式的時間 第二行:首先是說明了我們使用的是python內部的uinttest方式去執行的程式,並將當前執行的資料夾和檔路徑也一起顯示出來 第三行:就是將我們執行test_1和test_2兩個函式結果打印了出來 第四行:顯示了我們本次程式執行的總耗時和是否成功,如果函式全部執行成功則顯示OK,如果有函式執行報錯則會顯示FAILED,失敗場景見下方範例

classfunc(unittest.TestCase):
deftest_1(self):
print("測試方法1")
deftest_2(self):
result=2/0
print(result)
deftest_3(self):
print("測試方法3")
if __name__ == '__main__':
func()

可以看到我們故意讓test_2函式執行報錯,並且在執行結果中將對應函式執行結果顯示為FAILED,並顯示對應的錯誤資訊。並且可以發現雖然test_2執行報錯了,但是我們新增的test_3函式依舊是正常執行,這裏就是uinttest的強大支出,多個函式之間互不影響,一個函式報錯後是不會影響到後面函式的執行的。

在了解如何編寫一個uinttest簡單物件後,我們接著了解一下在unittest框架常用的一個功能

1.setUp和tearDown

這兩個內建方法我們會經常使用到,setup標識在每個函式執行前都會執行一次,而teardown則是在每個函式執行後都會執行一次

classfunc(unittest.TestCase):
defsetUp(cls):
print("我會在每個函式執行前都執行一次")
deftest_1(self):
print("測試方法1")
deftest_2(self):
print("測試方法2")
deftearDown(cls):
print("我會在每個函式執行後都執行一次")

if __name__ == '__main__':
func()



執行後結果如下

可以看到不管我們寫了多少個函式,在執行後都會依次在每個函式執行前後都會跟著執行一次

2.setUp class和tearDown class

setUp class和tearDown class方法都是屬於類方法,在執行測試類之前需要執行的方法是setUp class,在執行完測試類之後執行的方法是tearDown class,在使用這兩個方法需要註意的是,裝飾符"@ classmethod"和傳入參數"cls"都是不可缺少的

classfunc(unittest.TestCase):
@ classmethod
defsetUp class(cls) -> None:
print("在所有函式執行開始之前執行一次")
@ classmethod
deftearDown class(cls) -> None:
print("在所有函式執行結束之後執行一次")
deftest_1(self):
print("測試方法1")
deftest_2(self):
print("測試方法2")

if __name__ == '__main__':
func()



執行結果如下 這兩個方法也是使用評率較高的,比如在進行介面自動化時,通常會在setUp class中進行登入獲取token之類的;而setDown class多用於UI自動化中關閉視窗或者斷開資料庫連線等操作

3.skip跳過執行

使用unittest.skip可以選擇函式進行跳過不執行

classfunc(unittest.TestCase):
@unittest.skip
deftest_1(self):
print("測試方法1")
deftest_2(self):
print("測試方法2")
if __name__ == '__main__':
func()

執行結果程式還是執行了兩個函式,只是我們在test_1上面添加了裝飾符「@unittest.skip」後就直接跳過沒有執行了,執行結果中會在對應函式位置顯示一個Skipped。同時可以在使用使用skip()進行傳參備註

classfunc(unittest.TestCase):
@unittest.skip("test_1函式本次不執行")
deftest_1(self):
print("測試方法1")
deftest_2(self):
print("測試方法2")
if __name__ == '__main__':
func()

在這裏插入圖片描述

4.斷言

unittest框架中為我們封裝了很多常用的斷言方法,比如我們經常使用的判斷數據相等的斷言,就直接使用內建的assertEqual方法

classfunc(unittest.TestCase):
deftest_1(self):
result=2
self.assertEqual(2,result,"判斷數位2和result變量值是否相等")

if __name__ == '__main__':
func()

斷言結果一致就直接顯示一個OK,表明本次斷言透過,如果是斷言失敗則會顯示FAILED,並將輸出斷言結果

classfunc(unittest.TestCase):
deftest_1(self):
result=2
self.assertEqual(3,result,"判斷數位2和result變量值是否相等")

if __name__ == '__main__':
func()

可以看到它自動將我們斷言的預期結果和實際結果都打印了出來,除了斷言結果是否相同之外,還有很多其他的斷言方法,有興趣的小夥伴可以一一去嘗試

以上是我們剛開始學習unittest框架時經常會用到的一些功能方法,如果還想繼續深入學習其他方法或者學習如何生成測試報告可以留言評論。

戳藍字 Python都知道 關註 我哦!

PS Python都知道技術交流群(技術交流、摸魚、白嫖課程為主)又不定時開放了,感興趣的朋友,可以在下方公號內回復: 666 ,即可進入。

老規矩 ,道友們還記得麽, 右下角的 「在看」 點一下 如果感覺文章內容不錯的話,記得分享朋友圈讓更多的人知道!