Jenkins接口压力测试持续集成与持续集成体系建设
接口压力自动化测试项目
- 接口应用:spring-boot-restful-api
- 接口功能:用户信息的操作
- 请求方法:GET/POST
- 压力脚本开发工具:JMeter
- 压测脚本位置:https://github.com/jinglv/api-object-jmeter
自动化压测控制逻辑
JMeter讲解及本地执行
JMeter脚本,根据spring-boot-restful-api该项目的接口,进行脚本编写
注意:脚本调试成功后,将断言的组件禁止,如果不禁止在压测过程中会影响到结果
执行Shell脚本(Linux和MacOS系统)如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47!/usr/bin/env bash
压测脚本模板中设定的压测时间应为60秒
export jmx_template="RESTFulApi-Test-Plan"
export suffix=".jmx"
export jmx_template_filename="${jmx_template}${suffix}"
shellcheck disable=SC2006
shellcheck disable=SC2155
export os_type=`uname`
需要在系统变量中定义jmeter根目录的位置,如下
export jmeter_path="apache-jmeter-5.4.1"
echo "自动化压测开始"
压测并发数列表
thread_number_array=(10 20 30)
for num in "${thread_number_array[@]}"
do
# 生成对应压测线程的jmx文件
export jmx_filename="${jmx_template}_${num}${suffix}"
export jtl_filename="test_${num}.jtl"
export web_report_path_name="web_${num}"
# 环境清理
rm -f "${jmx_filename}" "${jtl_filename}"
rm -rf "${web_report_path_name}"
cp ${jmx_template_filename} "${jmx_filename}"
echo "生成jmx压测脚本 ${jmx_filename}"
if [[ "${os_type}" == "Darwin" ]]; then
sed -i "" "s/thread_num/${num}/g" "${jmx_filename}"
else
sed -i "s/thread_num/${num}/g" "${jmx_filename}"
fi
# JMeter 静默压测
# shellcheck disable=SC2154
"${jmeter_path}"/bin/jmeter -n -t "${jmx_filename}" -l "${jtl_filename}"
# 生成Web压测报告
"${jmeter_path}"/bin/jmeter -g "${jtl_filename}" -e -o "${web_report_path_name}"
rm -f "${jmx_filename}" "${jtl_filename}"
done
echo "自动化压测全部结束"将JMeter脚本和执行Shell脚本放到一个工厂下,本地执行查看结果
执行完成,查看本地生成的测试报告
Jenkins接口压力测试任务
- 新建自由风格任务
- 添加Git源码库地址
- 添加自动化压测运行代码
- 导出测试报告
注意:Jenkins需要配置的地方
- 添加Groovy Postbuild(该插件,需要安装)解除Jenkins对JS渲染的限制
- System.setProperty(“hudson.model.DirectoryBrowserSupport.CSP”,””)
- 导出HTML测试报告,需要安装插件:HTML Publisher
保存后,回到Build界面,点击[Build Now]进行执行
回到Build界面
点击“自动化压测-并发10”查看测试报告
小结
- 自动化压测-jmeter+shell
- Jenkins与jmeter压测,环境要求
- 自动压测运行逻辑
- JMeter输出压力测试报告
- 压测报告与Jenkins集成
- Jenkins任务:源码同步、运行任务、展示测试报告
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Jing's Blog!