1. 程式人生 > >Python+Selenium框架設計篇之2-簡單介紹unittest單元測試框架

Python+Selenium框架設計篇之2-簡單介紹unittest單元測試框架

       前面文章已經簡單介紹了一些關於自動化測試框架的介紹,知道了什麼是自動化測試框架,主要有哪些特點,基本組成部分等。在繼續介紹框架設計之前,我們先來學習一個工具,叫unittest。
       unittest是一個單元測試框架,是Python程式設計的單元測試框架。有時候,也做叫做“PyUnit”,是Junit的Python語言版本。這裡瞭解下,Junit是Java語言的單元測試框架,Java還有一個很好用的單元測試框架叫TestNG,本系列只學習Python,所以只需要unittest是Python裡的一個單元測試框架就可以了。
       unittest支援測試自動化,共享測試用例中的初始化和關閉退出程式碼,在unittest中最小單元是test,也就是一個測試用例。要了解unittest單元測試框架,先來了解以下幾個重要的概念。
測試韌體
(test fixture)
      一個測試韌體包括兩部分,執行測試程式碼之前的準備部分和測試結束之後的清掃程式碼。這兩部分一般用函式setUp()和tearDown()表示。這裡舉例以下,例如要測試百度搜索selenium這個場景,我們的測試韌體可以這樣寫,setUp()裡寫開啟瀏覽器,瀏覽器最大化,和開啟百度首頁等指令碼程式碼;在tearDown()裡寫結束搜尋後,退出並關閉瀏覽器的程式碼。
測試用例(test case)
       unittest中管理的最小單元是測試用例,一個測試用例,包括測試韌體,和具體測試業務的函式或者方法。一個測試用例中,測試韌體可以不寫,但是至少有一個已test開頭的函式。unittest會自動化識別test開頭的函式是測試程式碼,如果你寫的函式不是test開頭,unittest是不會執行這個函式裡面的指令碼的,這個千萬要記住,所有的測試函式都要test開頭,記住是小寫的哦。
測試套件
(test suite)
       很簡單,就是很多測試用例的集合,叫測試套件,一個測試套件可以隨意管理多個測試用例。如果測試用例比作單個學生,測試套件就是好像是班級的概念。
測試執行器 (test runner)
       test runner是一個用來執行載入測試用例,並執行用例,且提供測試輸出的一個組建。test runner可以載入test case或者test suite進行執行測試任務。

我們舉例來,練習一下test fixture和test case的使用,學習unittest的簡單用法:
1. 新建一個testbaidu.py的檔案
2. 匯入unittest模組
3. 當前測試類繼承unittest.TestCase,相當於當前利用unittest建立了一個test case,這個test case是能夠被unittest直接識別。
4. 寫setUP(),主要是開啟瀏覽器和開啟站點
5. 寫一個test_search()用例寫搜尋的程式碼
6. 寫tearDown(),主要是瀏覽器退出操作

相關指令碼程式碼如下:

# coding=utf-8
import time
import unittest
from selenium import webdriver


class BaiduSearch(unittest.TestCase):

    def setUp(self):
        """
        測試韌體的setUp()的程式碼,主要是測試的前提準備工作
        :return:
        """
        self.driver = webdriver.Chrome()
        self.driver.maximize_window()
        self.driver.implicitly_wait(8)
        self.driver.get("https://www.baidu.com")

    def tearDown(self):
        """
        測試結束後的操作,這裡基本上都是關閉瀏覽器
        :return:
        """
        self.driver.quit()

    def test_baidu_search(self):
        """
        這裡一定要test開頭,把測試邏輯程式碼封裝到一個test開頭的方法裡。
        :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()

解釋:

        最後結尾處的unittest.main(),新增這個是支援在cmd,裡面,cd到這個指令碼檔案所在的目錄,然後python 指令碼名.py執行,如果不新增這一段,是無法執行cmd裡面執行指令碼的,在PyCharm中,不新增最後一段,也可以通過,右鍵 Run "unittest xxx",來達到執行效果。