第2章 测试工具-JMeter,扩展组件开发
一、测试工具篇-JMeter
- 断言在并发时,不适合用
常用功能
【测试计划】可以理解为各种测试元件的容器。
【线程组】可以设置一些并发策略,模拟并发用户发送请求。
【Sampler】取样器
HTTP请求:测试必备,jmeter测试http协议接口的各种传参方式(链接);
BeanShell Sampler:
Debug Sampler调试取样器:只看到jmeter变量,其他2个默认false;
如果是其它协议,比如java、dubbo、websocket、smtp、tcp、jdbc,添加对应的取样器等即可,如果没有,那么就需要我们自己开发,所以,java基础是必备的。
【逻辑控制器】
if
事务控制器、吞吐量控制器
ForEach控制器
仅一次控制器
【前置处理器】发送请求前做的一些处理
BeanShell PreProcessor
用户参数
【后置处理器】发送请求后做的一些处理
正则表达式提取器:关联的方式很多,用万能的正则;另外,jmeter关联的5种方式
Debug PostProcessor:除了可以看到jmeter变量,还可以看到配置信息,最好放在正则表达式提取器后面,否则看不到提取的结果;
BeanShell PostProcessor
【断言】
响应断言
BeanShell断言
【定时器】类似于LR思考时间
固定定时器
高斯随机定时器
Synchronizing Timer
【配置元件】
HTTP信息头管理器
HTTP Cookie管理器
CSV 数据文件设置:参数化
HTTP请求默认值
提醒:分隔符不能是参数化的值中的符号,否则会被截断,比如,你参数化整个json,逗号作为分隔符,而json中就有逗号,所以,发送请求的时候,会被截断。
【监听器】
查看结果树
聚合报告
【函数助手】
常用的函数需要掌握,如随机函数等,举例:生成1-1000的随机数,可以通过${__Random(1,1000,key)}生成随机数,通过${key}可以获取这个随机数;
【作用域】
全局的放线程组下,局部的,专属哪个取样器,就放哪个取样器下。
【jmeter执行顺序】
配置元件 → 前置处理器 → 定时器 → 取样器 → 后置处理器 → 断言 → 监听器;
同一层级的,顺序执行;
注意:一个万能且保险的方法,放到对应的取样器下面即可。
Jmeter中定义变量的地方:有4种
a) 测试计划(Test plan),在右边的面板上添加User Defined Variables
b) 线程组,右键选择 配置元件——用户定义的变量;( config element)-->User Defined Variables
c) 通过前置或后置处理器生成的变量:Jmeter关联,正则表达式提取器,
前置处理器—用户参数;
d)使用csv参数化的变量:Jmeter参数化
注意:如果同一个变量在多个 b 中被定义,那么只有最后一个定义会生效。
例如 c 或者 d 可以被用来重新定义变量,这些重定义仅仅影响当前线程。
【jmeter生成测试报告】
-
创建脚本
线程组:3个线程持续运行30秒,
http请求:访问百度首页,响应断言“百度一下”
http请求:百度搜索,添加“wd,python”,响应断言“python” -
1、命令方式执行生成报告
jmeter -n -t G:\111lianxi\lianxi\jmeter\3.功能\生成测试报告-举例.jmx -l G:\111lianxi\lianxi\jmeter\3.功能\result.jtl -e -o G:\111lianxi\lianxi\jmeter\3.功能\TestReport -
2、查看报告
点击index.html
聚合报告
【分布式压测】
分布式压测也是需要掌握的,参考:jmeter5.1分布式压测
https://mp.weixin.qq.com/s?__biz=MzIxMzMxMDcwNA==&mid=2247484111&idx=1&sn=85d15b3175bce5821eca5f14b6612e79&chksm=97b98f50a0ce0646b054aa83d78c5ce0a3a823cc19ab3acb89cfb31d4a86e78e7bd9a12caa5b&scene=21#wechat_redirect
【beanshell】
可以参考:玩转jmeter:beanshell必备技能
https://www.cnblogs.com/uncleyong/p/7189778.html
性能测试方案
jmeter实现多并发
- 线程组:负载发生器,用多线程或多进程的方式来模拟用户的使用行为。jmeter是以线程的方式来进行模拟用户的并发访问的。
jmeter实现逻辑分支控制
- 逻辑控制器:用来控制测试脚本的逻辑判断,也可以理解为如何控制脚本的运行。例如控制器,就是当满足什么条件后执行哪一步操作。
- 常用的有:如果(If)控制器 、switch Controller 、Runtime Controller、循环控制器等。另一类是用来组织可控制 sampler 来节点的,如 事务控制器、吞吐量控制器。
jmeter实现配置管理
- 请求头,参数化数据,用户自定义变量 来定义常量
jmeter最佳实践
http://jmeter.apache.org/usermanual/best-practices.html
Jmeter压测减少资源使用的一些建议,即压测结果会更准确:
1、使用非GUI模式(也就是CLI,Command Line Interface,命令行界面):jmeter -n -t test.jmx -l result.jtl
2、少使用Listener, 如果使用-l参数,它们都可以被删除或禁用
3、在加载测试期间不要使用“查看结果树”或“用表格查看结果”监听器,只能在脚本阶段使用它们来调试脚本
4、包含控制器在这里没有帮助,因为它将文件中的所有测试元素添加到测试计划中
5、不要使用功能模式
6、使用CSV输出而不是XML
7、只保存你需要的数据
8、尽可能少地使用断言
9、如果测试需要大量数据,尤其是需要将其随机化,可以提前准备好测试数据放到数据文件中,从CSV数据集中读取, 这样可以避免在运行时浪费资源
二、Jmeter扩展组件开发实战、
1、自定义java请求开发
- 准备工具:下载java,idea——maven
注意:4个方法,顺序
举例:显示百度;访问百度/QQ网页,OK;java代码可以改结果树那里的名称
2、扩展组件开发:自定义函数
- 添加beanshell填写内容:为 下方生成的
- 函数助手,生成复制
火爆的大数据:hadoop
- 对数据处理:实时处理,离线处理
- 了解架构,按模块测试;
实时数据处理三大框架
实战使用jmeter进行大数据性能测试
1、百度Apache kafkat,zookeeper,下载;搭建环境
2、