jmeter常见配置介绍

jmeter常规配置

任一配置修改以后,重启才能生效

临时修改

菜单栏: options(选项) > choose language > chinese

永久修改中文

bin目录下.properties,属性配置language=zh_CN

Jmeter文件结构

/*
bin:
    + 启动、配置参数
    + jmeter中,所有以.properties结尾的文件,都是jmeter的**属性**配置文件
jmeter的堆栈信息配置
    + windows:   jmeter.bat     HEAP=
    + linux\mac: jmeter
    + 默认为:Defaults to '-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m'
docs:文档  api    对jmeter进行二次开发,需要去阅读api文档

extras:   扩展 额外的 在CICD 使用

lib(library):  meter工具代码打成的jar文件
    ext:存放第三方插件

printable_docs: jmeter的**离线**帮助文档

*/

jmeter面版

  • 00:00:00

    • 脚本总共运行的时间

  • 三角形图标 + 后面数字

    • 开启jmeter工具运行的日志, 数字,工具运行过程中错误数量

    • 不代表,脚本请求过程中是否有错误

    • 如果有红色数字,说明jmeter工具运行过程中,工具出错了。

  • 0/0

    • 前面数字: 当前我们在做性能测试时运行中的线程数

    • 后面的数字总共启动的线程数(你性能场景设计时,设置的线程数,并且系统产生的数量)

jmeter测试计划

  • 测试计划( Testplan)

    • 脚本根目录,树的根节点

  • 配置元件

    • 在脚本之前要准备的一些事情

    • 配置元件,在脚本中,优先级是最高的,最先被执行

    • 如果配置元件出错,会导致整个脚本不运行

    • 如:用户定义变量csv数据文件设置

  • 监听器

    • 进行脚本开发阶段,需要使用监听器,但是,在性能测试执行时,建议不要使用监听器(禁用)

    • 因为,监听器是要分析响应的结果,这个分析是要消耗资源(消耗的是发起方的资源)

  • 定时器

    • 定时设置

    • 同步定时器,用于做狭义并发,可以控制取样器达到多少用户数的时候同时并发

配置元件和前置处理器

用户参数,是前置处理器元件,

户定义变量,是配置元件

# 配置元件的 优先级最高,最先被执行,也就是说,用户定义变量 优先级比用户参数要高,用户定义变量会比用户参数先执行。

配置元件优先级

/*
配置元件: 优先级是最高的
1、如果放在线程组下,它作用域整个线程组
2、如果是放在某个取样器下面,它就作用于当前这个取样器
   如果线程组中取样器有自己的值,才使用自己的值
*/

取样器

  • 作用域

    • 只作用自身

  • 优先级

    • 根据不同的协议,编写脚本------脚本的执行体,是我们的先后顺序的判断点

  • 取样器的执行顺序:

    • 在没有逻辑控制时,执行顺序从上往下执行

  • 查看结果树

    • 查看结果树,显示的顺序:收到响应的先后顺序

前置处理器

  • 优先级

    • 在取样器执行之被执行

  • 作用域

    • 如果它挂在某一个取样器上,那么它的作业域,在当前这个取样器上,以及取样器之后的取样器上。

    • 如果它放线程组下面,不在任何一个取样器下面,它作用于整个线程组

后置处理器

  • 优先级

    • 在取样器执行之被执行

  • 作用域

    • 如果挂载在某一个取样器上面,就是对当前取样器的结果来进行处理

    • 如果放在线程组下面呢?----要么报错,要么结果不可空,所以,不要把后置处理器直接挂在线程组下面。

定时器

  • 作用域

    • 作用域于取样器上面

用户定义变量

1、在测试计划中定义

2、配置元件中定义

如果是在测试计划中定义,就是全局变量

如果是取样器-配置元件定义,则作用域该取样器

# 用户定义变量:是全局变量,在整个jmeter脚本中,都可以被使用。
# 用户参数:是局部变量,只能在当前的线程组中被使用

关于用户自定义变量/用户参数

用户定义变量:可以跨线程组传参的值

用户参数不可以直接跨线程组传参,可使用_setproperty函数

# 用户定义变量:配置元件
# 用户参数:前置处理器
​
## **用户定义变量,是全局变量,在启动运行时,获取一次值,在运行过程中,不再获取值。**
​
## **用户参数,是局部变量,再启动运行时,获取一次值,再运行过程中,还会动态获取值

前置处理器-用户参数

/*
每次迭代更新一次-选项:
每次迭代:一轮迭代执行完,是表示:线程组下面所有的取样器执行完一轮,算一个迭代,只有所有的取样器都执行一轮,这个值,才会重新获取
*/

多个线程组执行顺序

/*
Jmeter中多个线程组:默认,多线程组是并行执行
可以通过勾选测试计划中,“独立运行每个线程组” 让并行,变成串行。
注意:在性能测试中,不建议去勾选。
*/

监听器

保存响应到文本

  • 文件名称前缀: test_file_01.txt 即:要保存的文件名,默认是保存在bin目录下

    • 那这里文件名重复的时候 会覆盖吗?TODO

  

  • Don't add number to prefix 是否要加数字前缀
  • Don't add content type suffix 是否要加类型为后缀
  • 如果不勾选以上两个,生成的文件就不是想要的文件了,生成的是 test_file_01.txt.plain 这样的测试计划,就不是对应的文件格式文件了
  • 注意:
    •  不能保存为csv文件,会导致所有的字段都在同一列单元格里面了,因为csv默认是用逗号分隔列的,而保存文件到文本,是用tab键(即/t)来进行分隔列的
  •   Add timestamp
  • 注意:
    •  这个保存文件到文本的监听器放到不同的位置,保存的内容也不一样,如果加取样器的话,好像是写入的取样器里面的结果,就不是保存的想要取样器接口的响应内容了
  •  保存路径
    • csv的相对路径: 首先从jmx保存的文件夹中寻找,如果能找到,就用这个;如果找不到,从jmeter的启动位置(bin)去找,所谓启动位置就是jmeter.bat的路径

聚合报告

每一是一种事务

  • 样本数 vs 并发数

    • 样本数:一定量的并发用户数,执行一段时间之后的总的请求数量

    • 样本数 = 一定量的并发用户数 * 运行时长 * tps

      • 单独看样本,并不知道并发用户数是多少

    • 时间: 平均数、中位数、90% 95% 99% 最小值 最大值

      • 单位: 毫秒 ms

      • 90% 95% 99%

        • 90%: 在所有的样本时间中,有90%的样本时间是小于等于这个时间的

      • 最小值、最大值

    • 异常率: 在总的请求次数中,有多少的请求失败的

      • 没有断言时,发起方到服务器,服务器处理失败的数量 / 总样本数

      • 如果有断言, 要加上断言/总样本数

      • 企业中一般的标准 0.1% 0.01%

    • 吞吐量:等价于tps?的两个条件

      • 1、在没有网络瓶颈的时候,我们才能看吞吐量

      • 性能测试时,并发用户数不变的时候,才能看吞吐量。

        • 如果并发用户数,是变化的,就不能看这个值。

        • 因为,这个值,是一个平均值

        • 这两个条件,有任何一个不满足,都不能用这个吞吐量来衡量服务器处理能力。

    • 吞吐量=总样本数 / 时间 得到的一个平均值

      • 并发用户数 * 时间 * 频率(tps)/时间

      • 吞吐量 = 并发用户数 * 频率TPS

    • 接收KB/S 发送KB/s =====吞吐率

      • 用带宽 ----这个值,若与带宽比较近,很可能网络已经成为瓶颈了。

      • 吞吐率的值,可以大概估算出我们带宽是否成为网络瓶颈

    • APDEX 用户满意度指数标准

      • 时间标准 1.5s 低于500ms是满意的,500~1.5s能接受的,超过1.5s是不能接受

      • 企业的一般标准: 平均响应时间小于1.5s,错误率<0.1%

        • 也有企业,90%的时间作为参考

内容编码注意事项

在写get请求的时候,参数值,建议: 不管是什么类型的值,都勾选“编码”

  • 请求体的编码控制有3个地方

    • 1、内容编码: utf-8 utf8

    • 2、json格式,请求头Content-Type:application/json;charset=utf8

    • 3、get请求参数: 参数值勾选“编码”

      • get请求的参数,如果有中文,你填写了内容编码utf-8,还必须勾选“编码”,但是,如果只勾选“编码” 可以不填内容编码

  • post请求json: 内容中如果有中文,需要去写内容编码为utf-8

取样器中的重定向

  • 跟随重定向:3xx 在查看结果树中,可以看到请求的过程,也可以提取重定向过程中的信息。 默认勾选

  • 自动重定向: 3xx 在查看结果树中,看不到中间跳转过程,也无法提取中间过程的信息

长连接keep-alive

  • 默认勾选,表示长连接

    /*
    出现连接被拒,端口数量不够用时,取消勾选;
    java.net.BindException: Address already in use: connect
    ​
    注意:去掉 http请求中  keepalive的勾选  ------
    会导致测试出来的响应时间,会比真实的情况要长一些。
    */

     

  • 不勾选,表示短链接

     

跨线程组传递的两种方式

setproperty

  • 使用__setproperty函数,然后使用_p函数引用属性

文件转接法

一个线程组运行结果,存储到文件,另一个线程组,通过 CSV 读取文件,然后再提取文件中需要的值,作为变量输入

第一个线程组中,调用接口,然后添加监视器-> 保存响应到文件,设置保存文件的路径和文件名前缀

第二个线程组去读取CSV

响应体乱码

# 响应体中中文乱码的原因:
# 因为jmeter使用的是我们系统的编码,默认是gbk编码,响应编码可能不是gbk,与gbk不兼容

# 解决:通常jmeter.properties配置文件   搜索  encoding 找到 sampleresult.default.encoding= ""把这个的值,修改为 UTF-8

 

posted @ 2023-03-27 21:52  无敌大牛牛  阅读(398)  评论(0编辑  收藏  举报