天天看点

jmeter使用入门(8个常用VPS性能测试方法:CPU内存、硬盘读写IO、速度、UnixBench跑分

    链接:http://www.itbulu.com/vps-test.html)

Jmeter简介

Jmeter的基本概念

百度百科:

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

我们为什么使用Jmeter

开源免费,基于Java编写,可集成到其他系统可拓展各个功能插件

支持接口测试,压力测试等多种功能,支持录制回放,入门简单

相较于自己编写框架活其他开源工具,有较为完善的UI界面,便于接口调试

多平台支持,可在Linux,Windows,Mac上运行

Jmeter安装配置

Windows下Jmeter下载安装

<a href="https://s2.51cto.com/oss/201710/25/61416e1e6615db8c2d4a78d07688f2f6.png-wh_500x0-wm_3-wmp_4-s_619713748.png" target="_blank"></a>

安装JDK,配置环境变量(具体步骤不做介绍)

 jdk安装链接(Windows):

https://jingyan.baidu.com/article/48b558e35008cb7f38c09a3e.html

    将下载Jmeter文件解压,打开/bin/jmeter.bat

<a href="https://s4.51cto.com/oss/201710/25/b6296cc3e7053e09f8ba2e7bdcca6919.png-wh_500x0-wm_3-wmp_4-s_3133558351.png" target="_blank"></a>

运行成功如下图:

<a href="https://s1.51cto.com/oss/201710/25/141e0bad2b89d15b3fa934b2067046e6.png-wh_500x0-wm_3-wmp_4-s_797587304.png" target="_blank"></a>

其他平台安装Jmeter

与Windows平台一致,除入口文件不同,例如linux平台下为/bin/jmeter.sh

Jmeter的目录结构

<a href="https://s4.51cto.com/oss/201710/25/85ce3fbdd52d0446273fb501f140a152.png-wh_500x0-wm_3-wmp_4-s_2476555662.png" target="_blank"></a>

/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用户手册

Jmeter相关插件安装:

插件安装:

Jmeter的插件安装很简单,只需要下载对应插件解压即可。

下载地址:http://jmeter-plugins.org/downloads/all/

下载后解压放入:apache-jmeter-2.12\lib\ext\目录下

重启jmeter

ps:数据库链接驱动如果需要需要专门下载,例如mysql需要jdbc的jar包,地址:http://dev.mysql.com/downloads/file/?id=462850

使用注意事项:添加第三方插件并使用后保存的jmx文件在未添加该插件的运行环境下会导致无法打开该文件并报错,请保持环境一致性

用例生成与导出:

Jmeter的用例格式为jmx文件,实际为xml格式,感兴趣可以学习下自己定制生成想要的jmx文件。

生成原则:

每个功能模块为一个独立的jmx文件。增加可维护性。(尽量不要将一个jmx文件放入太多功能,后期维护成本会很高。)

模块的私有变量保存在模块中,多模块共有的(例如服务器ip端口等)可以考虑存在单独的文件中读取。

接口测试不要放太多线程,毕竟不是做压力测试,意义也不大。

导出方法:

编写测试用例

文件——保存为——确定:

<a href="https://s2.51cto.com/oss/201710/25/f076a847396abc41cabaaa7365e788b1.png-wh_500x0-wm_3-wmp_4-s_2022869051.png" target="_blank"></a>

Jmeter常用文件类型

文件的实际类型:xml

文件样本:

Jmx文件

&lt;jmeterTestPlan version="1.2" properties="1.8"&gt;

&lt;hashTree&gt;

&lt;TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Test" enabled="true"&gt;

&lt;elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true"&gt;

&lt;collectionProp name="Arguments.arguments"/&gt;

&lt;/elementProp&gt;

&lt;stringProp name="TestPlan.user_define_classpath"&gt;&lt;/stringProp&gt;

&lt;boolProp name="TestPlan.serialize_threadgroups"&gt;false&lt;/boolProp&gt;

&lt;boolProp name="TestPlan.functional_mode"&gt;false&lt;/boolProp&gt;

&lt;stringProp name="TestPlan.comments"&gt;Sample test for demonstrating JMeter Ant build script and Schematic stylesheet&lt;/stringProp&gt;

&lt;/TestPlan&gt;

&lt;ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true"&gt;

&lt;longProp name="ThreadGroup.start_time"&gt;1143889321000&lt;/longProp&gt;

&lt;stringProp name="ThreadGroup.delay"&gt;&lt;/stringProp&gt;

&lt;stringProp name="ThreadGroup.duration"&gt;&lt;/stringProp&gt;

&lt;stringProp name="ThreadGroup.num_threads"&gt;3&lt;/stringProp&gt;

&lt;boolProp name="ThreadGroup.scheduler"&gt;false&lt;/boolProp&gt;

&lt;elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true"&gt;

&lt;stringProp name="LoopController.loops"&gt;5&lt;/stringProp&gt;

&lt;boolProp name="LoopController.continue_forever"&gt;false&lt;/boolProp&gt;

&lt;longProp name="ThreadGroup.end_time"&gt;1143889321000&lt;/longProp&gt;

&lt;stringProp name="ThreadGroup.on_sample_error"&gt;continue&lt;/stringProp&gt;

&lt;stringProp name="ThreadGroup.ramp_time"&gt;1&lt;/stringProp&gt;

&lt;/ThreadGroup&gt;

&lt;CounterConfig guiclass="CounterConfigGui" testclass="CounterConfig" testname="Counter" enabled="true"&gt;

&lt;stringProp name="CounterConfig.start"&gt;1&lt;/stringProp&gt;

&lt;stringProp name="CounterConfig.incr"&gt;1000&lt;/stringProp&gt;

&lt;stringProp name="CounterConfig.name"&gt;C&lt;/stringProp&gt;

&lt;boolProp name="CounterConfig.per_user"&gt;false&lt;/boolProp&gt;

&lt;stringProp name="CounterConfig.end"&gt;1000000&lt;/stringProp&gt;

&lt;/CounterConfig&gt;

&lt;hashTree/&gt;

&lt;JavaSampler guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Sample 1" enabled="true"&gt;

&lt;elementProp name="arguments" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" enabled="true"&gt;

&lt;collectionProp name="Arguments.arguments"&gt;

&lt;elementProp name="Sleep_Time" elementType="Argument"&gt;

&lt;stringProp name="Argument.metadata"&gt;=&lt;/stringProp&gt;

&lt;stringProp name="Argument.value"&gt;100&lt;/stringProp&gt;

&lt;stringProp name="Argument.name"&gt;Sleep_Time&lt;/stringProp&gt;

&lt;elementProp name="Sleep_Mask" elementType="Argument"&gt;

&lt;stringProp name="Argument.value"&gt;0xFF&lt;/stringProp&gt;

&lt;stringProp name="Argument.name"&gt;Sleep_Mask&lt;/stringProp&gt;

&lt;elementProp name="Label" elementType="Argument"&gt;

&lt;stringProp name="Argument.value"&gt;&lt;/stringProp&gt;

&lt;stringProp name="Argument.name"&gt;Label&lt;/stringProp&gt;

&lt;elementProp name="ResponseCode" elementType="Argument"&gt;

&lt;stringProp name="Argument.value"&gt;200&lt;/stringProp&gt;

&lt;stringProp name="Argument.name"&gt;ResponseCode&lt;/stringProp&gt;

&lt;elementProp name="ResponseMessage" elementType="Argument"&gt;

&lt;stringProp name="Argument.value"&gt;OK&lt;/stringProp&gt;

&lt;stringProp name="Argument.name"&gt;ResponseMessage&lt;/stringProp&gt;

&lt;elementProp name="Status" elementType="Argument"&gt;

&lt;stringProp name="Argument.name"&gt;Status&lt;/stringProp&gt;

&lt;elementProp name="SamplerData" elementType="Argument"&gt;

&lt;stringProp name="Argument.value"&gt;Request&lt;/stringProp&gt;

&lt;stringProp name="Argument.name"&gt;SamplerData&lt;/stringProp&gt;

&lt;elementProp name="ResultData" elementType="Argument"&gt;

&lt;stringProp name="Argument.value"&gt;Response C=${C}&lt;/stringProp&gt;

&lt;stringProp name="Argument.name"&gt;ResultData&lt;/stringProp&gt;

&lt;/collectionProp&gt;

&lt;stringProp name="classname"&gt;org.apache.jmeter.protocol.java.test.JavaTest&lt;/stringProp&gt;

&lt;/JavaSampler&gt;

&lt;ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true"&gt;

&lt;collectionProp name="Asserion.test_strings"&gt;

&lt;stringProp name="51"&gt;3&lt;/stringProp&gt;

&lt;stringProp name="Assertion.test_field"&gt;Assertion.response_data&lt;/stringProp&gt;

&lt;intProp name="Assertion.test_type"&gt;6&lt;/intProp&gt;

&lt;stringProp name="Assertion.assume_success"&gt;false&lt;/stringProp&gt;

&lt;/ResponseAssertion&gt;

&lt;/hashTree&gt;

&lt;JavaSampler guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Sample 2" enabled="true"&gt;

&lt;stringProp name="Argument.value"&gt;Response C=${C} Tn=${__threadNum}&lt;/stringProp&gt;

&lt;/jmeterTestPlan&gt;

Jtl文件

文件的实际类型:自定义

定义方法:

修改{jmeterhome}/bin/jmeter.profile,可选择格式:csv,xml,db

# legitimate values: xml, csv, db. Only xml and csv are currently supported.

#jmeter.save.saveservice.output_format=csv

Jmeter运行模式及参数

GUI模式

打开已有的jmx文件(文件——打开)

点击启动按钮运行

由于GUI模式本身就是带界面的,也有中文版,就不在此详细介绍了。

命令行模式

配置jmeter环境变量(windows下为将${jmeterhome}/bin加入Path变量)

如果未加入环境变量,在执行的时候可以直接给出全路径或在${jmeterhome}/bin下执行

依赖:

命令:

jmeter -n -t &lt;testplan filename&gt; -l &lt;listener filename&gt;

参数:

本文参考链接:

http://www.cnblogs.com/ceshisanren/p/5639895.html

http://www.cnblogs.com/TankXiao/p/4045439.html

本文转自liujing0751CTO博客,原文链接: http://blog.51cto.com/13281352/1976051,如需转载请自行联系原作者