webTest-----webUI自動化框架


webTest框架介紹

地址

https://github.com/wuranxu/webTest

希望大家能夠喜歡!!!

簡介

本框架基於Python3+selenium3+unittest組成,用戶以Page Object的模式編寫用例。元素的定位和操作按照頁面划分,達到Web端自動化回歸測試的目的,並生成測試報告。瀏覽器兼容性暫時未完善。
本例子展示了一個必應首頁搜索"龍珠超"的測試用例,比較簡陋。

運行日志

image.png

過程截圖

image.png

效果展示

image.png

快速上手

  • 從遠程倉庫拉取代碼

git clone https://github.com/wuranxu/webTest.git

image.png

  • 安裝依賴包

進入下載好的webTest目錄,並在此目錄運行install.py
mac/Linux: python3 install.py
windows: python install.py

image.png

  • 運行demo

在webTest目錄輸入命令(確保chrome瀏覽器已安裝, 驅動會自行下載):

python run_case.py

image.png

環境配置

注: 無桌面版Linux目前只做到支持firefox
  • os: Windows/Mac os x/Linux
  • Python3.x
  • Chrome瀏覽器

目錄結構

project

└───ErrorPic
|
└───DataBase
|
└───Log
|
└───Xmind
|
└───Page
|
└───Report
|
└───Page
|
└───TestSuite
|   |    base_case.py
|
└───templates
|   |   report_templates.html
└───TestResult
|   |   report_templates.html
|   |   GenerateReport.py
|   |   Result.py
|
└───chromedriver
│   │   chromedriver.exe
|
└───Tools
|   |   chrome.py
|   |   decorator.py
|   |   driver.py
|   |   logger.py
|   |   web_tool.py
|
│   README.md
│   run_case.py
|   requirements.txt    
│   config.py
|   webdriver_test.log
 

內容介紹

  • chromedriver

    存放chromedriver驅動, 若本機未安裝chromedriver則自動匹配本機chrome版本下載對應驅動。

  • DataBase

    存放Mysql和Mongodb的連接類

  • ErrorPic

    存放出錯截圖, 目前根據用例名稱創建文件夾並存放。

  • Log

    存放所有日志文件, 目前只有webdriver_test.log, 主要目的是將日志區分開來。

  • Page

    頁面目錄, 可擴展, 針對不同模塊的頁面可設計不同目錄結構。一般存放該頁面的操作(Action)以及元素(Location), 用例具體斷言不建議寫於此處(因人而異)。

  • Report

    存放測試報告,為html形式,可右鍵通過瀏覽器打開,使用chrome效果尤佳。

  • templates

    存放html模板,傳入測試結果以生成測試報告。

  • TestResult

    • GenerateReport.py

      是組織測試結果, 生成測試報告, 填入數據至html報告模板的方法。

    • Result.py

      繼承自unittest.TextTestResult類, 存放測試結果。

  • TestSuite

    測試套件目錄, 可擴展, 子目錄為某個測試集。測試集中存放測試用例。

    • base_case.py

      存放基礎測試用例。

  • Tools

    • chrome.py

      用於更新/下載chromedriver, 目前只支持mac os和windows系統。

    • decorator.py

      用於存放自動截圖/重跑等裝飾器, 主要是為測試函數添加錯誤截圖以及重跑等功能。

    • driver.py

      繼承自WebDriver類, 主要用於簡化原生api以及添加切換frame/handle等api。

    • logger.py

      記錄日志的功能函數。

    • web_tool.py

      用於Web自動化測試的工具類, 包括截圖、獲取用例等方法。

    • xmind_reader.py

      用於解析xmind文件,暫時不支持過於復雜的xmind。用例的大概編寫方式如下圖。
      image

  • Xmind

    存放Xmind文件, xmind文件用於編寫測試用例。

  • config.py

    用於存放絕大部分配置。繼承於BaseConf類, 可擁有自己的配置。

  • requirements.txt

    用於存放本框架所需庫。

  • run_case.py

    存放組織用例, 生成測試套件, 運行測試用例等函數。

  • webdriver_test.log

    存放測試用例執行時候的有關操作和錯誤信息等。

注: 以上目錄結構/命名可能並不合理, 還望海涵。


使用手冊

以下內容若已安裝, 可跳過。
  • 安裝Python3

    Python3.6下載地址

    下載對應操作系統的Python版本並安裝。

  • 下載IDE(非必須)

    推薦Pycharm

    Pycharm下載地址

  • 安裝必須的庫

    目錄中有install.py, 安裝好Python之后, 在終端窗口中輸入如下命令:

    Linux/mac: python3 install.py

    windows: python install.py

    注意: 安裝時需要帶上install.py路徑或者進入該文件所在目錄。

  • Pycharm配置(若有)

    • 第一步: 配置項目Python環境

      File->Open

    image.png

    選擇webTest目錄, 點擊窗口右下角的Open

    image.png

    打開Preferences, 在Project Interpreter里選擇剛才安裝Python的地址, 點擊OK

    image.png

    • 第二步: 配置run_case.py

    點擊Edit Configurations

image.png

如果沒有Python配置的話, 點擊圖中"+"圖標, 然后選擇Python並添加
image.png

image.png

配置腳本
image.png

  • 第三步: 運行用例

右擊run_case.py, 選擇Run則為運行模式, Debug則為調試模式
image.png

  • 用例編寫規則

    Python:

    • 可參考Search.py編寫用例(最好用例的類名不重復)

    • 用例需要寫在TestSuite/測試集/這種目錄下

    • 用例需要繼承base_case.py

    • 用例需要以test開頭如test_bmp

    • 用例的test函數需要帶上screenshot的裝飾器, 不帶無截圖功能

    • 報告會按照時間生成, 且會寫入2份report.html

    • 日志在webdriver_test.log查看

    • Page頁面編寫此頁面需要的操作及元素

    • Location類是封裝了WebElement, 其中包含name, value, 默認以css方式定位

    • Location類實例化的時候可指定第三個參數, 方便使用其他定位的同學。如:

      menu = Location("大后台左側菜單", ".menuItem", "XPATH")

    Xmind:

    • 畫布(必填)

      為TestSuite名, 可允許重復畫布名

    • 根元素(必填)

      為用例的Class名

    • 描述(最好有)

      為該用例的測試點

    • 頁面(必填)

      需要填寫Page下的頁面, 子節點為其頁面下需要用到的方法, 方法后如果還有子節點,則為該方法返回值, 若有多個返回值則用;分割且該返回值會被保留方便做斷言

    • 跳過(不填默認生成用例)

      不為True的時候均會生成用例

    • 重跑次數(可選)

      用例若失敗, 重新運行的次數, 默認為0。

    • 步驟(必填)

      子節點為頁面方法或斷言, 若以assert開頭則為斷言, 否則則判斷為方法, 若在頁面中忘了填寫該方法, 則調用系統內部方法。

      方法節點的子節點為參數, 同樣以;分割。

      斷言的子節點為2或3個, 如assertEqual, 可理解是A==B?true:msg, 最后一個參數是msg, 具體出錯原因。

    • 已知缺陷

      1. 截止到現在還未支持非頁面方法調用如print;
      2. 不支持導入本用例需要的其他類庫;
      3. 其他不爽的有待補充。

亮痛點

  • 瀏覽器驅動

    • 問題: 瀏覽器驅動偶爾會與瀏覽器對應不上
    • 解決方案: 自動下載, 但只針對mac/win下的chrome, 且版本不能太低。firefox不支持, 任性。
  • 集成jenkins

    • 問題: centos6.x不帶桌面無法運行UI自動化用例

    • 解決方案:

      1. phantomJs(不合適, 還是要寫出來)

        新版selenium使用的時候會提示被廢棄, 建議用無頭模式取代, 且運行不穩定。

      2. Chrome無頭模式(centos7以上應可行)

        由於jenkins所在機器centos6.x版本過低, 被Chrome放棄支持, Chrome瀏覽器無法安裝

      3. Firefox無頭模式(目測不可行, 測太多次了記不住)

        Firefox可正常安裝, 但是geckodriver比較挑瀏覽器版本, 多次試驗不成功, 換了無數個瀏覽器版本+geckodriver版本后已經忘了是否可行。

      4. Firefox+虛擬桌面(目前解決方案)

        見用例driver.py文件。但不完美, 錯誤截圖顯示的網頁內容都····一言難盡, 好像一個瞎子終於重獲光明卻發現自己滿臉麻子。回到正題, 為什么不自動同步firefox驅動, 因為在c方案卡殼太久比較惡心。

        版本信息:

        geckodriver0.16

        selenium>=3.4

        firefox52.0

  • 測試報告

    由於郵件不支持js和引入的css, 導致報告巨難看。所以采用了附件形式, 目前是個比較大的痛點。

  • Page Object

    關於po, 確實也沒有很深的研究, 只等小白鼠試水了。

  • api封裝

    api封裝得還不夠多, 除了常用方法以外。但是基本上每個方法都插入了顯示等待, 大大降低了元素找不到, 點不到, 各種不到的可能性。

  • 重跑

    解決了使用裝飾器重跑用例不執行setUp+tearDown的問題。

  • 錯誤截圖

    截圖用base64保存, 所以只有錯誤的時候才會截圖。因為base64太大。

  • Xmind編寫用例

    這算一個小亮點吧。

  • 自動化配置環境

    已完成, 方便使用。

  • 數據庫

    支持mongo和mysql。

  • 執行效率

    目前是單線程, 還沒做多線程, 時間緊迫。所以在jenkins那台老爺機比較慢, 如果用例多起來了肯定是不行的。

  • 代碼規范/質量

    寫得一塌糊塗, 大家看不過去就幫忙改了吧, 跪謝orz


免責聲明!

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



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