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,其它語言

 

(七)   測試博客園首頁編程語言下的分類信息是否與預期結果一致

import unittest

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
class SearchTest (unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Firefox()
        self.driver.implicitly_wait(10)
        self.driver.maximize_window()
        self.driver.get("https://www.cnblogs.com/")

    def test_search_by_category(self):
        #讀取category.txt文件,返回一個字典
       
with open('data/category.txt', encoding='UTF-8') as category_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/"]')
        #光標懸停在“編程語言”上
       
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 = []
        for s in seach_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["編程語言"])

   
def tearDown(self):
        self.driver.quit()
#加上下面2句,可以通過命令行運行測試,不加的話不影響通過IDE運行測試
if __name__ == '__main__':
    #加verbosity=2參數,在命令行中顯示具體的測試方法
   
unittest.main(verbosity=2)

 

(八)   測試結果如下

通過命令行運行:

 


免責聲明!

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



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