其实这个方案,我在本论坛已经看到不少于 2 篇的实现文档,我为什么还要写这篇,其一,为了给自己一个总结,其二,在部署过程中遇到过一些坑,在这分享出来,也希望能给需要的人一个参考。方案很久之前都弄好了,只是才分享出来,也因为比较懒,写文档总是明日复明日。。。顺便吐槽一下,用 onenote 做笔记转成 markdown 发上来成本好高啊
当选择这套方案的时候,很多人会问,为什么选择 Jmeter 做 Case 管理?为什么不自己写框架?说实话,自己写框架有很大优势,比如易于拓展,易于定 制。Testhome 上也有很多很牛逼的框架,看着就让人流口水的。很多大公司都是自己写的框架,有 WEB 界面(我对界面有偏爱),有简洁的 Case 编写方式,有很好 用的录制方法…以至于我曾经也尝试写过一个(Java+Testng 执行 +Xml 管理 Case),但是过程很坎坷,遇到了很多坑(技术积累不足是很重要的一方面)。例如编写 Case 的时候调试很麻烦,后续拓展需要不断维护(不断封装新的参数获取方法)等等。所以,最终选择了它,大家可以自己尝试体会下。
Jmeter 的用例格式为 jmx 文件,实际为 xml 格式,感兴趣可以学习下自己定制生成想要的 jmx 文件。
去掉注释(#),修改 csv 为 xml
添加 jtl 文件结果参数:
根据想要保存的参数修改,若不会可参照后文第三方模板网址给出的参数修改。
修改后别忘记去掉注释(#)
Jenkins 插件安装方法本文不做介绍,感兴趣的可以查资料学习下。
编辑catalina.sh文件,加入环境变量,否则jenkins会报找不到Ant错误
#See the license for the……
JAVA_HOME=/usr/lib/jvm/jdk1.8.0_31
Export JENKINS_HOME="/root/.jenkins"
配置截图:
配置说明:
Reponsitory URL:填写仓库 url 地址
Add 按钮:添加 svn 的用户名密码
其他选项:按需配置
功能:html 报告展示
配置截图:
配置说明:
HTML directory to archive:填写生成 html 文件的路径
index page[s]:填写展示报告的主页
其他选项:按需填写
原理说明:
本插件并不会自己产生 html 文件,而是通过 xslt 转化 xml 生成的报告
xslt 可以自己在服务器中安装,也可以通过通过 Ant 配置文件指定 jar 包,本文就是通过 Ant 指定 jmeter 内部集成的 jar 包
生成的 html 文件并不是在 jenkins 中默认的报告路径展示,而是会复制到 ${jenkinshome}/jobs/projectname/htmlreports/HTML_REPORT
目录下
每次只能展示最新版本的 html 报告,也就是说上一次编译的 html 报告会被覆盖
因为 jenkins 安全性的问题,默认加载出来的报告是无 css 的,通过以下配置解决:
HTML Publisher Plugin 插件在新的 Jenkins 版本中会导致打开的网页中无法加载 CSS 以及无法点击按钮的情况,由于 CSP 导致,可在 Jenkins 控制台中执行:System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")
以解决此问题。其他由于 CSP 原因导致的 html 插件也可用此方法解决
配置截图:
配置说明:
Reponsitory URL:仓库地址
Add 添加 git 的账号
使用技巧:在只能通过 http 连接,需要每次输入账号密码的情况下,可以按如下配置,配置后即可按照填写账号密码权限获取内容。
cd /root
vim .netrc
添加配置如下:
machine git服务器路径
login git账号
password git密码
服务器环境与依赖
Jdk:安装并配置环境变量
Ant:安装并配置环境变量
Jmeter:安装并添加需要的插件
其他:
Jmeter+Ant,需要将 ${jmeterhome}/extras/ant-jmeter-1.1.1.jar 文件拷贝到 ${anthome}/lib 目录下,否则编译会报错
Jmeter 如需链接数据库,需添加 jdbc 插件
如果不引入 jmeter 中的 xslt,需要手动安装该软件
Jenkins 项目配置:
jenkins 的工作路径,同样的 jar 包都可能会生成不同的路径。
jenkins——系统设置——高级
Ant 的具体使用方法本文不详细介绍,感兴趣可以自己阅读相关资料学习一下。
<?xml version="1.0" encoding="UTF-8"?>
<project name="ant-jmeter-test" default="run" basedir=".">
<!-- 需要改成自己本地的 Jmeter 目录-->
<property name="jmeter.home" value="/home/apache-jmeter-2.13" />
<!-- jmeter生成jtl格式的结果报告的路径-->
<property name="jmeter.result.jtl.dir" value="/root/.jenkins/jobs/ApiTest/workspace/report/jtl" />
<!-- jmeter生成html格式的结果报告的路径-->
<property name="jmeter.result.html.dir" value="/root/.jenkins/jobs/ApiTest/workspace/report/html" />
<!-- 生成的报告的前缀-->
<property name="ReportName" value="TestReport" />
<property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/report.jtl" />
<property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/index.html" />
<property name="lib.dir" value="${jmeter.home}/lib"/>
<path id="xslt.classpath">
<fileset dir="${lib.dir}" includes="xalan*.jar"/>
<fileset dir="${lib.dir}" includes="serializer*.jar"/>
</path>
<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.jtlName}">
<!-- 声明要运行的脚本。"*.jmx"指包含此目录下的所有jmeter脚本-->
<testplans dir="/root/.jenkins/jobs/ApiTest/workspace/jmx" includes="*.jmx" />
<property name="jmeter.save.saveservice.output_format" value="xml"/>
</jmeter>
</target>
<target name="report">
<xslt classpathref="xslt.classpath"
force="true"
in="${jmeter.result.jtlName}"
out="${jmeter.result.htmlName}"
style="${jmeter.home}/extras/jmeter-results-lyz.xsl">
<!-- 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝 -->
</xslt>
<copy todir="${jmeter.result.html.dir}">
<fileset dir="${jmeter.home}/extras">
<include name="collapse.png" />
<include name="expand.png" />
</fileset>
</copy>
</target>
</project>
关于 Case 的管理,因测试主要依赖 Jmeter+Ant 来做,结构如下:
需要删除 build 文件中的 showData 配置,否则会导致编译出来的仍然不显示
结果