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版本
//www.greatytc.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秒钟


因为请求太多了,所以要勾选只显示错误日志
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,718评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,683评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,207评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,755评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,862评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,050评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,136评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,882评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,330评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,651评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,789评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,477评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,135评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,864评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,099评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,598评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,697评论 2 351

推荐阅读更多精彩内容

  • 1 Jmeter安装配置 使用Jmeter前首先要安装JDK,配置JDK环境变量。Jmeter不需要安装,下载后...
    茶小汐阅读 2,924评论 0 8
  • 一. 性能测试 1.1. 性能测试是什么 1.1.1 广义定义 基于协议模拟用户发出请求,对服务器形成一定负载,...
    KiKi_2005A阅读 423评论 0 0
  • 1.性能测试 1.性能测试是什么 基于协议模拟用户发出请求,对服务器形成一定负载,来测试服务器的性能指标是否满足要...
    连猫都嫌弃我阅读 560评论 0 0
  • 一. 性能测试 1.性能测试是什么 广泛定义:基于协议模拟用户发出请求,对服务器形成一定负载,来测试服务器的性能指...
    c_dab5阅读 181评论 0 0
  • 彩排完,天已黑
    刘凯书法阅读 4,201评论 1 3