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界面,便于接口调试

  • 多平台支持,可在LinuxWindowsMac上运行

Jmeter安装配置

61416e1e6615db8c2d4a78d07688f2f6.png-wh_

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

  •  jdk安装链接(Windows):

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

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

b6296cc3e7053e09f8ba2e7bdcca6919.png-wh_

运行成功如下图:

141e0bad2b89d15b3fa934b2067046e6.png-wh_

  • 其他平台安装Jmeter

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

  • Jmeter的目录结构

85ce3fbdd52d0446273fb501f140a152.png-wh_

  • /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端口等)可以考虑存在单独的文件中读取。

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

  • 导出方法:

    • 编写测试用例

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

f076a847396abc41cabaaa7365e788b1.png-wh_

  • Jmeter常用文件类型

    • 文件的实际类型:xml

    • 文件样本:


    • Jmx文件

<jmeterTestPlan version="1.2" properties="1.8">

<hashTree>

<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Test" enabled="true">

<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>

<boolProp name="TestPlan.serialize_threadgroups">false</boolProp>

<boolProp name="TestPlan.functional_mode">false</boolProp>

<stringProp name="TestPlan.comments">Sample test for demonstrating JMeter Ant build script and Schematic stylesheet</stringProp>

</TestPlan>

<hashTree>

<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true">

<longProp name="ThreadGroup.start_time">1143889321000</longProp>

<stringProp name="ThreadGroup.delay"></stringProp>

<stringProp name="ThreadGroup.duration"></stringProp>

<stringProp name="ThreadGroup.num_threads">3</stringProp>

<boolProp name="ThreadGroup.scheduler">false</boolProp>

<elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">

<stringProp name="LoopController.loops">5</stringProp>

<boolProp name="LoopController.continue_forever">false</boolProp>

</elementProp>

<longProp name="ThreadGroup.end_time">1143889321000</longProp>

<stringProp name="ThreadGroup.on_sample_error">continue</stringProp>

<stringProp name="ThreadGroup.ramp_time">1</stringProp>

</ThreadGroup>

<hashTree>

<CounterConfig guiclass="CounterConfigGui" testclass="CounterConfig" testname="Counter" enabled="true">

<stringProp name="CounterConfig.start">1</stringProp>

<stringProp name="CounterConfig.incr">1000</stringProp>

<stringProp name="CounterConfig.name">C</stringProp>

<boolProp name="CounterConfig.per_user">false</boolProp>

<stringProp name="CounterConfig.end">1000000</stringProp>

</CounterConfig>

<hashTree/>

<JavaSampler guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Sample 1" enabled="true">

<elementProp name="arguments" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" enabled="true">

<collectionProp name="Arguments.arguments">

<elementProp name="Sleep_Time" elementType="Argument">

<stringProp name="Argument.metadata">=</stringProp>

<stringProp name="Argument.value">100</stringProp>

<stringProp name="Argument.name">Sleep_Time</stringProp>

</elementProp>

<elementProp name="Sleep_Mask" elementType="Argument">

<stringProp name="Argument.metadata">=</stringProp>

<stringProp name="Argument.value">0xFF</stringProp>

<stringProp name="Argument.name">Sleep_Mask</stringProp>

</elementProp>

<elementProp name="Label" elementType="Argument">

<stringProp name="Argument.metadata">=</stringProp>

<stringProp name="Argument.value"></stringProp>

<stringProp name="Argument.name">Label</stringProp>

</elementProp>

<elementProp name="ResponseCode" elementType="Argument">

<stringProp name="Argument.metadata">=</stringProp>

<stringProp name="Argument.value">200</stringProp>

<stringProp name="Argument.name">ResponseCode</stringProp>

</elementProp>

<elementProp name="ResponseMessage" elementType="Argument">

<stringProp name="Argument.metadata">=</stringProp>

<stringProp name="Argument.value">OK</stringProp>

<stringProp name="Argument.name">ResponseMessage</stringProp>

</elementProp>

<elementProp name="Status" elementType="Argument">

<stringProp name="Argument.metadata">=</stringProp>

<stringProp name="Argument.value">OK</stringProp>

<stringProp name="Argument.name">Status</stringProp>

</elementProp>

<elementProp name="SamplerData" elementType="Argument">

<stringProp name="Argument.metadata">=</stringProp>

<stringProp name="Argument.value">Request</stringProp>

<stringProp name="Argument.name">SamplerData</stringProp>

</elementProp>

<elementProp name="ResultData" elementType="Argument">

<stringProp name="Argument.metadata">=</stringProp>

<stringProp name="Argument.value">Response C=${C}</stringProp>

<stringProp name="Argument.name">ResultData</stringProp>

</elementProp>

</collectionProp>

</elementProp>

<stringProp name="classname">org.apache.jmeter.protocol.java.test.JavaTest</stringProp>

</JavaSampler>

<hashTree>

<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">

<collectionProp name="Asserion.test_strings">

<stringProp name="51">3</stringProp>

</collectionProp>

<stringProp name="Assertion.test_field">Assertion.response_data</stringProp>

<intProp name="Assertion.test_type">6</intProp>

<stringProp name="Assertion.assume_success">false</stringProp>

</ResponseAssertion>

<hashTree/>

</hashTree>

<JavaSampler guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Sample 2" enabled="true">

<elementProp name="arguments" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" enabled="true">

<collectionProp name="Arguments.arguments">

<elementProp name="Sleep_Time" elementType="Argument">

<stringProp name="Argument.metadata">=</stringProp>

<stringProp name="Argument.value">100</stringProp>

<stringProp name="Argument.name">Sleep_Time</stringProp>

</elementProp>

<elementProp name="Sleep_Mask" elementType="Argument">

<stringProp name="Argument.metadata">=</stringProp>

<stringProp name="Argument.value">0xFF</stringProp>

<stringProp name="Argument.name">Sleep_Mask</stringProp>

</elementProp>

<elementProp name="Label" elementType="Argument">

<stringProp name="Argument.metadata">=</stringProp>

<stringProp name="Argument.value"></stringProp>

<stringProp name="Argument.name">Label</stringProp>

</elementProp>

<elementProp name="ResponseCode" elementType="Argument">

<stringProp name="Argument.metadata">=</stringProp>

<stringProp name="Argument.value">200</stringProp>

<stringProp name="Argument.name">ResponseCode</stringProp>

</elementProp>

<elementProp name="ResponseMessage" elementType="Argument">

<stringProp name="Argument.metadata">=</stringProp>

<stringProp name="Argument.value">OK</stringProp>

<stringProp name="Argument.name">ResponseMessage</stringProp>

</elementProp>

<elementProp name="Status" elementType="Argument">

<stringProp name="Argument.metadata">=</stringProp>

<stringProp name="Argument.value">OK</stringProp>

<stringProp name="Argument.name">Status</stringProp>

</elementProp>

<elementProp name="SamplerData" elementType="Argument">

<stringProp name="Argument.metadata">=</stringProp>

<stringProp name="Argument.value">Request</stringProp>

<stringProp name="Argument.name">SamplerData</stringProp>

</elementProp>

<elementProp name="ResultData" elementType="Argument">

<stringProp name="Argument.metadata">=</stringProp>

<stringProp name="Argument.value">Response C=${C} Tn=${__threadNum}</stringProp>

<stringProp name="Argument.name">ResultData</stringProp>

</elementProp>

</collectionProp>

</elementProp>

<stringProp name="classname">org.apache.jmeter.protocol.java.test.JavaTest</stringProp>

</JavaSampler>

<hashTree/>

</hashTree>

</hashTree>

</hashTree>

</jmeterTestPlan>

Jtl文件

  • 文件的实际类型:自定义

  • 定义方法:

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

# 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 <testplan filename> -l <listener filename>

参数:


本文参考链接:

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

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













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


相关文章
|
1月前
|
编解码 NoSQL 测试技术
性能工具之Jmeter HLS 插件(入门篇)
【2月更文挑战第28天】JMeter Redis 数据集 vs CSV 数据集性能对比
82 1
性能工具之Jmeter HLS 插件(入门篇)
|
18天前
|
JSON 测试技术 数据格式
性能工具之Jmeter关联入门
【4月更文挑战第4天】关联是每个性能测试人员必须掌握的技能,是解决性能脚本中的"金钥匙"。
24 2
性能工具之Jmeter关联入门
|
4月前
|
监控 Java Linux
Apache JMeter5.2基础入门实践详解
Apache JMeter5.2基础入门实践详解
55 0
|
5月前
|
监控 关系型数据库 MySQL
『Jmeter入门万字长文』 | 从环境搭建、脚本设计、执行步骤到生成监控报告完整过程
『Jmeter入门万字长文』 | 从环境搭建、脚本设计、执行步骤到生成监控报告完整过程
135 2
|
7月前
|
Java 测试技术 Apache
JMeter与Python的多重交响:从入门到高级应用(上)
在性能测试领域,Apache JMeter已经成为测试专业人士的首选工具,用于模拟用户行为、测量响应时间、评估系统性能。但在某些情境下,为了满足特定需求,我们需要更多的灵活性,比如引入Python来进行特定操作或处理复杂逻辑。**”** Jython -----
JMeter与Python的多重交响:从入门到高级应用(上)
|
7月前
|
Java 测试技术 Apache
JMeter与Python的多重交响:从入门到高级应用(下)
在性能测试领域,Apache JMeter已经成为测试专业人士的首选工具,用于模拟用户行为、测量响应时间、评估系统性能。但在某些情境下,为了满足特定需求,我们需要更多的灵活性,比如引入Python来进行特定操作或处理复杂逻辑。。
JMeter与Python的多重交响:从入门到高级应用(下)
|
7月前
|
Java 测试技术 Linux
JMeter(1) --- 入门
JMeter(1) --- 入门
68 0
|
9月前
|
存储 Java BI
JMeter入门实践
JMeter(表)即 Apache JMeter,是ApacheSoftwareFoundation开发的压力测试工具。该应用程序是开源软件,旨在对应用程序功能和行为进行测试,以衡量其性能指标。它最初是为测试Web应用程序而设计的,但此后已扩展到其他测试功能。
148 2
JMeter入门实践
|
JSON Java 测试技术
Jmeter 入门 从0-1 基础篇-实操
​ Apache JMeter 是 Apache 组织基于 Java 开发的压力测试工具,用于对软件做压力测试。
283 0
Jmeter 入门 从0-1 基础篇-实操
|
10月前
|
JSON 前端开发 测试技术
性能测试(8)——Jmeter基础入门
Get、Post请求(以个人学生管理系统为例) 在线程组中右键新建“用户定义的变量”,添加键值对,如果在请求中需要使用到该变量,则在“值”这一栏下,填写${该变量名称},来引用该变量的值。
163 0
性能测试(8)——Jmeter基础入门