?
《基于Jmeter的性能測試框架搭建》文末筆者提到了不少待改進之處,如下所示。
Grafana性能圖表實時展現,測試過程中需實時截圖形成測試報告,不夠人性化。
解決方案:自動生成測試報告并郵件通知。Grafana性能圖表需測試人員實時監控,人力成本較高。
解決方案:自動生成測試報告并郵件通知。多腳本構建的話,無法區分Grafana展現的性能圖表對應哪個腳本。
解決方案:傳參區分腳本,并生成每個接口對應的測試報告。如果考慮持續監控,可加入預警功能。
解決方案:依賴Grafana的預警功能。未能自動生成測試報告。
解決方案:自動生成測試報告并郵件通知。需登錄jenkins停止腳本構建,操作不夠便利。
解決方案:前端增加停止構建操作。每次只能提交一個腳本進行構建。
解決方案:支持批量構建。
結合筆者所在項目組現狀,優先解決了以下幾個問題。
本期改進
1、多腳本構建的話,無法區分Grafana展現的性能圖表對應哪個腳本。
最終解決方案:將腳本名稱寫入influxdb庫,然后再通過Grafana配置讀取。
-
創建influxdb數據庫interfaceName并插入數據(腳本名稱)
<!-- 依賴關系 -->
<dependency>
<groupId>org.influxdb</groupId>
<artifactId>influxdb-java</artifactId>
<version>2.5</version>
</dependency>
//創建數據庫,并寫入對應腳本的名稱
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")) //對應測試機地址
.setDatabase("interfaceName", "autogen") //數據庫名
.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")); //對應的應用
Map<String, Object> fields = new HashMap<String, Object>();
fields.put("interfaceName", interfaceName); //面板展現的腳本名稱
svr.insert("interface", tags, fields);
System.out.println(i);
}
}
-
配置Grafana的datasource。
DataSource配置
-
配置Grafana面板配置。
面板配置
-
執行壓測小工具提交腳本,展現性能數據(注意圖二展現了腳本名稱)。
壓測小工具
性能圖表
2、需登錄jenkins停止腳本構建,操作不夠便利。
最終解決方案:無需解決,測試人員需登錄jenkins查看構建日志,分析構建結果。
構建日志
3、每次只能提交一個腳本進行構建。
最終解決方案:多腳本提交時,jenkins按腳本提交的先后順序排隊構建。
同一套壓測環境,為了保證單個接口壓測的準確性,筆者并不建議并行構建多個接口,可以通過壓測小工具提交腳本串行構建。
????
jenkins構建
觸發Jenkins構建擴展
除了《基于Jmeter的性能測試框架搭建》提及的webhook,Poll SCM觸發jenkins構建,也可以通過curl或jenkins-cli觸發構建。
curl命令構建
curl -i -u 'jenkinsUserName:jenkinsPassword' -X POST -H "$CRUMB" "http://jenkinsurl/jenkins/job/jobName/build?delay=0sec"
jenkins-cli構建
-
下載jenkins-cli.jar
通過jenkinsUrl/cli下載對應版本的jenkins-cli.jar。
jenkins-cli.jar下載
-
通過build命令觸發構建
//觸發jenkins構建
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); //觸發jenkins構建
需要注意的是,通過jenkins-cli方式觸發構建,需設置jenkins的全局安全配置為“任何用戶可以做任何事(沒有任何限制)”或勾選“Allow anonymous read access”,否者會報錯。
全局安全配置
-
更多的命令可通過help或在jenkinsUrl/cli查看
java -jar jenkins-cli.jar -s http://jenkinsUrl/jenkins/ help
?
可用命令