webTest框架介紹
地址
https://github.com/wuranxu/webTest
希望大家能夠喜歡!!!
簡介
本框架基於Python3+selenium3+unittest組成,用戶以Page Object的模式編寫用例。元素的定位和操作按照頁面划分,達到Web端自動化回歸測試的目的,並生成測試報告。瀏覽器兼容性暫時未完善。
本例子展示了一個必應首頁搜索"龍珠超"的測試用例,比較簡陋。
運行日志

過程截圖

效果展示

快速上手
- 從遠程倉庫拉取代碼
git clone https://github.com/wuranxu/webTest.git

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

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

環境配置
注: 無桌面版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。用例的大概編寫方式如下圖。

-
-
Xmind
存放Xmind文件, xmind文件用於編寫測試用例。
-
config.py
用於存放絕大部分配置。繼承於BaseConf類, 可擁有自己的配置。
-
requirements.txt
用於存放本框架所需庫。
-
run_case.py
存放組織用例, 生成測試套件, 運行測試用例等函數。
-
webdriver_test.log
存放測試用例執行時候的有關操作和錯誤信息等。
注: 以上目錄結構/命名可能並不合理, 還望海涵。
使用手冊
以下內容若已安裝, 可跳過。
-
安裝Python3
下載對應操作系統的Python版本並安裝。
-
下載IDE(非必須)
推薦Pycharm
-
安裝必須的庫
目錄中有install.py, 安裝好Python之后, 在終端窗口中輸入如下命令:
Linux/mac:
python3 install.pywindows:
python install.py注意: 安裝時需要帶上install.py路徑或者進入該文件所在目錄。
-
Pycharm配置(若有)
-
第一步: 配置項目Python環境
File->Open

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

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

- 第二步: 配置run_case.py
點擊Edit Configurations
-

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


配置腳本

- 第三步: 運行用例
右擊run_case.py, 選擇Run則為運行模式, Debug則為調試模式

-
用例編寫規則
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, 具體出錯原因。 -
已知缺陷
- 截止到現在還未支持非頁面方法調用如print;
- 不支持導入本用例需要的其他類庫;
- 其他不爽的有待補充。
-
亮痛點
-
瀏覽器驅動
- 問題: 瀏覽器驅動偶爾會與瀏覽器對應不上
- 解決方案: 自動下載, 但只針對mac/win下的chrome, 且版本不能太低。firefox不支持, 任性。
-
集成jenkins
-
問題: centos6.x不帶桌面無法運行UI自動化用例
-
解決方案:
-
phantomJs(不合適, 還是要寫出來)
新版selenium使用的時候會提示被廢棄, 建議用無頭模式取代, 且運行不穩定。
-
Chrome無頭模式(centos7以上應可行)
由於jenkins所在機器centos6.x版本過低, 被Chrome放棄支持, Chrome瀏覽器無法安裝
-
Firefox無頭模式(目測不可行, 測太多次了記不住)
Firefox可正常安裝, 但是geckodriver比較挑瀏覽器版本, 多次試驗不成功, 換了無數個瀏覽器版本+geckodriver版本后已經忘了是否可行。
-
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
