基於Selenium+Python的web自動化測試框架

1、什麼是Selenium?

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

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

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

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

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

2、自動化測試框架

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

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

一、用例管理模塊函數

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

二、自動化控制器測試

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

三、報表生成模塊

主要負責執行用例後的生成報告,通常以HTML格式居多,信息主要是用例執行狀況。另外還能夠配置發送郵件功能。

四、log模塊

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

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

一、需求分析

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

二、設計和實現

頁面管理

假設測試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方法

三、用例執行模塊

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

用例前沒有「#「標記的測試用例腳本會被執行,而有」#「標記的則會被忽略,這樣能夠很方便的控制測試集的執行,固然也能夠建立不一樣的文件來執行不一樣的測試集。

4、須要改進的模塊

對於現有實現的測試框架,已經能夠知足web對象的自動化需求,但仍是有些能夠改進提升的地方,好比:

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

5、總結

基於Selenium實現的web自動化測試框架不只輕量級並且靈活,能夠快速地開發自動化測試用例,結合本篇的框架設計和一些好的實踐,但願對你們之後的web自動化框架的設計和實現有所幫助。

做者:武貫祥

來源:宜信技術學院

拓展閱讀:數據中臺:宜信敏捷數據中臺建設實踐|分享實錄

相關文章
相關標籤/搜索