《基于Jmeter的性能测试框架搭建》改进一
《基于Jmeter的性能测试框架搭建》文末笔者提到了不少待改进之处,如下所示。
结合笔者所在项目组现状,优先解决了以下几个问题。
- Grafana性能图表实时展现,测试过程中需实时截图形成测试报告,不够人性化。
解决方案:自动生成测试报告并邮件通知。- Grafana性能图表需测试人员实时监控,人力成本较高。
解决方案:自动生成测试报告并邮件通知。- 多脚本构建的话,无法区分Grafana展现的性能图表对应哪个脚本。
解决方案:传参区分脚本,并生成每个接口对应的测试报告。- 如果考虑持续监控,可加入预警功能。
解决方案:依赖Grafana的预警功能。- 未能自动生成测试报告。
解决方案:自动生成测试报告并邮件通知。- 需登录jenkins停止脚本构建,操作不够便利。
解决方案:前端增加停止构建操作。- 每次只能提交一个脚本进行构建。
解决方案:支持批量构建。
本期改进
1、多脚本构建的话,无法区分Grafana展现的性能图表对应哪个脚本。 最终解决方案:将脚本名称写入influxdb库,然后再通过Grafana配置读取。
- 创建influxdb数据库interfaceName并插入数据(脚本名称)
org.influxdb
influxdb-java
2.5
//创建数据库,并写入对应脚本的名称
public static void influxdb(String interfaceName) throws Exception {
Map configMap = new HashMap();
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 tags = new HashMap();
tags.put("system", configMap.get("InfluxdbSystem"));
//对应的应用Map fields = new HashMap();
fields.put("interfaceName", interfaceName);
//面板展现的脚本名称svr.insert("interface", tags, fields);
System.out.println(i);
}
}
- 配置Grafana的datasource。
文章图片
DataSource配置 - 配置Grafana面板配置。
文章图片
面板配置 - 执行压测小工具提交脚本,展现性能数据(注意图二展现了脚本名称)。
文章图片
压测小工具
文章图片
性能图表
文章图片
构建日志
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
文章图片
可用命令 参考资料
【《基于Jmeter的性能测试框架搭建》改进一】Influxdb数据库读写
推荐阅读
- 慢慢的美丽
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量
- 《跨界歌手》:亲情永远比爱情更有泪点
- 诗歌:|诗歌: 《让我们举起世界杯,干了!》
- 期刊|期刊 | 国内核心期刊之(北大核心)
- 《魔法科高中的劣等生》第26卷(Invasion篇)发售
- 人间词话的智慧
- 《一代诗人》37期,生活,江南j,拨动心潭的一泓秋水
- 广角叙述|广角叙述 展众生群像——试析鲁迅《示众》的展示艺术
- 书评——《小行星》