unittest詳解(一) unittest初識


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 = 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開頭,否則不會被執行。
  • 測試用例執行順序是根據用例名稱順序來執行的

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM