一、平台简介
一个完整的接口自动化测试平台需要支持接口的自动执行,自动生成测试报告,以及持续集成。 Jmeter 支持接口的
测试, Ant 支持自动构建,而 Jenkins 支持持续集成,所以三者组合在一起可以构成一个功能完善的接口自动化测试平台。
二、环境准备
- JDK 环境配置
自行百度
- Jmeter 安装 Jmeter下载安装,插件使用,mave,git,tomcat环境变量配置
百度网盘下载
链接:https://pan.baidu.com/s/1bpM0XOGKoYCysVNvU4_ikg
提取码:3xr5
复制这段内容后打开百度网盘手机App,操作更方便哦 - Ant 安装环境变量配置 Ant的安装与配置
- Jenkins 安装 jinkens本地安装部署,jenkins配置(一)
jenkins插件
1 .下载插件: Manage Jenkins--- Manage Plugins---高级 ---可选插件 搜索 ant
下载安装
-
我这里是我已经安装好了
2. 全局配置 ant的目录
- Manage Jenkins--Global Tool Configuration--搜 ant
三、平台搭建
依赖文件配置
1. 首先在 Jmeter bin目录下面新建一个文件夹 testcase (文件夹名称不要使用下划线,空格字符),并将 Jemter 测试脚本放置到该文件夹中
。
2. 将 Jmeter extras 文件中的 ant-jmeter-1.1.1.jar 放到 Ant 中的 lib 文件夹中
3. 将 Jmeter extras 文件中的 build.xml 放到 第一步testcase下面。
上面的build.xml用下面百度网盘下载的,内容比较丰富点
链接:https://pan.baidu.com/s/1chMgBy2dbmR5JjahF4cNSw
提取码:p7mi
复制这段内容后打开百度网盘手机App,操作更方便哦
4. jmeter.properties 修改 jmeter.save.saveservice.output_format=csv 成 jmeter.save.saveservice.output_format=xml
(修改原因: jmeter执行结果文件默认保存的是csv格式,不是xml格式,csv无法转化成html格式)
5 配置 D:\software\JMETER4.0\apache-jmeter-4.0\bin\testcase目录下的文件
build文件解析
创建工程 构建处 可以写上需要执行的命令
mail解析
- qq邮箱的 mailport 要设置为25,我设置465一直报错。
完整XML 代码
<?xml version="1.0" encoding="UTF-8"?>
<project name="接口性能监控" default="all" basedir=".">
<tstamp>
<format property="time" pattern="yyyyMMddhhmm" />
</tstamp>
<property name="encoding" value="UTF-8" />
<!-- 需要改成自己本地的 Jmeter 目录-->
<property name="jmeter.home" value="D:\software\JMETER4.0\apache-jmeter-4.0" />
<property name="report.title" value="阿登接口性能测试"/>
<!-- jmeter生成jtl格式的结果报告的路径-->
<property name="jmeter.result.jtl.dir" value="${jmeter.home}/bin/testcase/report/jtl" />
<!-- jmeter生成html格式的结果报告的路径-->
<property name="jmeter.result.html.dir" value="${jmeter.home}/bin/testcase/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="all">
<antcall target="test" />
<antcall target="report" />
<antcall target="mail" />
</target>
<target name="test">
<taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />
<jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
<!-- 声明要运行的脚本"*.jmx"指包含此目录下的所有jmeter脚本-->
<testplans dir="${jmeter.home}/bin/testcase" includes="*.jmx" />
<property name="jmeter.save.saveservice.output_format" value="xml"/>
</jmeter>
</target>
<path id="xslt.classpath">
<fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/>
<fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/>
</path>
<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="showData" expression="${show-data}"/>
<param name="dateReport" expression="${report.datestamp}"/>
<param name="titleReport" expression="${report.title}:${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>
<property name="mail_from" value="1774080833@qq.com" />
<property name="password" value="owfcgrvbddgpebfi" />
<!--mail_to:发送列表,多个之间逗号间隔 -->
<property name="mail_to" value="330524840@qq.com,1774080833@qq.com" />
<property name="mailport" value="25" />
<!--邮箱需要开通smtp服务-->
<property name="mailhost" value="smtp.qq.com" />
<target name="mail">
<loadfile property="report" srcFile="${jmeter.result.htmlName}" encoding="${encoding}" />
<mail from="${mail_from}" tolist="${mail_to}" mailport="${mailport}" mailhost="${mailhost}" user="${mail_from}" password="${password}" subject="TestReport-${ant.project.name}" messagemimetype="text/html">
<message>
本轮构建的结果如下:
${report}
</message>
</mail>
<delete file="${jmeter.result.htmlName}" />
</target>
</project>
测试一下
cd 到jmeter bin目录的testcase下面 运行 ant命名
--会在report下面 html和jtl 生成报告
四、 使用Jenkins构建自动化平台
1.打开Jenkins,新建job,选择“构建一个自由风格的软件项目”:
2. 安装插件: 进入系统管理- 管理插件- 可选插件,安装 Performance plugin、HTML Publisher plugin、Ant Plugin
比如:
3. 配置过程
1) 源码管理,没有通过GIT或者SVN管理,所以选择“无”:
2) 构建,点击【增加构建步骤】按钮,选择“invoke Ant”,用来执行Ant:
3)配置invoke Ant参数,其中Build File填写build.xml文件路径
4)在构建后的操作中,点击【增加构建后操作步骤】,Publish HTML report 和 Publish Performance test result report
- 配置“Publish html reports”,其中HTML directory to archive填写html报告保存路径:
- 配置“Publish Performance test result report”,其中Source data files填写jtl格式报告的保存路径:
7) 也可以添加构建触发器
链接:https://pan.baidu.com/s/1pnGteA3HlERVXeS-CkDskA
提取码:mii2
踩坑处理
-
java.lang.ClassNotFoundException: javax.mail.internet.MimeMessage
解决办法:下载4个插件的jar包 放在ant lib下面,可在下面网盘下载。
下面是百度网盘下载jar包地址
链接:https://pan.baidu.com/s/11Msl5jeNOFLsPEVfXDcECg
提取码:a78i
2.Could not connect to SMTP host: smtp.qq.com, port: 465, response: -1
解决: 端口设置成 25
报告优化 释放洪荒之力
进入 Jmeter 的 bin 目录,找到 jmeter.properties 文件打开。然后将以下代码取消注释状态,并改为 true
jmeter.save.saveservice.data_type=true
jmeter.save.saveservice.label=true
jmeter.save.saveservice.response_code=true
# response_data is not currently supported for CSV output
jmeter.save.saveservice.response_data=true
# Save ResponseData for failed samples
jmeter.save.saveservice.response_data.on_error=true
jmeter.save.saveservice.response_message=true
jmeter.save.saveservice.successful=true
jmeter.save.saveservice.thread_name=true
jmeter.save.saveservice.time=true
jmeter.save.saveservice.subresults=true
jmeter.save.saveservice.assertions=true
jmeter.save.saveservice.latency=true
# Only available with HttpClient4
jmeter.save.saveservice.connect_time=true
jmeter.save.saveservice.samplerData=true
jmeter.save.saveservice.responseHeaders=true
jmeter.save.saveservice.requestHeaders=true
jmeter.save.saveservice.encoding=true
jmeter.save.saveservice.bytes=true
# Only available with HttpClient4
jmeter.save.saveservice.sent_bytes=true
jmeter.save.saveservice.url=true
jmeter.save.saveservice.filename=true
jmeter.save.saveservice.hostname=true
jmeter.save.saveservice.thread_counts=true
jmeter.save.saveservice.sample_count=true
jmeter.save.saveservice.idle_time=true
最后执行即可生成最新的报告:样式如下,可以清晰看到每一个请求发送,响应内容.
cd 到jmeter bin目录的testcase下面 运行 ant命名--会在report下面 html和jtl 生成报告