Selenium4+Python的web自動化測試框架

一、什么是Selenium?

Selenium是一個基于瀏覽器的自動化測試工具,它提供了一種跨平臺、跨瀏覽器的端到端的web自動化解決方案。Selenium主要包括三部分:Selenium IDE、Selenium WebDriver 和Selenium Grid。

  • Selenium IDE:Firefox的一個擴展,它可以進行錄制回放,并把錄制的操作以多種語言(例如java、python等)的形式導出成測試用例。

  • Selenium WebDriver:提供Web自動化所需的API,主要用作瀏覽器控制、頁面元素選擇和調試。不同的瀏覽器需要不同的WebDriver。

  • Selenium Grid:提供了在不同機器的不同瀏覽器上運行selenium測試的能力。

本文將詳細介紹如何運用Python結合Selenium WebDriver庫搭建web自動化測試框架。

二、自動化測試框架

一個典型的自動化測試框架一般包括用例管理模塊、自動化執行控制器、報表生成模塊和log模塊,這些模塊相輔相成。

接下來介紹各模塊的邏輯單元:

1、用例管理模塊

用例管理模塊包括新增、修改、刪除等操作單元,這些單元又會涉及到用例書寫模式,測試數據庫的管理、可復用庫等。

2、自動化控制器

控制器是自動化用例執行的組織模塊,主要是負責以什么方法執行我們的測試用例.

3、報表生成模塊

主要負責執行用例后的生成報告,一般以HTML格式居多,信息主要是用例執行情況。另外還可以配置發送郵件功能。

4、log模塊

主要用來記錄用例執行情況,以便于高效的調查用例失敗信息以及追蹤用例執行情況。

三、自動化框架的設計和實現

1、需求分析

首先我們的測試對象是一個web平臺,基于此平臺設計的框架要包含測試用例管理、測試執行控制器、測試報告以及測試日志的生成。

2、設計和實現

頁面管理

假設測試web對象為一個典型單頁面應用,所以我們采用頁面模式。頁面模式是頁面與測試用例之間的紐帶,它將每個頁面抽象成一個單獨的類,為測試用例提供頁面元素的定位和操作。

BaseClass作為父類只包含driver成員變量,用來標識Selenium中的WebDriver,以便在子類中定位頁面元素。LoginClass和PageClass作為子類,可以提供頁面元素的定位和操作方法。比如登錄頁面。

從頁面看,需要操作的元素分別為:登錄用戶名、密碼、下次自動登錄和登錄按鈕。具體實現代碼如下:

頁面父類BaseClass.py

LoginClass繼承自BaseClass,并進行登錄的元素定位以及操作實現。代碼中定位了username和password,并添加了設置用戶名和密碼的操作。

公共庫模塊

公共庫模塊是為創建測試用例服務的,主要包括常量、公共函數、日志、報告等。

Common.py

測試用例信息類用來標識測試用例,并且包括執行用例、執行結果信息,主要包括以下字段。

日志主要用來記錄測試用例執行步驟及產生的錯誤信息,不同的信息有不同的日志級別,比如Information、Warning、Critical和Debug。由于每個測試用例產生的日志條目比較少,所以在測試框架中只利用了最高級別的日志打印,即Debug級別,該級別也會將其他所有的日志級別的信息同樣打印出來。在具體的實現中引用了Python標準庫中的logging類庫,以便更方便的控制日志輸出。

測試用例倉庫

用例倉庫主要用來組織自動化測試用例。每條測試用例都被抽象成一個獨立的類,并且均繼承自unittest.TestCase類。 Python中的unittest庫提供了豐富的測試框架支持,包括測試用例的setUp和tearDown方法,在實現用例的過程中可以重寫。依托頁面管理和公共庫模塊實現的頁面方法和公共函數,每一個測試用例腳本的書寫都會非常清晰簡潔。

從這個測試用例中,我們可以看到

  • Setup中定義了執行測試用例前的一些實例化工作
  • tearDown對執行完測試做了清理和寫日志文件工作
  • 測試步驟、測試數據和測試檢查點非常清晰,易修改(比如用戶名密碼)
  • 日志級別僅有Debug,所以寫日志僅需用同一Log方法

3、用例執行模塊

執行模塊主要用來控制測試用例腳本的批量執行,形成一個測試集。用例的執行引用了Python標準庫中的subprocess來執行nosetests的shell命令,從而執行給定測試用例集中的用例。測試用例集是一個簡單的純文本文件,實現過程中利用了.txt文件testcases.txt。

用例前沒有“#“標記的測試用例腳本會被執行,而有”#“標記的則會被忽略,這樣可以很方便的控制測試集的執行,當然也可以創建不同的文件來執行不同的測試集。?

四、需要改進的模塊

對于現有實現的測試框架,已經可以滿足web對象的自動化需求,但還是有些可以改進提高的地方,比如:

  • 部分用例可以嘗試數據驅動。
  • 二次封裝selenium的By函數,以便更高效定位元素。
  • 沒有進行持續化集成。

五、總結

基于Selenium實現的web自動化測試框架不僅輕量級而且靈活,可以快速地開發自動化測試用例,結合本篇的框架設計和一些好的實踐,希望對大家以后的web自動化框架的設計和實現有所幫助。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/82974.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/82974.shtml
英文地址,請注明出處:http://en.pswp.cn/web/82974.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

React 樣式方案與狀態方案初探

React 本身只提供了基礎 UI 層開發范式,其他特性的支持需要借助相關社區方案實現。本文將介紹 React 應用體系中樣式方案與狀態方案的主流選擇,幫助開發者根據項目需求做出合適的選擇。 1. React 樣式方案 1.1. 內聯樣式 (Inline Styles) 通過 style …

PHP中如何定義常量以及常量和變量的主要區別

在PHP編程中,常量和變量是存儲數據的兩種重要方式。常量在定義后值不能改變,而變量的值可以在程序執行過程中發生變化。本文將詳細介紹如何在PHP中定義常量,并深入探討常量和變量的主要區別。 一、PHP中定義常量 1. 使用 define 函數定義常…

奈飛工廠官網,國內Netflix影視在線看|中文網頁電腦版入口

奈飛工廠是一個專注于提供免費Netflix影視資源的在線播放平臺,致力于為國內用戶提供的Netflix熱門影視內容。該平臺的資源與Netflix官網基本同步,涵蓋電影、電視劇、動漫和綜藝等多個領域。奈飛工廠的界面簡潔流暢,資源分類清晰,方…

CMS內容管理系統的設計與實現:架構設計

一、整體架構方案 &#xff08;一&#xff09;架構方案選擇&#xff08;根據項目規模&#xff09; 1. 中小型項目推薦方案&#xff08;團隊<10人&#xff09; #mermaid-svg-cjzaHpptY8pYWnzo {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:1…

嵌入式里的時間魔法:RTC 與 BKP 深度拆解

文章目錄 RTC實時時鐘與BKPUnix時間戳UTC/GMT時間戳轉換時間戳轉換BKP簡介BKP基本結構1. 電池供電模塊&#xff08;VBAT 輸入&#xff09;2. 侵入檢測模塊&#xff08;TAMPER 輸入&#xff09;3. 時鐘輸出模塊&#xff08;RTC 輸出&#xff09;4. 內部寄存器組 RTC簡介RTC時鐘源…

STC8H系列 驅動步進電機

STC8H 驅動步進電機 一、引言二、硬件設計三、軟件設計Step_Motor2.c文件Step_ Motor2.h文件 一、引言 眾所周知STC8H系列有兩個PWM&#xff0c;分別為PWMA和PWMB外設模塊&#xff0c;我全都用上&#xff0c;豈不是就有兩個帶動電機的脈沖信號&#xff1f;&#xff01;哈哈哈哈…

Python高階函數:從入門到精通

目錄 Python高階函數詳解&#xff1a;從概念到高級應用引言&#xff1a;函數式編程的魅力一、高階函數基礎概念1.1 什么是高階函數1.2 Python中的一等函數 二、內置高階函數詳解2.1 map函數&#xff1a;數據轉換利器2.2 filter函數&#xff1a;數據篩選專家2.3 reduce函數&…

騰訊開源視頻生成工具 HunyuanVideo-Avatar,上傳一張圖+一段音頻,就能讓圖中的人物、動物甚至虛擬角色“活”過來,開口說話、唱歌、演相聲!

騰訊混元團隊提出的 HunyuanVideo-Avatar 是一個基于多模態擴散變換器&#xff08;MM-DiT&#xff09;的模型&#xff0c;能夠生成動態、情緒可控和多角色對話視頻。支持僅 10GB VRAM 的單 GPU運行&#xff0c;支持多種下游任務和應用。例如生成會說話的虛擬形象視頻&#xff0…

DeepSeek-R1-0528:開源推理模型的革新與突破

一、 發布日期與背景 2025年5月29日&#xff0c;備受業界關注的DeepSeek推理模型DeepSeek-R1迎來重要更新——DeepSeek-R1-0528模型正式發布。此次更新采取了“靜默發布”策略&#xff0c;未提前預告&#xff0c;而是通過官方渠道&#xff08;官網、App、小程序&#xff09;及…

LeetCode 1723: 完成所有工作的最短時間

給你一個整數數組 jobs &#xff0c;其中 jobs[i] 是完成第 i 項工作要花費的時間。 請你將這些工作分配給 k 位工人。所有工作都應該分配給工人&#xff0c;且每項工作只能分配給一位工人。工人的 工作時間 是完成分配給他們的所有工作花費時間的總和。請你設計一套最佳的工作…

JDK8新特性之Steam流

這里寫目錄標題 一、Stream流概述1.1、傳統寫法1.2、Stream寫法1.3、Stream流操作分類 二、Stream流獲取方式2.1、根據Collection獲取2.2、通過Stream的of方法 三、Stream常用方法介紹3.1、forEach3.2、count3.3、filter3.4、limit3.5、skip3.6、map3.7、sorted3.8、distinct3.…

split方法

在編程中&#xff0c;split 方法通常用于將字符串按照指定的分隔符拆分成多個部分&#xff0c;并返回一個包含拆分結果的列表&#xff08;或數組&#xff09;。不同編程語言中的 split 方法語法略有不同&#xff0c;但核心功能相似。以下是常見語言中的用法&#xff1a; ?1. P…

深入理解 x86 匯編中的符號擴展指令:從 CBW 到 CDQ 的全解析

引入 在匯編語言的世界里&#xff0c;數據寬度的轉換是一項基礎卻至關重要的操作。尤其是在處理有符號數時&#xff0c;符號擴展&#xff08;Sign Extension&#xff09;作為保持數值符號一致性的核心技術&#xff0c;直接影響著運算結果的正確性。本文將聚焦 x86 架構中最常用…

計算機基礎知識(第五篇)

計算機基礎知識&#xff08;第五篇&#xff09; 架構演化與維護 軟件架構的演化和定義 軟件架構的演化和維護就是對架構進行修改和完善的過程&#xff0c;目的就是為了使軟件能夠適應環境的變化而進行的糾錯性修改和完善性修改等&#xff0c;是一個不斷迭代的過程&#xff0…

前端開發三劍客:HTML5+CSS3+ES6

在前端開發領域&#xff0c;HTML、CSS和JavaScript構成了構建網頁與Web應用的核心基礎。隨著技術標準的不斷演進&#xff0c;HTML5、CSS3以及ES6&#xff08;ECMAScript 2015及后續版本&#xff09;帶來了諸多新特性與語法優化&#xff0c;極大地提升了開發效率和用戶體驗。本文…

c++ 頭文件

目錄 防止頭文件重復包含 頭文件的作用 如何讓程序的多個 .cpp 文件之間共享全局變量&#xff08;可能是 int、結構體、數組、指針、類對象&#xff09;? 防止頭文件重復包含 為什么要防止頭問件重復包含&#xff1f; 當然一般也不會把變量定義放到頭問件&#xff0c;那為…

深入解析 JavaScript 中 var、let、const 的核心區別與實踐應用

一、歷史背景與語法基礎 JavaScript 作為動態弱類型語言&#xff0c;變量聲明機制經歷了從 ES5 到 ES6 的重大變革。在 ES5 及更早版本中&#xff0c;var 是唯一的變量聲明方式&#xff0c;而 ES6&#xff08;2015 年&#xff09;引入了 let 和 const&#xff0c;旨在解決 var…

【Linux庖丁解牛】—自定義shell的編寫!

1. 打印命令行提示符 在我們使用系統提供的shell時&#xff0c;每次都會打印出一行字符串&#xff0c;這其實就是命令行提示符&#xff0c;那我們自定義的shell當然也需要這一行字符串。 這一行字符串包含用戶名&#xff0c;主機名&#xff0c;當前工作路徑&#xff0c;所以&a…

應用案例 | 設備分布廣, 現場維護難? 宏集Cogent DataHub助力分布式鍋爐遠程運維, 讓現場變“透明”

在日本&#xff0c;能源利用與環保問題再次成為社會關注的焦點。越來越多的工業用戶開始尋求更高效、可持續的方式來運營設備、管理能源。而作為一家專注于節能與自動化系統集成的企業&#xff0c;日本大阪的TESS工程公司給出了一個值得借鑒的答案。 01 鍋爐遠程監控難題如何破…

【OSG學習筆記】Day 16: 骨骼動畫與蒙皮(osgAnimation)

骨骼動畫基礎 骨骼動畫是 3D 計算機圖形中常用的技術&#xff0c;它通過以下兩個主要組件實現角色動畫。 骨骼系統 (Skeleton)&#xff1a;由層級結構的骨頭組成&#xff0c;類似于人體骨骼蒙皮 (Mesh Skinning)&#xff1a;將模型網格頂點綁定到骨骼上&#xff0c;使骨骼移動…