測試項目:若依管理平臺
架構選型1:jenkins+ant+jmeter
闡述:
jenkins配置node和item
node負責jenkins和遠程機器的配對以實現定時任務
item為jenkins的job配置,包括定時、git拉取和運行結果校驗以及觸發一些郵件企微釘釘之類的通知,當然最核心功能:觸發ant腳本的執行
ant的build.xml編寫有不同的target,每個target可以理解為一個任務,按順序執行,target可以包含執行jmeter腳本,生成jmeter報告,打壓縮包和發送郵件等一系列操作
jmeter腳本編寫接口自動化的case,可以配置一些數據驅動(用戶自定義的變量,csv,mysql等),做一些響應斷言和一些關聯操作(json和正則提取器)包括一些函數助手啊,beanshell等的使用以豐富測試手法。
任務分解:
1.jenkins關聯slave機和gitee倉庫(保證代碼拉取并推到slave上)
2.slave機部署ant和jmeter環境(保證腳本運行)
3.ant的build.xml和jmeter腳本編寫并上傳gitee(保證腳本的迭代優化)
4.jenkins配置定時任務,編寫命令行腳本移動build.xml到ant目錄并使用ant命令執行(保證使用最新的build.xml運行任務)
實際任務執行順序應該是3-4-1-2-3-3-3……即:先把腳本上傳gitee,jenkins定時去拉取推到slave上執行,后續不斷迭代和優化。
架構選型2:jenkins+python+pytest(主流方案,較靈活)
闡述:
此方案與前者的區別就是把ant+jmeter發揮的作用使用Python腳本替代,并選用pytest封裝并運行case,相較前者更靈活,不受工具的限制,但是項目代碼的封裝需要一定的技術成本,如何做到項目結構清晰合理,腳本運行高效且代碼量簡潔易維護應當作為我們不斷追求的目標。
下面針對方案2作詳細說明,如有疏漏或者您有疑問或更優解,也歡迎評論或私信,與您的交流將是推動我持續更文的極大動力。
一、jenkins搭建
1.jenkins配置slave代理
附上官網安裝步驟
需注意:默認端口8080常用,請避免端口沖突
安裝之后打開,輸入密匙進入
新建從節點,即node,只需填寫名稱、workspace路徑、標簽(用于job指定node來運行使用)和啟動方式(我們選java web方式)即可
保存之后會顯示從節點的代理連接方式
需要在從節點機器上保存agent.jar,執行下方的java -jar命令即可
可能會報錯,踩坑如下:
查了下大概原因是代理端口不能和jenkins端口一樣,端口沖突需要改一下【系統管理】-【全局安全配置】下的代理端口即可
再次執行,最后一行顯示Connected即為成功
此時刷新節點列表的狀態,等圖標的紅叉消失即為成功(可能會有一定的延遲)
2.jenkins新建item關聯slave和gitee
由于網絡原因,我們選擇gitee進行代碼管理
新建一個jenkins的item也就是job用來構建任務,添加指定運行的slave對應的label
添加源碼管理,這里選用https形式,添加憑據,輸入gitee的用戶名和密碼即可(如使用ssh形式好像是需要配置密匙,回頭可以了解一下)
注意,如果是私有倉庫會拉取失敗,建議改用公開倉庫配置。
添加定時任務
比如每天凌晨1點執行
執行命令,因為我們選用了pytest,可以直接pytest(注意:根據slave機器的類型添加構建步驟,筆者選用的是Windows機器,故選擇Windows批處理)
至此,jenkins定時觸發代碼拉取并執行腳本流程完成。
二、腳本編寫并上傳gitee
1.項目結構
待補充
2.封裝通用方法
待補充
功能 | 方法 | 庫 |
---|---|---|
測試數據存儲 | 讀取數據 | PYaml |
接口請求 | get/post | requests |
3.運行入口
選用pytest,pytest.ini配置參數
4.git hook
特定場景下觸發hook腳本(如:每次commit 、push之后,遠程服務器同步最新代碼)
from http.server import HTTPServer, BaseHTTPRequestHandler
import json
import subprocess
import os
class Resquest(BaseHTTPRequestHandler):
def handler(self):
print("data:", self.rfile.readline().decode())
self.wfile.write(self.rfile.readline())
def do_POST(self):
print("hello webhook..")
os.system('cd ./project/pear-admin-flask && git add . && git status && git stash ;git stash clear;git pull')
print("git pull finished")
if __name__ == '__main__':
host = ('', 9002)
server = HTTPServer(host, Resquest)
print("Starting server, listen at: %s:%s" % host)
server.serve_forever()