1. 程式人生 > >unittest詳解(一) unittest初識

unittest詳解(一) unittest初識

finished admin drivers 之前 from port program 學習 中產

unittest是python內置的一個單元測試框架,在學習怎麽使用它之前,我們先來了解它的一些概念和原理。

  • Test Case:測試用例,一個TestCase的實例就是一個測試用例。什麽是測試用例呢?就是一個完整的測試流程,包括測試前準備環境的搭建(setUp),執行測試代碼(run),以及測試後環境的還原(tearDown)。單元測試(unit test)的本質也就在這裏,一個測試用例是一個完整的測試單元,通過運行這個測試單元,可以對某一個問題進行驗證。
  • Test Suite:測試套件,就是多個測試用例集合在一起
  • Test Runner:測試執行,用來執行測試用例,其中的run(test)會執行TestSuite/TestCase
  • Test Fixture:對一個測試用例環境的搭建和銷毀,是一個fixture,通過覆蓋TestCase的setUp()和tearDown()方法來實現。這個有什麽用呢?比如說在這個測試用例中需要訪問數據庫,那麽可以在setUp()中建立數據庫連接以及進行一些初始化,在tearDown()中清除在數據庫中產生的數據,然後關閉連接。註意tearDown的過程很重要,要為以後的TestCase留下一個幹凈的環境。

了解了概念後,我們來看一個登陸的測試腳本。

代碼:

# coding = utf-8
import unittest
import warnings
from selenium import
webdriver from time import sleep # 驅動文件路徑 driverfile_path = rD:\coship\Test_Framework\drivers\IEDriverServer.exe class CmsLoginTest(unittest.TestCase): def setUp(self): # 這行代碼的作用是忽略一些告警打印 warnings.simplefilter("ignore", ResourceWarning) print("test start!") self.driver
= webdriver.Ie(executable_path=driverfile_path) self.driver.get("http://172.21.13.83:28080/") def tearDown(self): self.driver.quit() print("test end!") def test_login1(self): ‘‘‘用戶名、密碼為空‘‘‘ self.driver.find_element_by_css_selector("#imageField").click() error_message1 = self.driver.find_element_by_css_selector("[for=‘loginName‘]").text error_message2 = self.driver.find_element_by_css_selector("[for=‘textfield‘]").text self.assertEqual(error_message1, 用戶名不能為空) self.assertEqual(error_message2, 密碼不能為空) print("用例test_login1執行結束") def test_login3(self): ‘‘‘用戶名、密碼正確‘‘‘ self.driver.find_element_by_css_selector("[name=‘admin.loginName‘]").send_keys("autotest") self.driver.find_element_by_css_selector("[name=‘admin.password‘]").send_keys("111111") self.driver.find_element_by_css_selector("#imageField").click() sleep(1) self.driver.switch_to.frame("topFrame") username = self.driver.find_element_by_css_selector("#nav_top>ul>li>a").text self.assertEqual(username,"autotest") print("用例test_login3執行結束") def test_login2(self): ‘‘‘用戶名正確,密碼錯誤‘‘‘ self.driver.find_element_by_css_selector("[name=‘admin.loginName‘]").send_keys("autotest") self.driver.find_element_by_css_selector("[name=‘admin.password‘]").send_keys("123456") self.driver.find_element_by_css_selector("#imageField").click() error_message = self.driver.find_element_by_css_selector(".errorMessage").text self.assertEqual(error_message, 密碼錯誤,請重新輸入!) print("用例test_login2執行結束") def login4(self): ‘‘‘用戶名不存在‘‘‘ self.driver.find_element_by_css_selector("[name=‘admin.loginName‘]").send_keys("test007") self.driver.find_element_by_css_selector("[name=‘admin.password‘]").send_keys("123456") self.driver.find_element_by_css_selector("#imageField").click() error_message = self.driver.find_element_by_css_selector(".errorMessage").text self.assertEqual(error_message, 用戶不存在!) print("用例login4執行結束") if __name__ == "__main__": unittest.main()

執行結果:

"C:\Program Files\Python36\python.exe" D:/Git/Test_Framework/utils/1.py
test start!
用例test_login1執行結束
.test end!
test start!
用例test_login2執行結束
.test end!
test start!
用例test_login3執行結束
test end!
.
----------------------------------------------------------------------
Ran 3 tests in 34.044s

OK

Process finished with exit code 0

從腳本和運行結果我們可以得到以下結論:

  • 要使用unittest這個測試框架時,需要先導入unittest
  • 定義一個測試類時,要繼承unittest.TestCase這個類
  • setUp()是測試用例執行前的環境準備,tearDown()是測試用例執行結束後的環境恢復,每個測試用例都會執行一次setUp()和tearDown()
  • 測試用例必須以test開頭,否則不會被執行。
  • 測試用例執行順序是根據用例名稱順序來執行的

unittest詳解(一) unittest初識