之前使用 Python + flask 開發的 selenium 自動化測試用例管理、執行平台,終於克服懶癌把業務相關的信息剝離掉,代碼放到了GitHub 上面:
github地址: https://github.com/jerrylizilong/autotest_platform \ https://jerrylizilong.github.io/autotest_platform/ (越整理越發現自己代碼寫得爛,如有不足請輕拍)
效果介紹原帖地址: https://testerhome.com/topics/11183
執行效果:
執行單條用例:
執行用例集:
autotest_platform(懶得想名字,先這么叫着)
基於python+selenium的自動化測試管理、執行平台。
版本要求:
python 3.4 以上
selenium : 建議使用 3.0 以上版本
mysql : 建議 5.5 以上
1. 管理平台:
基於flask進行開發,進行用例、用例集、步驟等的增刪改查等功能。
啟動 flask:
python run.py
2. 啟動core服務:
python core.py
- 基於selenium進行封裝,從數據庫中讀取需要執行的測試用例,並轉化、執行、記錄測試結果及截圖。
- 需結合selenium grid 或 selenium docker 作為節點進行具體執行載體。
3. 啟動atx core服務:
python atx_core.py
- 基於atx 進行封裝,從數據庫中讀取需要執行的測試用例,並轉化、執行、記錄測試結果及截圖。
- 需安裝atxserver(https://github.com/openatx/atx-server),並修改 app/config.py 文件的以下內容:
# atx 配置
isUseATX=True # True 代表使用 atx
ATXHost = 'http://172.16.100.168:8002' # 對應的 atxserver 地址
安裝步驟:
1. clone 或下載代碼包到本地解壓:
git clone https://github.com/jerrylizilong/autotest_platform.git
2. 按requirements.txt 安裝依賴:
cd autotest_platform
pip3 install -r requirements.txt
3. 數據庫配置:
3.1 創建數據庫,並執行 init.sql 建表並初始化配置數據。
3.2修改 app/config.py 中關於數據庫部分的配置: host、port、database、user、password。
db_host='localhost'
db_port='3306'
db_user='root'
db_password='yourpassword'
database='test_auto_new'
4. 郵件配置:修改 app/config.py 中關於郵件部分的配置(如不需要發送郵件,請忽略)。
# smtp 發送郵件相關配置:
is_email_enable = False #發送郵件開關
flask_host = 'http://localhost:5000' # 郵件中的報告鏈接會使用
smtp_server_host = 'smtp.163.com' # 如使用其他的smtp 服務,請修改對應host 和端口
smtp_server_port = '25'
smtp_from_email = 'youraccount@163.com' # 發送郵件的郵箱賬號
smtp_default_to_email = 'youraccount@163.com' # 默認接收郵件的郵箱賬號
smtp_server_user = smtp_from_email
smtp_server_password = 'yourpassword' # 發送郵件的郵箱密碼
5 修改 app/config.py 中關於 atx server 配置(如不需要使用 atx 測試android 設備 ,請忽略):
# atx 配置
isUseATX=True
ATXHost = 'http://localhost:8000'
啟動:
1.啟動 flask:
python run.py
此時可通過訪問 localhost:5000 訪問登錄界面。
初始用戶及密碼: admin/0
2.1 啟動 core service(selenium 的執行服務):
python core.py
2.2 啟動atx core服務:
python atx_core.py
- 基於atx 進行封裝,從數據庫中讀取需要執行的測試用例,並轉化、執行、記錄測試結果及截圖。
- 需安裝atxserver(https://github.com/openatx/atx-server),並修改 app/config.py 文件的以下內容:
# atx 配置
isUseATX=True # True 代表使用 atx
ATXHost = 'http://172.16.100.168:8002' # 對應的 atxserver 地址
3. selenium 接入(我目前是用docker 上面跑的selenium hub/node)
可以按以下兩種方式進行接入:
3.1 selenium server接入:
-
服務端啟動:
python run_service.py
將通過9998 端口監聽節點啟動、關閉狀態
-
selenium grid 節點啟動: 將app/client 目錄復制到已安裝selenium driver 的服務器/PC 中,修改client.py文件中host 為服務端對應地址,並啟動:
python client.py
服務啟動后,會啟動 selenium server,並注冊到服務器中。
3.2 其他方式(原有selenium server、selenium docker等)
- 將已啟動的selenium服務地址(如 http://172.10.XXX.XXX:4444-節點管理中。)手動添加到自動化測試
- 或直接將 server host 和 ip 添加到 test_hubs 表中。
附: docker 搭建selenium 鏡像命令:
拉取相關鏡像:
docker pull selenium/hub
docker pull selenium/node-chrome
docker pull selenium/node-firefox
啟動 hub :
docker network create grid
docker run -d -p 4444:4444 --net grid --name selenium-hub selenium/hu
啟動節點:
# 建議 NODE_MAX_INSTANCES、NODE_MAX_SESSION 兩個參數都設置為 10,便於並發執行
docker run -e NODE_MAX_INSTANCES=10 -e NODE_MAX_SESSION=10 -d --net grid -e HUB_HOST=selenium-hub selenium/node-firefox
docker run -e NODE_MAX_INSTANCES=10 -e NODE_MAX_SESSION=10 -d --net grid -e HUB_HOST=selenium-hub selenium/node-chrome
使用說明:
1. 新建用例:
用例步驟說明:
- 每個用例步驟中通過逗號進行分隔。
- 單個步驟的格式: 步驟名稱+分隔符(|)+參數列表(參數間按@@進行分隔)。如:填寫|id@@kw@@selenium, 表示步驟為“填寫”,參數列表為“id、kw、selenium”。
- 默認的參數含義:1:通過什么屬性定位目標元素(可使用id、name、class、text、xpath、css等多種定位方式進行定位) 2:目標元素對應的屬性值(如id = kw) 3:其他。
- 例如:填寫|id@@kw@@selenium: 代表通過 id = kw 查找到輸入框,並輸入 selenium 。
具體步驟說明請查看菜單:自動化測試-步驟說明。
用例說明:
例子:在百度中輸入selenium,並驗證查詢結果是否正確。
Chrome,前往|http://www.baidu.com,填寫|id@@kw@@selenium,點擊|id@@su,驗證|Web Browser Automation,截圖
步驟解析:
- Chrome: 調用 Chrome driver 進行測試。
- 前往|http://www.baidu.com : 前往目標頁。
- 填寫|id@@kw@@selenium : 在 id 為 kw 的元素中輸入 selenium。
- 點擊|id@@su : 點擊 id 為 su 的元素。
- 驗證|Web Browser Automation : 驗證頁面中是否出現 ‘Web Browser Automation’ 的文字。
- 截圖: 對當前頁面進行截圖並保存。
2.公共用例
某些公共的步驟,可以封裝為公共方法進行調用:
- 公共方法添加:新建用例,選擇用例類型為 公共用例, 所屬模塊為public。
- 公共方法調用:步驟: 公共方法|公共方法名, 如 公共方法|登錄;公共方法|查詢訂單。
3.用例管理:
還可對用例進行如下管理:
- 用例查詢
- 用例復制:新建用例時可考慮復制一條步驟類似的用例,再修改對應步驟。
- 用例刪除:邏輯刪除,可在數據庫對應表中恢復。
- 用例執行:執行單條用例。可查看對應執行記錄、截圖、或重跑用例。
4.用例集管理:
- 用例集(test suite)對應一個測試范圍,可關聯多個不同的用例。
- 執行用例集時會根據設置的並發數進行並發執行,提高測試效率。
- 用例集中的用例是從測試用例中復制而來,因此每個用例可以在多個不同的測試用例集中關聯。
- 用例集可重跑全部用例、重跑失敗用例、重跑單條用例。 注意:重跑用例時,會自動從對應測試用例中加載最新的步驟。
5.節點管理:
- 節點:可加載多個selenium grid節點,系統根據當前可用節點的數量,分配用例進行執行。
6.步驟管理:
- 步驟:現已對大部分常見步驟進行了封裝。
- 擴展封裝:可根據需要進行擴展封裝。
- - 可直接封裝selenium的方法,請參考 刷新、前往、懸浮點擊 等方法。
- - 可對selenium提供的方法進行二次封裝,請參考 點擊、填寫、選擇等方法。對應擴展代碼可在 app/core/extend.py 文件中進行管理。
update : 2018-08-24
新增android 設備使用 ATX 進行測試:
修改:
1. app/config.py 文件新增 ATXHost 配置,需要將 atx server 的地址配置到該項中
前提: 已安裝 atx server進行設備管理
關於 ATX server:
請查看這篇文章的介紹:
https://testerhome.com/topics/11738
android 用例組織:
樣例:
Android|com.your.packagename,點擊|id@@com.your.packagename:id/btn_login,等待|2,點擊|name@@GuestLogin,等待|5,截圖,
已封裝步驟:
相關的步驟已封裝在 app/core/atx_step.py 中,具體包括:
Android : 打開指定已安裝的app (通過包名)
填寫: type_text
點擊: click (by id/name/description/class)
截圖: take_screenshot
由於我測試的 app 功能較為簡單,目前只封裝了這幾個方法,如果需要可增加封裝對應的方法。
update : 2018-08-28
新增測試用例編輯器功能
這個功能有助於提高用例的輸入效率。 如下圖示是如何添加一條《在百度搜索 testerhome 並截圖》的例子:
效果如下:
update : 2018-09-19
新增在用例集執行完成后發送郵件進行通知的功能
需要在 app/config.py 文件中打開開關並配置對應的 smtp 賬號、密碼等信息
常見問題:
1:沒有可用的節點
- Q: 運行用例之后會提示這個-ERROR: no hubs is availabe!
- A: 說明沒有可以使用的selenium節點執行測試。請檢查是否已啟動對應的 selenium server,並已配置到節點管理中,而且服務器可以正常訪問該節點。 ### 2:selenium 的瀏覽器被占用
- Q:使用docker啟動的selenium 鏡像服務,如果用例執行報錯, selenium grid console中的Chrome瀏覽器好像被置灰不可用了
- A:這是因為如果執行報錯時,沒有正常退出 driver,導致對應的selenium線程持續被占用,需要等待一段時間才能釋放。建議啟動docker 的時候把最大進程設置為10, 這樣可以並發執行,提高使用率: sudo docker run -e NODE_MAX_INSTANCES=10 -e NODE_MAX_SESSION=10 -d --net grid -e HUB_HOST=selenium-hub -v /dev/shm:/dev/shm selenium/node-firefox-debug
3:selenium 相關報錯
- Q:selenium相關報錯
- A:可能對應的 selenium server版本不支持目前使用的一些功能,建議更新到較新版本的 selenium server
- 后期可以將macaca appium atx等兼容進來