1.引入
1.1 为什么要学习jmeter
- 免费开源
- 多系统兼容
- 轻量级工具
- 易用
- 插件丰富
- 功能强大
-
- 接口功能测试
- 接口自动化测试(jmeter+maven/ant+jenkins)
- 接口性能测试
与其他性能测试工具比较:
- apacheAB:不接受服务器返回数据,只返回code,比jmeter快,返回结果无意义
- loadrunner:商用收费软件,功能强大,图表丰富。
- locust:基于python的免费开源工具,图表简单,不支持资源监控
- gatling:基于java的免费开源工具,使用代码执行性能测试,灵活性强,学习成本较高
1.2 官网相关介绍
http://jmeter.apache.org
Documentation--Best Practices 最佳实践
Documentation--Component Reference 组件
Documentation--Function Reference 函数
Tutorials--Distributed Testing 分布式压测
2.jmeter安装及目录结构
2.1 安装及配置
jmeter是基于JAVA的应用,需要有JDK环境的支持
要求JDK版本和Jmeter版本匹配(jmeter官网有要求)最低1.8
外观设置(选项--外观)
GUI语言设置
1.永久设置:jmeter.properties 搜索:language值改为zh_cn
2.临时设置:选项--选择语言--简体中文
日志级别
选项--日志级别
debug<info<warning<error 默认info
2.2 目录结构
bin:Jmeter的主jar包,启动脚本、配置文件和日志文件等
- ApacheJmeter.jar:jar包启动文件(不会启动命令行)
- Jmeter.bat/Jmeter.sh:启动文件
- Jmeter.properties: Jmeter的配置文件,配置文件一旦修改,要重启Jmeter才能生效
docs:jmeter的官方API文档,主要用于二次开发
extras:存放一些附加组件,主要是jmeter和ant的集成所需要的一些文件
lib:该目录发生变更,jmeter必须重启才会有效
lib\ext目录:存放的是第三方的组件和插件,包括我们自己做的二次扩展的
printable_docs:存放的是jmeter官方的帮助文档
启动jmeter
windows:Jmeter.bat/java -jar ApacheJMeter.jar
linux:jmeter.sh/java -jar ApacheJMeter.jar
3.组件介绍
jmeter有六大组件
配置元件、定时器、前置处理器、后置处理器、断言、监听器
这六大组件都可以添加到测试计划、线程组、逻辑控制器、取样器
3.1 配置元件(ConfigElement)
作用:类似于项目的配置文件
主要有:
- csv数据文件设置
- HTTP信息头管理器
- HTTP Cookie管理器
- HTTP请求默认值
- 计数器
- JDBC Connection Configuration
3.2 前置处理器(Pre Processors)
作用:在取样器请求之前执行的一些操作,比如加密入参
主要:BeanShell预处理程序
3.3 定时器(Timer)
作用:一般用来指定请求发送的延时策略,不建议使用
主要有:
- 固定计时器
- 同步定时器(集合点)
- 高斯随机定时器
3.4 后置处理器(Post Processors)
作用:在取样器请求完成之后执行一些操作,通常用于处理响应数据,从中提取需要的值(关联)
主要有:
- 正则表达式提取器
- 调式后置处理程序
- jp@gc-JSON/YAML Path Extractor
- BeanShell后置处理器
3.5 断言(Assertions)
作用:主要用于判断响应是否返回了期望的业务结果
主要有:
- 响应断言
- 断言持续时间
- BeanShell断言
3.6 监听器(Listeners)
作用:监听器可以在JMeter执行测试的过程中搜集相关的数据,并展示
主要有:
- 查看结果树
- 聚合报告
- 用表格查看结果
- jp@gc-Transactions per Second(tps)
- jp@gc-Reponse Times Over Time(响应时间)
- jp@gc-Active Threads Over Time(线程时间分布)
3.7 其他
测试计划(Test Plan)
线程:下面有线程组
- 线程组(Thread Group)
- jp@gc-Stepping Thread Group
- SetUp线程组
- tearDown线程组
逻辑控制器(Logic Controller)
- 事务控制器
- 吞吐量控制器(控制业务模型)
- 仅一次控制器
- ForEach控制器
取样器(Sampler)
- HTTP请求
- jp@gc-Dummy Sampler(mock取样器)
- 调试取样器
- JDBC Request
- 其他:java,tcp,websocket
4.执行顺序和作用域
4.1 执行顺序
1.配置元件
2.前置处理器
3.定时器
4.取样器
5.后置处理器
6.断言
7.监听器
4.2 作用域
取样器(sampler):不和其他元件相互作用,因此不存在作用域问题
逻辑控制器(Logic Controller):只对其子节点中的取样器和逻辑控制器作用
6大组件:配置原件,前置处理器,定时器,后置处理程序,断言,监听器
总结:
- 如果是某个sampler的子节点(放在取样器下面),则该元件对其父子节点起作用(这个父节点就是取样器)
- 如果其父节点不是sampler(比如是:测试计划、线程组、逻辑控制器、取样器),则其作用域是该元件父节点下的其他所有后代节点(包括子节点,子节点的子节点等)
结论:
- 和Java变量作用域类似:局部没有,就用全局的
- 最简单的方式:全部放局部,但是会耗费很多客户端资源
- 所以,公共的,放全局,比如断言的内容相同,特有的,放局部,就是放对应的组件(线程组)或者取样器下面,比如取样器的断言内容不一样