unittest 介紹了4 個重要的概念: test case, test suite, test runner,test fixture。css
一、testcase: 一個TestCase 的實例就是一個測試用例, 就是一個完整的測試流程,包括測試前準備環境的搭建(setUp),實現測試過程的代碼(run),以及測試後環境的還原(tearDown)。元測試(unittest)的本質也就在這裏,一個測試用例是一個完整的測試單元,經過運行這個測試單元,能夠對某一個功能進行驗證。web
setUp 用於設置初始化工做,在每個測試用例前先被執行,它與tearDown方法相呼應,後者在每個測試用例執行後被執行。這裏的初始化工做定義了瀏覽器啓動和基礎URL 地址。數組
def setUp(self): self.driver = webdriver.Chrome() self.driver.implicitly_wait(30) self.base_url = "https://172.1.1.1/" self.verificationErrors = [] self.accept_next_alert = True
tearDown 方法在每一個測試方法執行後調用,這個方法用於完成測試用例執行後的清理工做,如退出瀏覽器、關閉驅動,恢復用例執行狀態等。在setUp()方法中定義了verificationErrors 爲空數組,這裏經過assertEqual()比較其是否爲空,若是爲空說明用例執行的過程過程當中沒有出現異常,不然將拋出AssertionError 異常:瀏覽器
def tearDown(self): self.driver.quit() self.assertEqual([], self.verificationErrors)
二、testsuite: 對一個功能的驗證每每是須要多測試用例的,能夠把多的測試用例集合在一塊兒執行,這就產生了測試套件TestSuite 的概念,它用來組裝單個測試用例,並且TestSuite 也能夠嵌套TestSuite。框架
testSuite()能夠被看做一個容器(測試套件),經過addTest 方法咱們可羅列具體所要執行的測試用例。若是使用unittest.main() 的話默認會執行全部以test 開頭的測試用例。測試
三、testrunner: TextTestRunner 是來執行測試用例的,其中的run(test)用來執行TestSuite/TestCase。測試的結果會保存到TextTestResult 實例中,包括運行了多少測試用例,成功了多少,失敗了多少等信息。ui
四、testfixture: 對一個測試用例環境的搭建和銷燬,是一個fixture,經過覆蓋TestCase 的setUp()和tearDown()方法來實現. url
瞭解unittest框架以後,練習一個登陸的例子,代碼以下:spa
# coding=utf-8 from selenium import webdriver import unittest class task_a(unittest.TestCase): def setUp(self): #每一個測試用例以前執行 self.driver=webdriver.Chrome() self.url="https://172.1.1.1" self.verificationErrors=[] self.accept_next_alter=True def tearDown(self): #每一個測試用例以後執行 self.driver.quit() self.assertEqual([],self.verificationErrors) def test_1(self): u"測試用例1" driver=self.driver driver.get(self.url) driver.maximize_window() username='user1' driver.find_element_by_css_selector("input.login-form").send_keys(username) #定位到用戶名輸入框 driver.find_element_by_css_selector("input.passwd").send_keys('123456') #定位到密碼輸入框 driver.find_element_by_css_selector("input.btn.btn-default").click() #點擊登陸按鈕 info = driver.find_element_by_css_selector("#userMenu > div.user-id").text self.assertEqual(username, info) print("login用例執行完成") if __name__=='__main__': unittest.main()