基於 Jmeter 的 web 端接口自動化測試平台


之前使用 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等)

附: 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_INSTANCESNODE_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等兼容進來


免責聲明!

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



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