unittest是一個(gè)單元測(cè)試框架,是Python編程的單元測(cè)試框架。有時(shí)候,也做叫做“PyUnit”,是Junit的Python語(yǔ)言版本。這里了解下,Junit是Java語(yǔ)言的單元測(cè)試框架,Java還有一個(gè)很好用的單元測(cè)試框架叫TestNG,本系列只學(xué)習(xí)Python,所以只需要unittest是Python里的一個(gè)單元測(cè)試框架可以了。
unittest支持測(cè)試自動(dòng)化,共享測(cè)試用例中的初始化和關(guān)閉退出代碼,在unittest中小單元是test,也是一個(gè)測(cè)試用例。要了解unittest單元測(cè)試框架,先來(lái)了解以下幾個(gè)重要的概念。
測(cè)試固件(test fixture)
一個(gè)測(cè)試固件包括兩部分,執(zhí)行測(cè)試代碼之前的準(zhǔn)備部分和測(cè)試結(jié)束之后的清掃代碼。這兩部分一般用函數(shù)setUp()和tearDown()表示。這里舉例以下,例如要測(cè)試百度搜索selenium這個(gè)場(chǎng)景,我們的測(cè)試固件可以這樣寫(xiě),setUp()里寫(xiě)打開(kāi)瀏覽器,瀏覽器大化,和打開(kāi)百度首頁(yè)等腳本代碼;在tearDown()里寫(xiě)結(jié)束搜索后,退出并關(guān)閉瀏覽器的代碼。
測(cè)試用例(test case)
unittest中管理的小單元是測(cè)試用例,一個(gè)測(cè)試用例,包括測(cè)試固件,和具體測(cè)試業(yè)務(wù)的函數(shù)或者方法。一個(gè)測(cè)試用例中,測(cè)試固件可以不寫(xiě),但是至少有一個(gè)已test開(kāi)頭的函數(shù)。unittest會(huì)自動(dòng)化識(shí)別test開(kāi)頭的函數(shù)是測(cè)試代碼,如果你寫(xiě)的函數(shù)不是test開(kāi)頭,unittest是不會(huì)執(zhí)行這個(gè)函數(shù)里面的腳本的,這個(gè)千萬(wàn)要記住,所有的測(cè)試函數(shù)都要test開(kāi)頭,記住是小寫(xiě)的哦。
測(cè)試套件 (test suite)
很簡(jiǎn)單,是很多測(cè)試用例的集合,叫測(cè)試套件,一個(gè)測(cè)試套件可以隨意管理多個(gè)測(cè)試用例。如果測(cè)試用例比作單個(gè)學(xué)生,測(cè)試套件是好像是班級(jí)的概念。
測(cè)試執(zhí)行器 (test runner)
test runner是一個(gè)用來(lái)執(zhí)行加載測(cè)試用例,并執(zhí)行用例,且提供測(cè)試輸出的一個(gè)組建。test runner可以加載test case或者test suite進(jìn)行執(zhí)行測(cè)試任務(wù)。
我們舉例來(lái),練習(xí)一下test fixture和test case的使用,學(xué)習(xí)unittest的簡(jiǎn)單用法:
1. 新建一個(gè)testbaidu.py的文件
2. 導(dǎo)入unittest模塊
3. 當(dāng)前測(cè)試類(lèi)繼承unittest.TestCase,相當(dāng)于當(dāng)前利用unittest創(chuàng)建了一個(gè)test case,這個(gè)test case是能夠被unittest直接識(shí)別。
4. 寫(xiě)setUP(),主要是打開(kāi)瀏覽器和打開(kāi)站點(diǎn)
5. 寫(xiě)一個(gè)test_search()用例寫(xiě)搜索的代碼
6. 寫(xiě)tearDown(),主要是瀏覽器退出操作
相關(guān)腳本代碼如下:
[python] view plain copy
# coding=utf-8
import time
import unittest
from selenium import webdriver
class BaiduSearch(unittest.TestCase):
def setUp(self):
"""
測(cè)試固件的setUp()的代碼,主要是測(cè)試的前提準(zhǔn)備工作
:return:
"""
self.driver = webdriver.Chrome()
self.driver.maximize_window()
self.driver.implicitly_wait(8)
self.driver.get("https://www.baidu.com")
def tearDown(self):
"""
測(cè)試結(jié)束后的操作,這里基本上都是關(guān)閉瀏覽器
:return:
"""
self.driver.quit()
def test_baidu_search(self):
"""
這里一定要test開(kāi)頭,把測(cè)試邏輯代碼封裝到一個(gè)test開(kāi)頭的方法里。
:return:
"""
self.driver.find_element_by_id('kw').send_keys('selenium')
time.sleep(1)
try:
assert 'selenium' in self.driver.title
print ('Test Pass.')
except Exception as e:
print ('Test Fail.', format(e))
if __name__ == '__main__':
unittest.main()
解釋?zhuān)?br />
后結(jié)尾處的unittest.main(),添加這個(gè)是支持在cmd,里面,cd到這個(gè)腳本文件所在的目錄,然后Python 腳本名.py執(zhí)行,如果不添加這一段,是無(wú)法執(zhí)行cmd里面運(yùn)行腳本的,在PyCharm中,不添加后一段,也可以通過(guò),右鍵 Run "unittest xxx",來(lái)達(dá)到執(zhí)行效果。