天天看點

python selenium unittest_Python+Selenium筆記(三):使用unittest

#網絡很慢可能會運作報錯

(一)   前言

Selenium WebDriver是一個浏覽器自動化測試的API集合。它提供了很多與浏覽器自動化互動的特性,并且這些API主要是用于測試Web程式。如果僅僅使用Selenium WebDriver,我們無法實作執行測試前置條件、測試後置條件,比對預期結果和實際結果,檢查程式的狀态,生成測試報告,建立資料驅動的測試等功能。

(二)   unittest單元測試架構

unittest(一般稱為PyUnit)是從Java程式開發中廣泛應用的JUnit啟發而來的。unittest使我們具備建立測試用例、測試套件、測試夾具的能力。

(三)   xUnite測試架構

Arrange:是用來初始化測試的前置條件,包含初始化被測試的對象、相關配置和依賴。

Act:用來執行功能操作。

Assert:用來校驗實際結果與預期結果是否一緻。

(四)   TestCase類

通過繼承TestCase類并且在測試類中為每一個測試添加測試方法來建立單個測試或者一組測試。

(五)   使用unittest

(1)       定義一個繼承于TestCase 類的子類。

(2)       在類中定義setUp()方法。

(3)       編寫測試方法

(4)       代碼清理(在類中定義tearDown()方法)

(5)       運作測試

說明:

1、一個測試用例是從setUp()方法開始執行的,我們可以用這個方法在每個測試開始前去執行一些初始化的任務。可以是這樣的初始化準備:比如建立浏覽器執行個體,通路URL,加載測試資料和打開日志檔案等。此方法沒有參數,而且不傳回任何值。當定義了一個setUp()方法,測試執行器在每次執行測試方法之前優先執行該方法。

2、有了setUp()方法,就可以寫一些測試用來驗證我們想要測試的程式的功能。測試方法命名以test開頭,這種命名約定通知test runner哪個方法代表測試方法。

3、類似于setUp()方法在每個測試方法之前被調用,TestCase類也會在測試執行完成之後調用tearDown()方法來清理所有的初始化值。一旦測試被執行,在setUp()方法中定義的值将不再需要,是以最好的做法是在測試執行完成的時候清理掉由setUp()方法初始化的數值。

(六)   建立一個目錄 data ,建立一個檔案category.txt,錄入以下資料

程式設計語言,Java,C++,PHP,Delphi,Python,Ruby,C語言,Erlang,Go,Swift,Scala,R語言,Verilog,其它語言

python selenium unittest_Python+Selenium筆記(三):使用unittest

(七)   測試部落格園首頁程式設計語言下的分類資訊是否與預期結果一緻

importunittest

fromselenium importwebdriver

fromselenium.webdriver.common.action_chains importActionChains

importtime

classSearchTest (unittest.TestCase):

defsetUp(self):

self.driver

= webdriver.Firefox()

self.driver.implicitly_wait(10)

self.driver.maximize_window()

self.driver.get("https://www.cnblogs.com/")

deftest_search_by_category(self):

#讀取category.txt檔案,傳回一個字典withopen('data/category.txt', encoding='UTF-8') ascategory_file:

category_dict = dict()

category_data =

category_file.readline().strip().split(',')

the_class =

category_data.pop(0)

category_dict[the_class] =

category_data

#定位首頁網站分類中的程式設計語言self.seach_class = self.driver.find_element_by_xpath('//li/a[@href="/cate/2/" target="_blank" rel="external nofollow" ]')

#光标懸停在“程式設計語言”上ActionChains(self.driver).move_to_element(self.seach_class).perform()

#以清單形式傳回程式設計語言下的所有小類seach_small = self.driver.find_elements_by_xpath('//div[@id="cate_content_block_2"]/div[@class="cate_content_block"]/ul/li')

#休眠3秒time.sleep(3)

small_cate = []

fors inseach_small:

#去掉小類最後面的3個字元(0),并添加到清單small_cate中small_cate.append(str(s.text)[:-3])

#檢查表達式是否為true(此處檢查程式設計語言下的小類是否與預期結果一緻)self.assertTrue(small_cate == category_dict["程式設計語言"])

# self.assertEqual(small_cate,category_dict["程式設計語言"])deftearDown(self):

self.driver.quit()

#加上下面2句,可以通過指令行運作測試,不加的話不影響通過IDE運作測試if__name__ == '__main__':

#加verbosity=2參數,在指令行中顯示具體的測試方法unittest.main(verbosity=2)

(八)

測試結果如下

python selenium unittest_Python+Selenium筆記(三):使用unittest

通過指令行運作:

python selenium unittest_Python+Selenium筆記(三):使用unittest