Jmeter+Ant+Python 介面自動化測試

leeyoshinari發表於2020-05-12

ATI_Jmeter

介紹

本專案是一整套使用Jmeter+Ant+Python完成介面自動化測試的解決方案;特別是多系統的測試任務執行,要比網上的教程方便的多。

功能:

  1. 使用Jmeter維護介面測試用例;
  2. 使用Ant執行測試任務,並生成測試報告;
  3. 使用Python完成郵件傳送及任務排程;
  4. 通過get請求觸發任務執行,排程方式靈活;
  5. 具有定時功能,可週期性或者定時執行測試任務;
  6. 通過監控埠,當服務重啟後,可自動執行測試任務;
  7. 支援自動從git拉取最新版本;

實現:

  1. 使用Ant執行Jmeter指令碼,並生成測試報告;
  2. 考慮到郵件正文內容可讀性,定製化修改測試報告模板;
  3. 使用正規表示式提取測試報告中的資訊,重新組合成郵件正文;
  4. 通過get請求觸發測試任務的執行;
  5. 通過執行緒池+佇列的方式執行測試任務,可靈活設定執行緒池大小;
  6. 使用aiohttp框架啟動後臺服務,將測試報告加入到靜態資源中,可通過連結訪問;
  7. 每次執行測試任務前,自動從git拉取最新版本;

生成的測試報告:

  1. Ant生成的測試報告,長這個樣子
  2. 郵件收到的測試報告,長這個樣子

部署

1、Jmeter和Ant部署參考網上教程,主要介紹測試報告模板修改和build.xml檔案

測試報告模板是在jmeter自帶模板的基礎上修改的,主要修改詳見res資料夾中的report截圖,說明如下,其他小的修改這裡不贅述,可使用文件比較工具自行比較檢視,也可線上文件比較 ;

(1) 截圖中標註的修改1和修改5,因為預設模板帶有2個png的靜態檔案,生成測試報告時必須帶上這2個靜態檔案,否則測試報告頁面不好看,因此,需要去掉這2個靜態檔案;

(2) 截圖中標註的修改2,測試報告一般重點關注測試失敗的用例,因此,需要把測試失敗的用例展示在前面;

(3) 截圖中標註的修改3,把標題改成中文,因為測試報告會發給較多的人;如果你在外企工作,可以改成英文,但是相對應的指令碼中的正規表示式也需要修改;

(4) 截圖中標註的修改4,新增了一個空的span標籤,用於新增自定義的內容,提高傳送的測試報告郵件的可讀性;

(5) 其他未標註出來的修改點,主要是預設模板沒有我想看到的資料,把一些沒有展示的資料展示出來,把一些“沒用的”資料隱藏起來,以及一些樣式的修改;

build.xml檔案如下,具體配置已詳細說明。強調:為了方便測試報告統一管理,也為了能夠自動傳送郵件,所有系統的build.xml中的測試報告路徑必須是同一個資料夾

2、克隆repository

git clone https://github.com/leeyoshinari/ATI_Jmeter.git

3、測試用例放置

(1)所有測試用例放在一個統一的資料夾中,例如testCase資料夾;

(2)針對不同系統的不同測試用例,可單獨再放入一個資料夾中管理,例如:百度的測試用例放在baidu中、百度的BVT測試用例放在baidu_bvt中、騰訊的測試用例放在tencent中;

(3)每個系統的測試用例資料夾中,都需要放一個配置好的build.xml檔案;注意:所有系統的測試報告路徑必須是同一個資料夾;

(4)測試用例資料夾具體結構如下:

強烈建議資料夾及檔名稱使用英文

為什麼要按照上面的要求放置測試用例?這樣放置方便執行測試任務,通過get請求http://ip:port/run/baidu就可以執行百度的測試用例,請求http://ip:port/run/baidu_bvt就可以執行百度BVT的測試用例。

4、修改配置檔案config.conf

(1)執行緒池大小,建議設定1就夠了;如確實排程較多測試用例的執行,可酌情增加;

(2)測試用例路徑和測試報告路徑,建議使用絕對路徑;其中測試報告路徑應和build.xml檔案中的路徑保持一致;

(3)如介面自動化指令碼維護在git上,可配置git本地倉庫路徑,每次執行任務前,自動從git上拉取最新版本,預設拉取主分支;前提是已經clone到本地了;

(4)郵件傳送配置,請確認SMTP服務配置正確;郵箱登入密碼配置,請在sendEmail.py檔案中第48行設定,如果密碼不想讓其他人看到,請將該py檔案進行編譯,或者直接將這個repository打包,具體打包方法,請往下看;

5、執行

Linux:

nohup python3 server.py &

Windows

python server.py

6、打包

經過前5步,如果該repository可以啟動,且執行測試任務成功,則可以進行打包,使用pyinstaller進行打包。

pyinstaller安裝自行查詢教程,須確保安裝正確,否則打包會報錯,下面直接進行打包:

(1)進入ATI_Jmeter資料夾,執行命令:

pyinstaller server.py -p schedule.py -p logger.py -p config.py -p sendEmail.py -p testing.py --hidden-import logger --hidden-import schedule --hidden-import config --hidden-import sendEmail --hidden-import testing

(2)打包完成後,在當前路徑下會生成dist資料夾,進入dist/server即可找到可執行檔案server;

(3)將配置檔案config.conf拷貝到dist/server資料夾下,並修改配置檔案;

(4)如需要部署在其他伺服器上,可將dist/server整個資料夾拷貝到其他伺服器,啟動server

nohup ./server &

7、CI/CD,以Jenkins為例,在Jenkins構建後操作中增加一個get請求,請求的url為http://IP:PORT/run/系統名稱,此處系統名稱應和testCase用例資料夾中的對應的系統名稱保持一致。

8、如果你所在的專案還沒有用到CI/CD,或者專案本身有較多配置項,每次手動更改配置重啟專案後,也想自動執行測試任務;亦或是你不想配置CI/CD,則需要執行客戶端;

進入client資料夾,將指令碼和配置檔案拷貝到專案所在的伺服器上,執行即可,也可以按照步驟6的方式進行打包。

修改配置檔案config.conf:

(1)系統名稱必須和測試用例資料夾中的名稱保持一致,例如可配置成baidu;如需測試多個系統,名字用英文逗號,隔開;

(2)系統埠號即系統佔用的埠號;如需監控多個系統的埠,埠用英文逗號,隔開;

注意:如測試多個系統,系統名稱的排序和系統埠的排序必須保持一致

注意

1、如需部署client,部署的伺服器必須支援netstat命令,以便根據埠號查程式號;僅支援Linux系統;

2、已經測試的版本:Jmeter-5.2.1、Ant-1.10.7

相關文章