unittest詳解(一) unittest初識
阿新 • • 發佈:2018-06-05
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 importwebdriver from time import sleep # 驅動文件路徑 driverfile_path = r‘D:\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初識