《基于Jmeter的性能測試框架搭建》文末筆者提到了不少待改進(jìn)之處修然,如下所示。
- Grafana性能圖表實時展現(xiàn)艰猬,測試過程中需實時截圖形成測試報告,不夠人性化埋市。
解決方案:自動生成測試報告并郵件通知冠桃。- Grafana性能圖表需測試人員實時監(jiān)控,人力成本較高道宅。
解決方案:自動生成測試報告并郵件通知食听。- 多腳本構(gòu)建的話,無法區(qū)分Grafana展現(xiàn)的性能圖表對應(yīng)哪個腳本污茵。
解決方案:傳參區(qū)分腳本樱报,并生成每個接口對應(yīng)的測試報告。- 如果考慮持續(xù)監(jiān)控泞当,可加入預(yù)警功能迹蛤。
解決方案:依賴Grafana的預(yù)警功能。- 未能自動生成測試報告襟士。
解決方案:自動生成測試報告并郵件通知盗飒。- 需登錄jenkins停止腳本構(gòu)建,操作不夠便利陋桂。
解決方案:前端增加停止構(gòu)建操作箩兽。- 每次只能提交一個腳本進(jìn)行構(gòu)建。
解決方案:支持批量構(gòu)建章喉。
結(jié)合筆者所在項目組現(xiàn)狀汗贫,優(yōu)先解決了以下幾個問題。
本期改進(jìn)
1秸脱、多腳本構(gòu)建的話落包,無法區(qū)分Grafana展現(xiàn)的性能圖表對應(yīng)哪個腳本。
最終解決方案:將腳本名稱寫入influxdb庫摊唇,然后再通過Grafana配置讀取咐蝇。
- 創(chuàng)建influxdb數(shù)據(jù)庫interfaceName并插入數(shù)據(jù)(腳本名稱)
<!-- 依賴關(guān)系 -->
<dependency>
<groupId>org.influxdb</groupId>
<artifactId>influxdb-java</artifactId>
<version>2.5</version>
</dependency>
//創(chuàng)建數(shù)據(jù)庫,并寫入對應(yīng)腳本的名稱
public static void influxdb(String interfaceName) throws Exception {
Map<String,String> configMap = new HashMap<String, String>();
configMap = getProperties("config\\config.properties");
InfluxDBUtil svr = new InfluxDBUtil(configMap.get("Influxdb")) //對應(yīng)測試機地址
.setDatabase("interfaceName", "autogen") //數(shù)據(jù)庫名
.setAuthentication("admin", "admin") //grafana datasource配置的用戶名和密碼
.setRetentionPolicy("30m", 1)
.build();
for (int i = 0; i < 5; i++) {
Map<String, String> tags = new HashMap<String ,String>();
tags.put("system", configMap.get("InfluxdbSystem")); //對應(yīng)的應(yīng)用
Map<String, Object> fields = new HashMap<String, Object>();
fields.put("interfaceName", interfaceName); //面板展現(xiàn)的腳本名稱
svr.insert("interface", tags, fields);
System.out.println(i);
}
}
-
配置Grafana的datasource巷查。
-
配置Grafana面板配置有序。
- 執(zhí)行壓測小工具提交腳本抹腿,展現(xiàn)性能數(shù)據(jù)(注意圖二展現(xiàn)了腳本名稱)。
2旭寿、需登錄jenkins停止腳本構(gòu)建警绩,操作不夠便利。
最終解決方案:無需解決盅称,測試人員需登錄jenkins查看構(gòu)建日志肩祥,分析構(gòu)建結(jié)果。
3缩膝、每次只能提交一個腳本進(jìn)行構(gòu)建混狠。
最終解決方案:多腳本提交時,jenkins按腳本提交的先后順序排隊構(gòu)建疾层。
同一套壓測環(huán)境将饺,為了保證單個接口壓測的準(zhǔn)確性,筆者并不建議并行構(gòu)建多個接口痛黎,可以通過壓測小工具提交腳本串行構(gòu)建予弧。
觸發(fā)Jenkins構(gòu)建擴展
除了《基于Jmeter的性能測試框架搭建》提及的webhook,Poll SCM觸發(fā)jenkins構(gòu)建,也可以通過curl或jenkins-cli觸發(fā)構(gòu)建舅逸。
curl命令構(gòu)建
curl -i -u 'jenkinsUserName:jenkinsPassword' -X POST -H "$CRUMB" "http://jenkinsurl/jenkins/job/jobName/build?delay=0sec"
jenkins-cli構(gòu)建
-
下載jenkins-cli.jar
通過jenkinsUrl/cli下載對應(yīng)版本的jenkins-cli.jar桌肴。
通過build命令觸發(fā)構(gòu)建
//觸發(fā)jenkins構(gòu)建
configMap = getProperties("config\\config.properties");
String jenkinsCliUrl = "lib\\lib\\jenkins-cli.jar";
String jenkinsUrl = configMap.get("JenkinsUrl");
String jobName = configMap.get("JenkinsJobName");
String userName = configMap.get("JenkinsUserName");
String password = configMap.get("JenkinsPassword");
String commandStr = "java -jar " + jenkinsCliUrl + " -s " + jenkinsUrl + " build " + jobName + " --username " + userName + " --password " + password;
Runtime.getRuntime().exec(commandStr); //觸發(fā)jenkins構(gòu)建
需要注意的是,通過jenkins-cli方式觸發(fā)構(gòu)建琉历,需設(shè)置jenkins的全局安全配置為“任何用戶可以做任何事(沒有任何限制)”或勾選“Allow anonymous read access”坠七,否者會報錯。
- 更多的命令可通過help或在jenkinsUrl/cli查看
java -jar jenkins-cli.jar -s http://jenkinsUrl/jenkins/ help