Jmeter

零、 一些乱七八糟的废话

性能关键指标
多 - 并发量 能够支持最大的用户访问量
快 - 响应时间 有多快
好 - 稳定性 (长时间运行)
省 - 资源使用率
加上 思考时间

  • 响应时间 - 普遍接受响应时间 2、5、8秒 好,可以接受,上限
  • 并发用户数 影响最大的是内存
    并发用户数C计算:C = nL/T
    C - 平均并发用户数
    n - 平均每天访问用户数
    L - 一天内用户从登录到退出的平均时间
    T - 是考察时间长度(一天内多长时间有用户使用系统)
    并发用户数峰值C^计算
    C^ 约等于 C + 3 根号C
    系统用户数 - 注册用户量 影响的是磁盘空间
    初始化性能环境 warm up 热机*也就是说 模拟实际使用场景,用户量之类的 磁盘到内存的过程
    关于 异地访问服务器 响应时间的差异 找运维 - 在两个防火墙之间注入网络延时
  • 吞吐量 -
  • 系统性能计数器 -
  • 思考时间 - 更加真实的模拟用户使用


    用户300的时候出现拐点,说明饱和了,性能瓶颈,这种平直线多数是因为网络问题,需要增加带宽,丢包了
    平直线部分如果是波浪线需要加服务器,内存满了,还是cpu满了

每台机器能创建多少个用户 由1. 机器的内存(物理内存)和
2.jmeter 是一个java进程 - 进程需要一定的内存资源-堆内存
3.端口号,占用端口号分布不均 需要用主从机-分布式-负载均衡

一、 安装

mac版本
https://www.jianshu.com/p/bce9077d883c

  • 下载 pache-jmeter-5.0.tgz 放网盘了
  • 需要java8的环境 java环境看前边的笔记
  • 配置PATH 使得终端 输入jmeter就可以打开
    open ~/.bash_profile
export JMETER_HOME=/Users/lxr/apache-jmeter-5.0
export PATH=$JAVA_HOME/bin:$PATH:.:$JMETER_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar:$JMETER_HOME/lib/logkit-2.0.jar

source ~/.bash_profile

然后就可以在终端输入 jmeter 打开jmeter程序了

  • 设置jmeter语言



    通常是写http的请求,写不了解的请求时,可以用这个模板
  • 关于jmeter的属性设置
    (1)/Users/lxr/apache-jmeter-5.0/bin/jmeter.properties
#language=en  -> language=zh_CN

(2)分布式 remote_hosts ip地址逗号隔开

二、 jmeter 使用

1.配置元件
HTTP请求默认值
HTTP消息头管理
HTTPCookie管理器
HTTPCache管理器
2.监听器
①察看结果树※
I:分析某个请求明细、详情:请求头、请求体;响应头、响应体
II:性能场景 分析请求错误原因 之类的
②聚合报告 汇总统计:请求数、响应时间(平均、90%、95%、min、max 毫秒)、错误率、吞吐量(越高越好)、发送/接受量(带宽)
③用表格查看结果(能体现起始时间)
④图形结果
3.其他元件
①前置处理器(发送请求前执行的元件。比如加密、)
②后置处理器(比如:提取数据)
③定时器(1.思考时间-固定定时器;2.同步定时器-集合点几点抢购;3.随机定时器;4.吞吐量定时器)

  1. 创建测试计划 选择保存位置
  2. 创建线程组 不做负载就线程数之类的全部 输入1


  3. 增加HTTP请求 - 保存
    测试环境正式环境 需要来回切换之类的所以 要有一个 HTTP请求默认值,里头弄好了,其他的请求 一样 就不用写了
    增加HTTP请求 - 保存
    填写接口

    4.察看结果树 看接口请求结果 线程组 右键 添加 监听 查看结果树
    新建一个Excel文件 将后缀改成.csv,图中文件写入选择它,运行结果就会保存到这个路径下的csv文件中

    用表格查看结果 添加 - 监听器 -
  4. HTTP Cookie管理器 - 有些需要有cookie作为参数的接口需要 添加配置元件 HTTP Cookie管理器 添加了 放在这里就成了 自己就存起来了


  5. Token获取
    添加 http请求 返回token的
    添加后置处理器 JSON提取器 提取参数详细文章https://www.cnblogs.com/tudou-22/p/12579575.html
    用Debug PostProcessor检查json提取器是否成功取到了值(查看完了 要禁用它)详细文章 https://www.cnblogs.com/fengpingfan/p/5894020.html
    从查看结果书中 这个请求出现小三角可以打开看
    用变量的时候 ${token}
  1. 响应断言 - 在要执行断言的 请求下添加 注意作用域,可以拖拽过去


  2. 线程组下 右键 添加 监听器 断言结果 ,然后运行 绿三角
  3. 聚合报告
  4. 生成HTML报告

关于脚本录制,可以用Fiddler抓包,可以导出jmx文件 用jmeter打开

Part2、代理 脚本录制

  1. 新建线程组
  2. 测试计划 添加 非测试元件 HTTP代理服务器
  3. 打开浏览器(谷歌为例)
    设置 -> 高级 -> 系统 -> 打开您计算机的代理设置


    记得点 保存


    导入证书 设置 - 高级 - 隐私设置和安全性 - 安全 - 下滑 管理证书
  • Windows


    选择证书
  • Mac

    双击点开证书
    添加位置切换成 系统

    在钥匙串中找到,发现还是不受信任状态,修改成始终信任即可
  1. Requests Filtering - 包含模式 - 排除模式 设置正则
    .*www\.wanandroid\.com.*
    .*\.(js|css|PNG|jpg|ico|png|gif).*
  2. 启动HTTP代理服务器
  3. 浏览网页 即可录制成功,添加 - 察看结果树 能察看结果

prat3、苹果电脑 录制 苹果手机

  1. PC http代理 系统设置 - 网络 - 高级 - 代理 - 勾选输入 - 好 - 应用
  2. jmeter HTTP代理服务器设置 - 点运行 - bin文件夹下生成证书
  3. iPhone 安装jmeter的信任证书
    cd /Users/lxr/apache-jmeter-5.4/bin
    python3 -m http.server 8080

    访问 http://[ip地址]:8080下载证书 - 并去设置里安装信任证书
  1. 手机配置 代理

    设置 - 无线局域网 - ① i - 配置代理 - 电脑iP 刚电脑上网络页面就有 - 端口号8888 设置完了,手机连不上网了去检查jmeterHTTP代理服务器启动了没有

  2. 启动jmeterHTTP代理服务器后 这个弹框不能关闭

Part4、参数化

概要

  1. 参数化流程
  • 找出需要做参数化的数据
  • 准备提供给参数化需要的数据源
  • 关联数据 把脚本里的常量变成变量(使用前面的数据源数据)
  1. jmeter参数化方式
    ① CSV -- 需要配置的元件
    ② 函数式(随机数、时间 time、counter计数器)
    ③ 变量
    ④ 编程式

使用场景

  1. CSV 账号密码 作用域看这个数据源给谁用



    token 后置 JSON提取器


    添加-后置处理器-JSON提取器
    添加-取样器-debug调试取样器
    察看结果树中 看调试取样器 中参数,开发完了 给调试器禁用
  2. 函数式
  3. 变量
  4. 编程式
  • 引入外部的jar、java、class包
  • 使用beanshell编程

Part5、Jmeter用正则关联

  1. 正则表达式
    ()括起来的部分就是要提取的部分
    . 匹配任何字符串
  • 一次或多次
    ? 找到第一个匹配项后就停止

    添加 取样器 Debug 运行在察看结果树中来看变量有没有成功取到

    应用
获取公众号列表https://wanandroid.com/wxarticle/chapters/json 
https://wanandroid.com/wxarticle/list/408/1/json
方法:GET
参数:
    公众号 ID:拼接在 url 中,eg:405
    公众号页码:拼接在url 中,eg:1

请求结果为 提取其中的"id": 408

添加 - 后置处理器 - 正则表达式提取器

用美元符号来应用该变量

Part5、集合点技术

eg:到点抢购

线程数 5 个用户,Ramp-up 5s 5s生成5个用户
并发登录 注意作用域

给登录请求 添加 - 定时器 - Sychronizing Timer (同步定时器)

两个输入项
模拟用户组的数量(Number of simulated Users to Group by):集合够多少个用户/线程后发一次请求
???0 就是跟线程组设置的线程数一样??但是我的不是这样 还是差几毫秒的,填跟线程组设置 线程一样的话 就是同时了
超时时间(Timeout):等待集合,直到超时 ms 毫秒,(设置值大于线程数量,或者最后的一批个数 不够一拨了比如 线程数5 设置2个一拨 最后一个等不齐,就只能等超时了)

Part6、实战

新的点

  1. 仅一次控制器 某些请求 只想每个用户执行一次 添加 - 逻辑控制器 - 仅一次控制器

    将请求拖进里边
  2. 测试计划 中有多个线程组,默认是同事执行的 勾选后就是按照顺序执行,但是不影响setup 和 teardown
  3. 用户自定义变量 将项目中用到的会重复使用会变的 全局的东西拿出来

    脚本开发
  4. 参数化数据 并发登录,多用户(不同账号)
  5. 准备好数据源
  6. 脚本中的常量 改成 变量 (将用户名 密码 用变量代替)

CSV 数据文件设置

请求数据替换成变量
线程组 并发设置 设置 1 秒 产生5个用户 一直循环执行 10秒

Part 7

性能调优https://www.bilibili.com/video/BV1xV411m7eo

  1. 聚合报告
  2. Grafana 性能调优
  3. 命令行 top
    分析过程
  4. 聚合报告 响应时间 错误率 吞吐量 来判断 问题出现在哪里
    eg:响应时间大于预期值
  5. Grafana 性能调优 通过Grafana查看是什么东西的问题
    eg:发现CPU爆红 使用率过高
  6. 命令行 top 查看具体哪个进程使用CPU高

结合看
先用python代码给 100个账号密码 写入文件

with open('/Users/lxr/jmeter_file/都市商城账号.txt', 'w') as file:
    for i in range(1,100):
        num_str = (3-len(str(i)))*'0' + str(i)
        file_str = 'sq'+num_str+','+'123456'+'\n'
        print(file_str,type(file_str))
        file.write(file_str)

20秒内生成100个用户,每秒5个用户,持续执行10秒钟


因为请求太多了,所以要勾选只显示错误日志

你可能感兴趣的:(Jmeter)