Jmeter+Ant+Jenkins接口自动化测试平台
一个完整的接口自动化测试平台需要支持接口的自动执行,自动生成测试报告,以及持续集成。 Jmeter 支持接口的测试, Ant 支持自动构建,而 Jenkins 支持持续集成,所以三者组合在一起可以构成一个功能完善的接口自动化测试平台。
1. 环境依赖
- JDK环境配置
- Jmeter安装
- Ant安装环境变量配置
- Jenkins安装
2. 环境准备
2.1 jdk环境配置
参考:https://www.cnblogs.com/silgen/p/16537198.html
2.2 jmeter安装
参考:https://www.cnblogs.com/silgen/p/16673082.html
2.3 Jenkins安装
参考:https://www.cnblogs.com/silgen/p/16849051.html
2.4 Ant安装环境变量配置
Apache Ant,是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发。
下载地址:https://ant.apache.org/bindownload.cgi
网盘链接:https://pan.baidu.com/s/17s3o-gjR5oO49vNr9zrkpA 提取码:phi3
将ant上传到服务器,解压到指定目录
[root@ZWZF-CWY-LZY-12 upload]# tar -zxvf apache-ant-1.10.13-bin.tar.gz -C /usr/local/ apache-ant-1.10.13/bin/ant apache-ant-1.10.13/bin/antRun apache-ant-1.10.13/bin/antRun.pl apache-ant-1.10.13/bin/complete-ant-cmd.pl
配置环境变量,vim /etc/profile
export ANT_HOME=/usr/local/apache-ant-1.10.13 export PATH=$PATH:$ANT_HOME/bin
加载环境变量,source /etc/profile
查看ant安装配置结果:ant -version
[root@ZWZF-CWY-LZY-12 local]# vim /etc/profile [root@ZWZF-CWY-LZY-12 local]# source /etc/profile [root@ZWZF-CWY-LZY-12 local]# ant -version Apache Ant(TM) version 1.10.13 compiled on January 4 2023
3. 平台搭建
3.1 依赖文件配置
首先在/opt目录下面新建一个文件夹 pertest(文件夹名称不要使用下划线,空格字符),并将Jmeter测试脚本放置到该文件夹中。
将Jmeter extras 文件中的 ant-jmeter-1.1.1.jar 放到Ant中的 lib文件夹中
将Jmeter extras 文件中的 jmeter-results-detail-report_21.xsl 、build.xml、collapse.png、expand.png 放到 ant目录中的 bin目录下面。
[root@ZWZF-CWY-LZY-12 lib]# cd /opt/apache-jmeter-5.4.1/extras/ [root@ZWZF-CWY-LZY-12 extras]# cp ant-jmeter-1.1.1.jar /usr/local/apache-ant-1.10.13/lib [root@ZWZF-CWY-LZY-12 extras]# cp jmeter-results-detail-report_21.xsl build.xml collapse.png expand.png /usr/local/apache-ant-1.10.13/bin/
3.2 build.xml配置
在Ant的bin目录中打开build.xml文件找到以下内容(44-49行)
<property name="testpath" value="${user.dir}"/> <property name="jmeter.home" value="${basedir}/.."/> <property name="report.title" value="Load Test Results"/> <!-- Name of test (without .jmx) --> <property name="test" value="Test"/>
根据自己的环境,修改如下:
<property name="testpath" value="/opt/pertest"/> <property name="jmeter.home" value="/opt/apache-jmeter-5.4.1"/> <property name="report.title" value="Test Report"/> <!-- Name of test (without .jmx) --> <property name="test" value="Test"/>
参数说明:
testpath: 测试计划,这里用于存放测试脚本、测试生成的文件、测试报告
jmeter.home :Jmeter目录路径
report.title :测试报告的标题
test: jmeter测试脚本的名称(无需后缀.jmx)
3.3 Jenkins配置
3.3.1 配置jdk
从主页面直接到“系统管理>全局工具配置”,点击新增JDK,在Name中填入名字(自定义,下图写成jdk),JAVA_HOME填入JDK的环境变量。【保存】
3.3.2 配置Ant
从主页面直接到“系统管理>全局工具配置”,点击新增Ant,在Name中填入名字(自定义,下图写成ant),ANT_HOME填入Ant的环境变量。【保存】
3.3.3 构建任务配置
创建一个任务,如:Api_test。进行如下配置:
① 构建环境,勾选With Ant,选择Ant Version、JDK(全局工具配置中定义的ant、jdk别名)。【保存】
② Build Steps-->Invoke Ant,选择Ant Version(全局工具配置中定义的ant别名),在Build File选项(点击“高级”)输入build.xml配置文件路径:/usr/local/apache-ant-1.10.13/bin/build.xml。【保存】
4. 执行测试
4.1 服务器/opt/pertest路径下上传测试脚本:test.jmx
4.2 在Jenkins的任务(Api_test)中执行构建
控制台输出内容详情如下:
Started by user silgen Running as SYSTEM Building in workspace /root/.jenkins/workspace/Api_test [bin] $ /usr/local/apache-ant-1.10.13/bin/ant -file build.xml Buildfile: /usr/local/apache-ant-1.10.13/bin/build.xml run: [echo] funcMode = false [jmeter] Executing test plan: /opt/pertest/test.jmx ==> /opt/pertest/test.jtl [jmeter] Creating summariser <summary> [jmeter] Created the tree successfully using /opt/pertest/test.jmx [jmeter] Starting standalone test @ Wed Jan 11 14:19:45 CST 2023 (1673417985786) [jmeter] Waiting for possible Shutdown/StopTestNow/HeapDump/ThreadDump message on port 4445 [jmeter] Warning: Nashorn engine is planned to be removed from a future JDK release [jmeter] summary + 2809 in 00:00:14 = 202.9/s Avg: 85 Min: 15 Max: 243 Err: 0 (0.00%) Active: 20 Started: 20 Finished: 0 [jmeter] summary + 6530 in 00:00:30 = 217.9/s Avg: 85 Min: 46 Max: 276 Err: 0 (0.00%) Active: 20 Started: 20 Finished: 0 [jmeter] summary = 9339 in 00:00:44 = 213.2/s Avg: 85 Min: 15 Max: 276 Err: 0 (0.00%) [jmeter] summary + 686 in 00:00:03 = 246.1/s Avg: 75 Min: 45 Max: 149 Err: 0 (0.00%) Active: 0 Started: 20 Finished: 20 [jmeter] summary = 10025 in 00:00:47 = 215.1/s Avg: 85 Min: 15 Max: 276 Err: 0 (0.00%) [jmeter] Tidying up ... @ Wed Jan 11 14:20:32 CST 2023 (1673418032789) [jmeter] ... end of run _message_xalan: xslt-report: [xslt] Processing /opt/pertest/test.jtl to /opt/pertest/test.html [xslt] Loading stylesheet /usr/local/apache-ant-1.10.13/bin/jmeter-results-detail-report_21.xsl verify-images: copy-images: [copy] Copying 1 file to /opt/pertest [copy] Copying 1 file to /opt/pertest report: [echo] Report generated at 2023/01/11 14:20 all: BUILD SUCCESSFUL Total time: 52 seconds Finished: SUCCESS
4.3 进入服务器路径/opt/pertest,查看执行结果,生成测试报告(test.html)和测试结果(test.jtl)。
在服务器本地执行ant -buildfile /usr/local/apache-ant-1.10.13/bin/build.xml,可达到同样效果,如下:
[root@qy-ggyf-zyl-32 pertest]# ant -buildfile /usr/local/apache-ant-1.10.13/bin/build.xml Buildfile: /usr/local/apache-ant-1.10.13/bin/build.xml run: [echo] funcMode = false [jmeter] Executing test plan: /opt/pertest/test.jmx ==> /opt/pertest/test.jtl [jmeter] Creating summariser <summary> [jmeter] Created the tree successfully using /opt/pertest/test.jmx [jmeter] Starting standalone test @ Wed Jan 11 14:28:49 CST 2023 (1673418529574) [jmeter] Waiting for possible Shutdown/StopTestNow/HeapDump/ThreadDump message on port 4445 [jmeter] Warning: Nashorn engine is planned to be removed from a future JDK release [jmeter] summary + 1829 in 00:00:10 = 181.4/s Avg: 91 Min: 17 Max: 269 Err: 0 (0.00%) Active: 20 Started: 20 Finished: 0 [jmeter] summary + 6246 in 00:00:30 = 208.2/s Avg: 90 Min: 46 Max: 309 Err: 0 (0.00%) Active: 20 Started: 20 Finished: 0 [jmeter] summary = 8075 in 00:00:40 = 201.5/s Avg: 90 Min: 17 Max: 309 Err: 0 (0.00%) [jmeter] summary + 1950 in 00:00:10 = 201.7/s Avg: 92 Min: 52 Max: 276 Err: 0 (0.00%) Active: 0 Started: 20 Finished: 20 [jmeter] summary = 10025 in 00:00:50 = 201.5/s Avg: 90 Min: 17 Max: 309 Err: 0 (0.00%) [jmeter] Tidying up ... @ Wed Jan 11 14:29:39 CST 2023 (1673418579674) [jmeter] ... end of run _message_xalan: xslt-report: [xslt] Processing /opt/pertest/test.jtl to /opt/pertest/test.html [xslt] Loading stylesheet /usr/local/apache-ant-1.10.13/bin/jmeter-results-detail-report_21.xsl verify-images: copy-images: [copy] Copying 1 file to /opt/pertest [copy] Copying 1 file to /opt/pertest report: [echo] Report generated at 2023/01/11 14:29 all: BUILD SUCCESSFUL Total time: 55 seconds [root@qy-ggyf-zyl-32 pertest]#
5. 查看测试报告
6. 批量运行多个脚本
6.1 修改配置文件
由于jmeter默认提供的build.xml不支持通配符来批量运行多个脚本,所以这里修改build.xml配置文件来实现批量执行,具体脚本如下:
注:将原有的build.xml文件备份,使用如下配置文件信息。
<?xml version="1.0" encoding="UTF-8"?> <project name="ant-jmeter-test" default="run" basedir="."> <!-- 根据时间戳来命名测试报告名称--> <tstamp> <format property="time" pattern="yyyyMMddhhmm" /> </tstamp> <!-- 需要改成自己本地的 Jmeter 目录--> <property name="jmeter.home" value="/opt/apache-jmeter-5.4.1" /> <!-- 设置脚本的测试目录--> <property name="jmeter.dir" value="/opt/pertest" /> <!-- jmeter生成jtl格式的结果报告的路径--> <property name="jmeter.result.jtl.dir" value="${jmeter.dir}/report/jtl" /> <!-- jmeter生成html格式的结果报告的路径--> <property name="jmeter.result.html.dir" value="${jmeter.dir}/report/html" /> <!-- 生成的报告的前缀--> <property name="ReportName" value="TestReport" /> <property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl" /> <property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}${time}.html" /> <target name="run"> <antcall target="test" /> <antcall target="report" /> </target> <target name="test"> <taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" /> <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl"> <!-- 声明要运行的脚本。"*.jmx"指包含此目录下的所有jmeter脚本,也可以指定具体执行的脚本--> <testplans dir="${jmeter.dir}" includes="*.jmx" /> <property name="jmeter.save.saveservice.output_format" value="xml"/> </jmeter> </target> <target name="report"> <tstamp> <format property="report.datestamp" pattern="yyyy/MM/dd HH:mm" /></tstamp> <xslt classpathref="xslt.classpath" force="true" in="${jmeter.result.jtlName}" out="${jmeter.result.htmlName}" style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl"> <param name="dateReport" expression="${report.datestamp}"/> </xslt> <!-- 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝 --> <copy todir="${jmeter.result.html.dir}"> <fileset dir="${jmeter.home}/extras"> <include name="collapse.png" /> <include name="expand.png" /> </fileset> </copy> </target> <path id="xslt.classpath"> <fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/> <fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/> </path> </project>
6.2 上传多个脚本到路径:/opt/pertest
6.3 在Jenkins执行构建任务
控制台输出,如下:
Started by user silgen Running as SYSTEM Building in workspace /root/.jenkins/workspace/Api_test [bin] $ /usr/local/apache-ant-1.10.13/bin/ant -file build.xml Buildfile: /usr/local/apache-ant-1.10.13/bin/build.xml run: test: [jmeter] Executing test plan: /opt/pertest/凭证箱列表查询.jmx ==> /opt/pertest/report/jtl/TestReport202301110422.jtl [jmeter] Creating summariser <summary> [jmeter] Created the tree successfully using /opt/pertest/凭证箱列表查询.jmx [jmeter] Starting standalone test @ Wed Jan 11 16:22:50 CST 2023 (1673425370183) [jmeter] Waiting for possible Shutdown/StopTestNow/HeapDump/ThreadDump message on port 4445 [jmeter] Warning: Nashorn engine is planned to be removed from a future JDK release [jmeter] summary = 1 in 00:00:00 = 2.0/s Avg: 220 Min: 220 Max: 220 Err: 0 (0.00%) [jmeter] Tidying up ... @ Wed Jan 11 16:22:50 CST 2023 (1673425370994) [jmeter] ... end of run [jmeter] Executing test plan: /opt/pertest/登录.jmx ==> /opt/pertest/report/jtl/TestReport202301110422.jtl [jmeter] Creating summariser <summary> [jmeter] Created the tree successfully using /opt/pertest/登录.jmx [jmeter] Starting standalone test @ Wed Jan 11 16:22:52 CST 2023 (1673425372803) [jmeter] Waiting for possible Shutdown/StopTestNow/HeapDump/ThreadDump message on port 4445 [jmeter] Warning: Nashorn engine is planned to be removed from a future JDK release [jmeter] summary = 2 in 00:00:01 = 3.7/s Avg: 96 Min: 15 Max: 177 Err: 0 (0.00%) [jmeter] Tidying up ... @ Wed Jan 11 16:22:53 CST 2023 (1673425373735) [jmeter] ... end of run report: [xslt] Processing /opt/pertest/report/jtl/TestReport202301110422.jtl to /opt/pertest/report/html/TestReport202301110422.html [xslt] Loading stylesheet /opt/apache-jmeter-5.4.1/extras/jmeter-results-detail-report_21.xsl [copy] Copying 2 files to /opt/pertest/report/html BUILD SUCCESSFUL Total time: 6 seconds Finished: SUCCESS
6.4 查看测试报告
本文来自博客园,作者:查拉图斯特拉面条,转载请注明原文链接:https://www.cnblogs.com/n00dle/p/17040615.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现