1. 程式人生 > >Python+Selenium框架設計篇之6-一個類檔案多個測試方法情況下測試韌體的寫法

Python+Selenium框架設計篇之6-一個類檔案多個測試方法情況下測試韌體的寫法

      其實,到前面這一篇文章,簡單的Python+Selenium自動化測試框架就已經算實現了。接下來的主要是介紹,unittest管理指令碼,如何如何載入執行指令碼,再就是採用第三方外掛,實現輸出html的測試報告。本文來介紹下,在同一個類中,多個測試函式時候,測試韌體如何寫

為了說明這個問題,我們在之前的測試類基礎上,再寫一個test_search2()的測試用例,看看會發生什麼。

# coding=utf-8
import time
import unittest
from framework.browser_engine import BrowserEngine
from pageobjects.baidu_homepage import HomePage


class BaiduSearch(unittest.TestCase):
    def setUp(self):
        """
        測試韌體的setUp()的程式碼,主要是測試的前提準備工作
        :return:
        """
        browse = BrowserEngine(self)
        self.driver = browse.open_browser(self)

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

    def test_baidu_search(self):
        """
        這裡一定要test開頭,把測試邏輯程式碼封裝到一個test開頭的方法裡。
        :return:
        """
        homepage = HomePage(self.driver)
        homepage.type_search('selenium')  # 呼叫頁面物件中的方法
        homepage.send_submit_btn()  # 呼叫頁面物件類中的點選搜尋按鈕方法
        time.sleep(2)
        homepage.get_windows_img()  # 呼叫基類截圖方法
        try:
            assert 'selenium' in homepage.get_page_title()  # 呼叫頁面物件繼承基類中的獲取頁面標題方法
            print ('Test Pass.')
        except Exception as e:
            print ('Test Fail.', format(e))

    def test_search2(self):
        homepage = HomePage(self.driver)
        homepage.type_search('python')  # 呼叫頁面物件中的方法
        homepage.send_submit_btn()  # 呼叫頁面物件類中的點選搜尋按鈕方法
        time.sleep(2)
        homepage.get_windows_img()  # 呼叫基類截圖方法

if __name__ == '__main__':
    unittest.main()
      問題發現了沒,我們的瀏覽器啟動和關閉了兩次,是不是這個問題?原來,沒執行一次test開頭的函式,都要執行一次測試韌體,也就是說執行setUp()和()一次,如果有N個test開頭的函式,測試韌體就執行N次,我們到底有沒有,只需要執行一次測試韌體,支援執行多次測試函式。

     我們測試中,肯定需要,開啟一個頁面,然後測試這個頁面的多個用例,才關閉這個頁面,去測試其他頁面,在unittest是有相關測試韌體方法去支援這種行為。請看下面調整,自己對比下,能不能找出不同。

# coding=utf-8
import time
import unittest
from framework.browser_engine import BrowserEngine
from pageobjects.baidu_homepage import HomePage


class BaiduSearch(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        """
        測試韌體的setUp()的程式碼,主要是測試的前提準備工作
        :return:
        """
        browse = BrowserEngine(cls)
        cls.driver = browse.open_browser(cls)

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

    def test_baidu_search(self):
        """
        這裡一定要test開頭,把測試邏輯程式碼封裝到一個test開頭的方法裡。
        :return:
        """
        homepage = HomePage(self.driver)
        homepage.type_search('selenium')  # 呼叫頁面物件中的方法
        homepage.send_submit_btn()  # 呼叫頁面物件類中的點選搜尋按鈕方法
        time.sleep(2)
        homepage.get_windows_img()  # 呼叫基類截圖方法
        try:
            assert 'selenium' in homepage.get_page_title()  # 呼叫頁面物件繼承基類中的獲取頁面標題方法
            print ('Test Pass.')
        except Exception as e:
            print ('Test Fail.', format(e))

    def test_search2(self):
        homepage = HomePage(self.driver)
        homepage.type_search('python')  # 呼叫頁面物件中的方法
        homepage.send_submit_btn()  # 呼叫頁面物件類中的點選搜尋按鈕方法
        time.sleep(2)
        homepage.get_windows_img()  # 呼叫基類截圖方法

if __name__ == '__main__':
    unittest.main()
執行一下,是不是,只需要開啟和關閉瀏覽器一次,就執行了2個搜尋用例?以後,專案中基本採用這種方法來執行同一個功能不同測試用例的編寫。