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 ~]
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]
total 69148
-rw-r--r-- 1 root root 70796171 Apr 8 11:23 apache-jmeter-5.4.3.tgz
[root@leel jmeter]
/usr/local/jmeter
随后解压到当前目录下
tar -zxf apache-jmeter-5.4.3.tgz
接着需要配置jmeter的运行环境(请先确保java的环境,这里不赘述)
vi /etc/profile
我们直接在编辑页面拉到最后,并添加如下的内容,并ESC+wq 保存退出
export JMETER=/usr/local/jmeter/apache-jmeter-5.4.3
export PATH=${JMETER}/bin/:${PATH}
然后使得配置环境立即生效
source /etc/profile
通过jmeter -v 检查是否生效,配置成功会显示如下结果
[root@leel jmeter]
_ ____ _ ____ _ _ _____ _ __ __ _____ _____ _____ ____
/ \ | _ \ / \ / ___| | | | ____| | | \/ | ____|_ _| ____| _ \
/ _ \ | |_) / _ \| | | |_| | _| _ | | |\/| | _| | | | _| | |_) |
/ ___ \| __/ ___ \ |___| _ | |___ | |_| | | | | |___ | | | |___| _ <
/_/ \_\_| /_/ \_\____|_| |_|_____| \___/|_| |_|_____| |_| |_____|_| \_\ 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
这里的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
|