Python+Selenium筆記(四):unittest的Test Suite(測試套件)

来源:https://www.cnblogs.com/simple-free/archive/2018/02/11/8443463.html
-Advertisement-
Play Games

(一) Test Suite測試套件 一個測試套件是多個測試或測試用例的集合,是針對被測程式的對應的功能和模塊創建的一組測試,一個測試套件內的測試用例將一起執行。 應用unittest的TestSuites特性,可以將不同的測試組成一個邏輯組,然後設置統一的測試套件,並通過一個命令來執行測試。這都是 ...


 

(一) Test Suite測試套件

一個測試套件是多個測試或測試用例的集合,是針對被測程式的對應的功能和模塊創建的一組測試,一個測試套件內的測試用例將一起執行。

應用unittest的TestSuites特性,可以將不同的測試組成一個邏輯組,然後設置統一的測試套件,並通過一個命令來執行測試。這都是通過TestSuites、TestLoader和TestRunn類來實現的。

(二) 類級別的setUp()方法和tearDown()方法

使用setUpClass()方法和tearDownClass()方法及@classmethod標識來實現各個測試方法共用初始化數據。具體看下麵的代碼。

(三) searchtest.py

import unittest

from selenium import webdriver

from selenium.webdriver.common.action_chains import ActionChainsimport time

class SearchTest(unittest.TestCase):
    '''通過setUpClass()和@classmethod標識,實現
     在類級別初始化數據,所有測試方法共用這些初始化數據.
     不使用這個的話,每個測試方法都會單獨創建一個實例'''
   
@classmethod
    def setUpClass(cls):
        cls.driver = webdriver.Firefox()
        cls.driver.implicitly_wait(10)
        cls.driver.maximize_window()
        cls.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.search_class = self.driver.find_element_by_xpath('//li/a[@href="/cate/2/"]')
        #游標懸停在“編程語言”上
       
ActionChains(self.driver).move_to_element(self.search_class).perform()
        # 以列表形式返回編程語言下的所有小類
       
self.search_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 self.search_small:
            #去掉小類最後面的(0),並添加到列表small_cate中
           
small = str(s.text).split('(')
            small_cate.append(small[0])
        #檢查表達式是否為true(此處檢查編程語言下的小類是否與預期結果一致)
        self.assertTrue(small_cate == category_dict["編程語言"])
        # self.assertEqual(small_cate,category_dict["編程語言"])
   
def test_search_by_look(self):
        self.seach_class = self.driver.find_element_by_xpath('//li/a[@href="/cate/2/"]')
        #定位編程語言下的小類Python
       
self.seach_small =self.driver.find_element_by_xpath('//li/a[@href="/cate/python/"]')
        ActionChains(self.driver).move_to_element(self.seach_class).perform()
        self.seach_small.click()
        #檢查打開的網頁標題是不是 Python - 網站分類 - 博客園
        # assert "Python - 網站分類 - 博客園" in self.driver.title
       
self.assertEqual(self.driver.title,"Python - 網站分類 - 博客園" )
    '''通過tearDownClass()和@classmethod標識,實現
     在類級別初始化數據,所有測試方法共用這些初始化數據'''
   
@classmethod
    def tearDownClass(cls):
        cls.driver.quit()
#加上下麵2句,可以通過命令行運行測試,不加的話不影響通過IDE運行測試
if __name__ == '__main__':
    #加verbosity=2參數,在命令行中顯示具體的測試方法
   
unittest.main(verbosity=2)
(四) homepagetest.py
import  unittest
from selenium import  webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.by import By
class HomePageTest(unittest.TestCase):
    '''通過setUpClass()和@classmethod標識,實現
     在類級別初始化數據,所有測試方法共用這些初始化數據.
     不使用這個的話,每個測試方法都會單獨創建一個實例'''
   
@classmethod
    def setUpClass(cls):
        cls.driver = webdriver.Firefox()
        cls.driver.implicitly_wait(10)
        cls.driver.maximize_window()
        cls.driver.get("https://www.cnblogs.com/")
    def test_search_field(self):
        #通過by,檢查博客園首頁有沒有搜索框,is_element_present()是自定義的方法
       
self.assertTrue(self.is_element_present(By.ID,"zzk_q"))
    def test_search_btn(self):
        # 通過by,檢查博客園首頁有沒有找找看按鈕
       
self.assertTrue(self.is_element_present(By.CLASS_NAME,"search_btn"))
    def test_menu(self):
        #該方法檢查博客園首頁菜單欄信息是否與預期一致
        #讀取menu.txt文件數據
       
with open('data/menu.txt',encoding='UTF-8') as menu_file:
            menu_data = menu_file.readline().strip().split(',')
        #以列表形式返回博客園首頁菜單欄信息
       
self.check_menu = self.driver.find_elements_by_xpath('//div[@id="nav_menu"]/a')
        the_menu = []
        for c in self.check_menu:
            #將博客園首頁的菜單名稱和URL添加到列表the_menu
           
the_menu.append(c.text + c.get_attribute('href'))
        #檢查2個列表是否一致(檢查博客園首頁的菜單名稱及URL是否和預期一致)
       
self.assertListEqual(the_menu,menu_data)
    def is_element_present(self,how,what):
        #找到元素,返回True,否則返回False
       
try:
            self.driver.find_element(by=how,value = what)
        except NoSuchElementException as e:
            return False
        return True
   
@classmethod
    def tearDownClass(cls):
        cls.driver.quit()
# 加上下麵2句,可以通過命令行運行測試,不加的話不影響通過IDE運行測試
if __name__ == '__main__':
    # 加verbosity=2參數,在命令行中顯示具體的測試方法
   
unittest.main(verbosity=2)
(五) smoketests.py (測試套件)
import unittest
from searchtest import SearchTest
from homepagetest import HomePageTest
#獲取SearchTest類 和 HomePageTest類中的所有測試方法
search_test = unittest.TestLoader().loadTestsFromTestCase(SearchTest)
home_page_test = unittest.TestLoader().loadTestsFromTestCase(HomePageTest)
#創建一個包括SearchTest和HomePageTest的測試套件
smoke_tests = unittest.TestSuite([home_page_test,search_test])
#運行測試套件
unittest.TextTestRunner(verbosity=2).run(smoke_tests)

(六) 其他說明

#另外一個文件在上一篇中已經說明

要完全使用上面的代碼,需要創建一個文件menu.txt,輸入以下數據:

園子https://home.cnblogs.com/,新聞https://news.cnblogs.com/,博問https://q.cnblogs.com/,快閃記憶體https://ing.cnblogs.com/,小組https://group.cnblogs.com/,收藏https://wz.cnblogs.com/,招聘https://job.cnblogs.com/,班級https://edu.cnblogs.com/,找找看http://zzk.cnblogs.com/

 

 

(七) 運行smoketests.py

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 主要問題: 1、javaScript代碼的編譯和執行過程,詞法作用域規則? 2、this的動態綁定方式有幾種? 3、全局和函數之外是不是還有其他的作用域? 4、為什麼代碼規範多禁止with、eval? ...
  • (一)元素選擇符 1. E(某個元素,如p) 2. id(使用id,如 idName) 3. class(使用class,如.myclass) 4. 通配符: (二)關係選擇符 1. 包含選擇符:E F(E所有的F包含子代,孫代,子子孫孫等等) 2. 子選擇符:E (基於元素某種特性定義的類,偽類通 ...
  • 一、前言 接著上一章的內容,繼續js的學習。 二、內容 解析與序列化 ...
  • 緣由 在急速的互聯網時代,原本ie系列的低版本瀏覽器就該淘汰了。可偏偏還是有很多xp系統ie7、8瀏覽器,這有讓網站甚是苦逼。練就了一套新技術,原本以為能大展身手,可卻在ie陣容中認慫了,不得不規規矩矩的寫著老得掉牙的代碼,用著早已塵封的技術。 (註:因為用戶原因可能使用ie7,而非蛋疼要網站支持i ...
  • 一、前言 繼續上一章的內容,繼續今天的Js學習。 二、內容 事件處理程式 事件對象 事件類型 ...
  • 工作流模塊 1.模型管理 :web線上流程設計器、預覽流程xml、導出xml、部署流程 2.流程管理 :導入導出流程資源文件、查看流程圖、根據流程實例反射出流程模型、激活掛起 3.運行中流程:查看流程信息、當前任務節點、當前流程圖、作廢暫停流程、指派待辦人 4.歷史的流程:查看流程信息、流程用時、流 ...
  • 前段時間看了下設計模式 參考,以及head first設計模式,簡要如下 ...
  • #HTMLTestRunner代碼修改參考 微微微笑 的說明,下麵是鏈接,這個已經說的很詳細了 https://www.cnblogs.com/miniren/p/5301081.html (一) 前言 unittest在命令行輸出測試結果。你可能需要生成一個所有測試的執行結果作為報告或者把測試結果 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...