Jmeter简介&持续集成

1.Jmeter简单介绍

1.1基本概念

Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言

1.2 优点

开源免费,基于Java编写,可集成到其他系统可拓展各个功能插件
支持接口测试,压力测试等多种功能,支持录制回放,入门简单
相较于自己编写框架或其他开源工具,有较为完善的UI界面,便于接口调试
多平台支持,可在Linux,Windows,Mac上运行

1.3 安装配置

解压到目录下,配置环境变量即可

1.4目录结构

/bin 目录(常用文件介绍)

examples:目录下包含Jmeter使用实例

ApacheJMeter.jar:JMeter源码包

jmeter.bat:windows下启动文件

jmeter.sh:Linux下启动文件

jmeter.log:Jmeter运行日志文件

jmeter.properties:Jmeter配置文件

jmeter-server.bat:windows下启动负载生成器服务文件

jmeter-server:Linux下启动负载生成器文件

/docs目录——Jmeter帮助文档
/extras目录——提供了对Ant的支持文件,可也用于持续集成
/lib目录——存放Jmeter依赖的jar包,同时安装插件也放于此目录
/licenses目录——软件许可文件,不用管
/printable_docs目录——Jmeter用户手册

1.5基础原件介绍

测试计划(Test Plan):它用来描述一个测试方案,包含与本次测试所有相关的功能。也就说本次测试的所有内容是于基于一个计划的

线程组Threads (Users):这个就是我们通常添加运行的线程。通俗的讲一个线程组,可以看做一个虚拟用户组,线程组中的每个线程都可以理解为一个虚拟用户

逻辑控制器:比如if控制器、while控制器、简单控制器等

取样器:取样器(Sampler)是测试中向服务器发送请求,记录响应信息,记录响应时间的最小单元,JMeter 原生支持多种不同的sampler 。

配置原件:比如HTTP Request Defaults (请求默认值)、HTTP Header Manager 信息头管理、HTTP Cache Manager 缓存管理器(模拟浏览器行为)等

前置处理器

后置处理器

2、Ant批量执行Jmeter脚本

2.1:什么是Ant

Ant是Apache软件基金会JAKARTA目录中的一个子项目,它有以下的优点。跨平台性,Ant是Java语言编写的,所示具有很好的跨平台性。操作简单,Ant是由一个内置任务和可选任务组成的,Ant运行时需要一个XML文件(构建文件),Ant通过调用target树,就可以执行各种task。每个task实现了特定接口对象,Ant 脚本是用 XML 来完成的,Ant可以集成到开发环境中,由于Ant的跨平台性和操作简单的特点,它很容易集成到一些开发环境中.

2.2:Ant配置文件

Ant的构件文件是基于XML的方式进行编写的,其默认的名称为build.xml,当然也可以取别的文件名称(此时要在构建时指定具体的构件文件名称)。

在Ant工具中,每一个构件文件中必须包含一个project元素,project元素作为XML树的根节点。一个project元素可以包含多个target元素作为叶子节点,每一个target元素可看作Ant工具的基本执行单元,同时在target单元之间可存在或定义依赖关系。在每一个target中可包含多个具体执行的元素(也可看作Ant任务),可执行的元素定义了这个操作具体要做的事情。

2.3:Ant运行

2.3.1 在命令行运行Ant工具

2.3.2 常用Ant命令选项(比如buildfile选项)

2.4:ANT的build.xml 代码准备

2.4.1运行build.xml的环境准备

A:安装JDK、Ant、Jmeter,配置环境变量

B:Jmeter的extras目录中ant-jmeter-1.1.1.jar包拷贝至ant安装目录下的lib目录中

C:修改Jmeter的bin目录下jmeter.properties文件的配置:jmeter.save.saveservice.output_format=xml

D:配置build.xml

2.4.2配置build.xml

build.xml文件配置的目的就是让ant去取代码执行构建。这里有两种方式构建

方式一:脚本直接上传到jmeter的目录下,通过jenkins的ant插件直接去构建,文件内容如下

?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="F:/apache-jmeter-3.2" />
<property name="report.title" value="0628接口测试"/>
<!-- jmeter生成jtl格式的结果报告的路径--> 
<property name="jmeter.result.jtl.dir" value="F:/apache-jmeter-3.2/test_0513/report/jtl" />
<!-- jmeter生成html格式的结果报告的路径-->
<property name="jmeter.result.html.dir" value="F:/apache-jmeter-3.2/test_0513/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.jtlName}">
<!-- 声明要运行的脚本。"*.jmx"指包含此目录下的所有jmeter脚本-->
<testplans dir="F:/apache-jmeter-3.2/test_0513/0628test/" includes="*.jmx" />
</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="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>
</project>

方式二:xml文件中配置gitlab取代码的路径,jenkins通过git插件将脚本从gitlab中取出来,保存到一个本地路径中,再去执行构建

<?xml version="1.0" encoding="UTF-8"?>

<project name="ant-jmeter-test" default="run" basedir=".">
<tstamp>
<format property="time" pattern="yyyyMMddhhmm" />
</tstamp>

<property environment="env"/>
<property name="ReportName" value="TestReport" />
<!-- 需要改成自己本地的 Jmeter 目录--> 
<property name="jmeter.home" value="/usr/lib/jmeter/apache-jmeter-5.1.1" />
<property name="report.title" value="资金平台接口测试"/>
<!-- jmeter生成jtl、html格式的结果报告的路径--> 
<property name="jmeter.result.dir" value="/usr/lib/jmeter/apache-jmeter-5.1.1/resultReport/${env.BUILD_ID}" />
<!-- 生成的报告的前缀--> 
<property name="jmeter.result.jtlName" value="${jmeter.result.dir}/${ReportName}.jtl" />
<property name="jmeter.result.htmlName" value="${jmeter.result.dir}/${ReportName}.html" />
<!-- GIT拉取到本地目录的路径 -->
<property name="githome" value="/root/.jenkins/workspace/资金平台自动化测试/" />

<target name="run">
<echo message="start..."/>
<antcall target="clean" />
<antcall target="test" />
<antcall target="report" />
</target>

<target name="clean">
<mkdir dir="${env.WORKSPACE}/results/${env.BUILD_ID}" />
</target>

<target name="test">
<taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />
<jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
<!-- 声明要运行的脚本"*.jmx"指包含此目录下的所有jmeter脚本,includes里的文件也可以用逗号,隔开-->
<testplans dir="${githome}/0621test" 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="dateReport" expression="${report.datestamp}"/>
<param name="titleReport" expression="${report.title}:${report.datestamp}"/>
</xslt>
<!-- 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝 --> 
<copy todir="${jmeter.result.dir}">
<fileset dir="${jmeter.home}/extras">
<include name="collapse.png" />
<include name="expand.png" />
</fileset>
</copy>
</target>
</project>

2.4.3 运行build.xml文件

3.搭建持续集成接口测试平台(Jenkins+Ant+Jmeter+Git)

3.1:环境准备

A:JDK,可以用yum安装 yum install java-1.8.0-openjdk-devel
B :Jmeter
wget http://mirrors.tuna.tsinghua.edu.cn/apache//jmeter/binaries/apache-jmeter-5.1.1.tgz
tar -zxvf apache-jmeter-5.1.1.tgz
配置环境变量
C :Ant
wget http://mirrors.tuna.tsinghua.edu.cn/apache//ant/binaries/apache-ant-1.9.14-bin.tar.gz
tar -zxvf apache-ant-1.9.14-bin.tar.gz
配置环境变量
D :Git https://blog.csdn.net/qq_16481211/article/details/81349898#
E :Jenkins http://www.pianshen.com/article/1133171043/

3.2:ANT的build.xml代码准备

3.3:本地脚本上传到Gitlab远程仓库

3.4:Jenkins从Gitlab中取代码并构建

服务器中的Jenkins通过Gitlab插件读取远程Git远程仓库中的代码,然后通过ant插件进行构建

3.4.1 Gitlab插件的配置

新建一个项目,配置Git信息
在这里插入图片描述

3.4.2 Ant的配置

在这里插入图片描述
在这里插入图片描述

3.5Jenkins配置报告与邮件插件

3.5.1 配置报告插件

我们先装一个Report插件,在系统管理-管理插件中找 HTML Publisher plugin 插件并安装
在这里插入图片描述
返回到项目中,在配置里面添加一个构建后的操作
在这里插入图片描述
在这里插入图片描述

3.5.2 配置邮件插件

A:系统管理-系统设置 :配置邮件信息
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
B:拖到最下方,点击高级按钮
在这里插入图片描述
C:配置smtp服务器与用户名密码,注意这里的密码是腾讯的授权码!!,然后勾选ssl协议
在这里插入图片描述
D:保存一下配置,然后点击测试一下
 在这里插入图片描述
E:配置项目邮件信息
在这里插入图片描述
在这里插入图片描述

3.6:运行

Started by user test
Running as SYSTEM
Building in workspace /root/.jenkins/workspace/test0623
No credentials specified

/usr/local/git/bin/git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
/usr/local/git/bin/git config remote.origin.url ssh://git@gitlab.test.com:22/ibg/ibg_test.git # timeout=10
Fetching upstream changes from ssh://git@gitlab.test.com:22/ibg/ibg_test.git
/usr/local/git/bin/git --version # timeout=10
/usr/local/git/bin/git fetch --tags --progress ssh://git@gitlab.test.com:22/ibg/ibg_test.git +refs/heads/:refs/remotes/origin/
/usr/local/git/bin/git rev-parse refs/remotes/origin/master^{commit} # timeout=10
/usr/local/git/bin/git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10
Checking out Revision 878f1faeb4910355c15ae422deb0959a429473cc (refs/remotes/origin/master)
/usr/local/git/bin/git config core.sparsecheckout # timeout=10
/usr/local/git/bin/git checkout -f 878f1faeb4910355c15ae422deb0959a429473cc
Commit message: “test”
/usr/local/git/bin/git rev-list --no-walk 878f1faeb4910355c15ae422deb0959a429473cc # timeout=10
No emails were triggered.
[test0622] $ /usr/lib/ant/apache-ant-1.9.14/bin/ant -file build.xml
Buildfile: /usr/lib/jmeter/apache-jmeter-5.1.1/test0622/build.xml

run:
[echo] start…

clean:
[mkdir] Created dir: /root/.jenkins/workspace/test0623/results/33

test:
[jmeter] Executing test plan: /root/.jenkins/workspace/test0623/0621test/test0623.jmx ==> /usr/lib/jmeter/apache-jmeter-5.1.1/resultLog/33/TestReport.jtl
[jmeter] Creating summariser
[jmeter] Created the tree successfully using /root/.jenkins/workspace/test0623/0621test/test0623.jmx
[jmeter] Starting the test @ Mon Jun 24 09:54:25 CST 2019 (1561341265793)
[jmeter] Waiting for possible Shutdown/StopTestNow/HeapDump/ThreadDump message on port 4445
[jmeter] summary = 1 in 00:00:00 = 4.5/s Avg: 50 Min: 50 Max: 50 Err: 0 (0.00%)
[jmeter] Tidying up … @ Mon Jun 24 09:54:26 CST 2019 (1561341266394)
[jmeter] … end of run

report:
[xslt] Processing /usr/lib/jmeter/apache-jmeter-5.1.1/resultLog/33/TestReport.jtl to /usr/lib/jmeter/apache-jmeter-5.1.1/resultLog/33/TestReport.html
[xslt] Loading stylesheet /usr/lib/jmeter/apache-jmeter-5.1.1/extras/jmeter.results.shanhe.me.xsl
[copy] Copying 2 files to /usr/lib/jmeter/apache-jmeter-5.1.1/resultLog/33

BUILD SUCCESSFUL Total time: 2 seconds
[htmlpublisher] Archiving HTML reports…
[htmlpublisher] Archiving at PROJECT level /usr/local/apache-jmeter-3.2/resultLog/${env.BUILD_ID} to /root/.jenkins/jobs/test0623/htmlreports/HTML_20Report
Email was triggered for: Success
Email was triggered for: Always
Sending email for trigger: Always
Sending email to: 1009765@qq.com
Sending email for trigger: Success
Sending email to: 1009765@qq.com
Finished: SUCCESS
参考链接:
https://www.cnblogs.com/Zfc-Cjk/p/9043076.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值