1:背景介绍
由于最近需要对api接口进行压测,虽然可以通过编写脚本实现,但是本着‘面向对象’思想,专门的工作交给专门的工具来实现,顺便学习一下新的工具使用,并记录一下从0开始学习的jemter基础功能。
Apache JMeter 是 Apache 组织基于 Java 开发的压力测试工具,用于对软件做压力测试。官方下载地址为:https://jmeter.apache.org/download_jmeter.cgi,打开页面如下,
按照自己所需下载相应的安装包(如果单纯在win中使用,只需要第二个即可,如果需要在linux环境中使用,建议同时下载两个安装包,因为可以在win环境中通过gui便捷的生成测试计划,然后再linux中执行测试计划),需要注意的是,当前页面上展现的是java1.8以上的版本,请没有java环境或者java版本过低的自行安装或升级,本例中不提供java环境jdk的安装。关于官方下载缓慢的情况,请自行搜寻云盘下载,这里不提供下载渠道。
windows可以在终端中查看jdk版本。
C:\Users\leel>java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM)64-Bit Server VM (build 25.181-b13, mixed mode)
C:\Users\leel>
linux环境中可以同样指令查看版本
[root@leel ~]# java -version
openjdk version "1.8.0_272"
OpenJDK Runtime Environment (build 1.8.0_272-b10)
OpenJDK 64-Bit Server VM (build 25.272-b10, mixed mode)
如上所示,当java版本满足jmeter当前版本需求时,再来启动jmeter。
2:jmeter的安装使用
jmeter是无需安装的,每次使用是通过一个批处理文件来启动。
(1)如果是只需要在windows环境上使用,可以参考其他人的blog:https://blog.csdn.net/qq_19309473/article/details/121781920,这里有配置环境变量和更改gui的语言步骤,这里不详细展开。
(2)如果需要在linux环境中使用,可以不需要在window环境中配置环境变量,我们只需要借助gui来实现测试计划的编写以及结果的分析功能即可。
在windows中jmeter的启动是通过解压后的安装包中的一个批处理文件启动的,解压下载的安全包apache-jmeter-5.4.3.zip后,路径为
apache-jmeter-5.4.3\bin\jemter.bat
详细如下:
然后管理员权限打开得到如下的GUI页面(已经调整了语言并创建了一个案例)
windows环境的jmeter暂且安装完成(因为我的最终目的是在linux环境中运行jmeter,所以无需配置window的运行环境)
在linux环境中,我们通过将下载好的apache-jmeter-5.4.3.tgz安装包传递到linux环境中,可以通过sftp,winscp工具,或者通过指令
rz
发送,建议放在目录
/usr/local/jmeter
如果没有jmeter目录,请自行创建这个目录,最终如下
[root@leel jmeter]# ll
total 69148
-rw-r--r-- 1 root root 70796171 Apr 811:23 apache-jmeter-5.4.3.tgz
[root@leel jmeter]# pwd
/usr/local/jmeter
随后解压到当前目录下
tar -zxf apache-jmeter-5.4.3.tgz
接着需要配置jmeter的运行环境(请先确保java的环境,这里不赘述)
vi /etc/profile
我们直接在编辑页面拉到最后,并添加如下的内容,并
ESC+wq
保存退出
exportJMETER=/usr/local/jmeter/apache-jmeter-5.4.3
exportPATH=${JMETER}/bin/:${PATH}
然后使得配置环境立即生效
source /etc/profile
通过
jmeter -v
检查是否生效,配置成功会显示如下结果
[root@leel jmeter]# jmeter -v
_ ____ _ ____ _ _ _____ _ __ __ _____ _____ _____ ____
/ \| _ \ / \ / ___|||| ____|||\/ | ____|_ _| ____| _ \
/ _ \||_) / _ \||||_|| _| _ |||\/|| _|||| _|||_)|
/ ___ \| __/ ___ \|___| _ ||___ ||_||||||___ ||||___| _ <
/_/ \_\_| /_/ \_\____|_||_|_____|\___/|_||_|_____||_||_____|_|\_\5.4.3
Copyright (c)1999-2021 The Apache Software Foundation
至此,linux端的jmeter已经安装完成。
3:使用jmeter创建编写测试计划和压测
jmeter运行的测试计划的文件格式为.jmx,以官方的案例为例
apache-jmeter-5.4.3\bin\examples\CSVSample.jmx
,一个测试计划具体内容如下,
<?xml version="1.0" encoding="UTF-8"?><jmeterTestPlan version="1.2" properties="3.2" jmeter="3.3-SNAPSHOT.20170917"><hashTree><TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="CSVSample" enabled="true"><stringProp name="TestPlan.comments">Example of using CSV DataSet</stringProp><boolProp name="TestPlan.functional_mode">false</boolProp><boolProp name="TestPlan.serialize_threadgroups">false</boolProp><elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true"><collectionProp name="Arguments.arguments"/></elementProp><stringProp name="TestPlan.user_define_classpath"></stringProp></TestPlan><hashTree><ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true"><elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true"><boolProp name="LoopController.continue_forever">false</boolProp><intProp name="LoopController.loops">-1</intProp></elementProp><stringProp name="ThreadGroup.num_threads">1</stringProp><stringProp name="ThreadGroup.ramp_time">1</stringProp><longProp name="ThreadGroup.start_time">1226457982000</longProp><longProp name="ThreadGroup.end_time">1226457982000</longProp><boolProp name="ThreadGroup.scheduler">false</boolProp><stringProp name="ThreadGroup.on_sample_error">continue</stringProp><stringProp name="ThreadGroup.duration"></stringProp><stringProp name="ThreadGroup.delay"></stringProp></ThreadGroup><hashTree><CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="Get user details" enabled="true"><stringProp name="TestPlan.comments">Top level </stringProp><stringProp name="delimiter">,</stringProp><stringProp name="fileEncoding"></stringProp><stringProp name="filename">CSVSample_user.csv</stringProp><boolProp name="quotedData">false</boolProp><boolProp name="recycle">false</boolProp><stringProp name="shareMode">shareMode.all</stringProp><boolProp name="stopThread">true</boolProp><stringProp name="variableNames">USER,PASS</stringProp><boolProp name="ignoreFirstLine">false</boolProp></CSVDataSet><hashTree/>
内容过长,不全部列举出来了。很明显,一个测试计划类似一个xml的文件,如果你对自己的实力不自信,或者不熟悉这种编程,就建议老老实实的通过windows上的jmeter的GUI界面设置好参数后,一键生成这个测试计划,岂不美哉?
打开windows上的jmeter(无需配置java的环境变量),按照如下图所示创建线程组
创建后,如下所示
然后开始编辑线程组属性,这里有三个参数需要设置,分别如下图所示,
由于需要进行REST的校验,需要填写http的请求头和请求体内容,所以右键点击test plan创建http新元件如下图所示
添加完请求头后,我们需要创建请求体,右键线程组,添加http请求,过程如下
创建后,需要填写http请求基本参数,如下图所示
这里建议,把测试结果的分析也创建好,分别是查看结果树和聚合报告,右键点击test_plan,过程如下图所示
创建好后,可以开始创建测试计划,点击左上角的
文件->保存测试计划为
即可实现测试计划的自动生成,在保存的目录下即可找到这个测试计划
4:开始linux端压测任务
将这个测试计划上传到linux端,通过sftp,winscp工具或者指令
rz
实现,
然后执行这个测试计划通过如下指令
jmeter -n -t test.jmx -l test.jtl #后面的jtl是输出的测试日志,聚合结果,可以在GUI中打开查看
这里的test.jtl文件存储着全部测试线程的测试任务的耗时等信息,是一个csv格式的数据,可以再通过传到windows端的gui的聚合报告查看分析结果,如下所示
5:后记
本文只是提供了jmeter的从零开始的简单使用,整体来说这个工具比较简单,由于本人也是初探,也并非测试人员,只是开发了一个接口并用来做一个简单的压测使用,如果有说的不准确的地方欢迎大佬批评指正,互相学习进步。
参考:https://blog.csdn.net/qq_19309473/article/details/121781920
https://blog.csdn.net/weixin_43639512/article/details/89083363
https://blog.csdn.net/tototuzuoquan/article/details/78808688
https://www.cnblogs.com/hkgov/articles/7268366.html
https://blog.csdn.net/qq_37453279/article/details/107990659
https://blog.csdn.net/qq_34021712/article/details/78682397
https://blog.csdn.net/paidaxing_dashu/article/details/102677791
版权归原作者 落墨画雪 所有, 如有侵权,请联系我们删除。