Jmeter介绍和使用

jmeter简介

jmeter基本概念

  • Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言

jmeter的优点

  • 开源免费,基于Java编写,可集成到其他系统可拓展各个功能插件
  • 支持接口测试,压力测试等多种功能,支持录制回放,入门简单
  • 相较于自己编写框架活其他开源工具,有较为完善的UI界面,便于接口调试
  • 多平台支持,可在Linux,Windows,Mac上运行
  • 支持的协议
    • web:HTTP,HTTPS站点的Web1.0的Web 2.0 (ajax, flex and flex-ws-amf)
    • Web Services: SOAP / XML-RPC
    • 通过JDBC驱动程序的数据库
    • 目录: LDAP
    • 面向消息的服务通过JMS
    • Service: POP3, IMAP, SMTP
    • FTP 服务

jmeter安装

  • 1、下载JDK文件安装,并配置环境变量
  • 2、jmeter官网下载解压
  • 3、bin目录下的jmeter.bat启动即可
  • 4、汉化和乱码解决
    • 在bin目下修改jmeter.properties文件
      • sampleresult.default.encoding=utf-8
      • language=zh_CN

jmeter目录结构

  • bin目录(常用文件介绍)
    • examples:目录下包含Jmeter使用实例
    • ApacheJMeter.jar:JMeter源码包
    • jmeter.log:JMeter运行日志文件
    • jmeter.properties:JMeter配置文件
      • 属性log_level.Jmeter(日志详细度),默认imfo,可以修改为Debug-
    • jmeter.bat是启动文件,其中部分参数支持配置
      • heap(堆内存)最多设置为物理内存的一半,默认设置521M;如果heap超过物理内存的一半,可能运行jmeter会慢,甚至溢出
  • docs目录:JMeter帮助文档
  • printable_docs目录
    • usermanual子目录:用户手册,
      • component_reference.html:最常用的核心文件帮助手册
  • extras目录:提供对ant的支持,利用ant来实现自动化;例如批量执行脚本,产生html报表
  • lib目录
    • ext子目录是jmeter的核心jar包;
    • junit子目录是方junit脚本的
    • 用户扩展所依赖的包直接放在lib目录下即可

jmeter使用

测试搭建

  • 搭建步骤及含义
    • 配置元件(config elements) ---作用范围内的所有元件
    • 前置处理器(Per-processors) ---作用范围内的每一个sampler元件之前执行
    • 定时器(timers) ---作用范围的每一个sampler有效
    • Sampler元件不和其它元件相互作用,因此不存在作用域的问题
    • 后置处理程序(Post-processors)---作用范围内的每一个sampler元件之后执行
    • 断言(Assertions) ---作用范围内的每一个sampler元件执行后的结果执行校验
    • 监听器(Listeners) ---收集其作用范围的每一个sampler元件的信息并呈现
  • 执行顺序与作用域
    • 按照树状结构自上而下执行
    • 某个sampler下的控制元件只对该sampler生效

线程组

  • 各字段含义
    • 线程数:模拟用户数量
    • ramp-up period:准备时长,设置的虚拟用户需要多长时间全部启动
    • 循环次数:单个用户、单个接口的循环次数
  • 字段扩展
    • 总线程数:线程数 * 循环次数
    • 总时长:ramp-up period * 循环次数
    • 场景加载策略:ramp-up period / 线程数

HTTP请求

  • 协议及端口
    • http:80
    • https:443
  • 请求方法(常用)
    • get
      • 参数在url中,以?变量1&变量2
    • post
      • key=value格式:放在参数中
      • json格式:放在消息体中
        • 需要加http请求头Conten-type:application/json
      • key=json格式:放在参数中
  • 超时设置(单位:ms
    • 请求、响应超时(建议5s或者10s)

BeanShell相关

  • 分类

    • 前置处理器:BeanShell PreProcesser
    • 采样器:BeanShell Sampler
    • 后置处理器:BeanShell PostProcesser
    • 断言:BeanShell断言
  • 脚本内直接写脚本

  • 常用内置变量和方法

    • log:写日志到控制台
      • log.info('变量名')
    • vars:操作jmeter变量
      • vars.get(“skuId”):从jmeter中获取${skuId}变量的值
      • vars.put(“name”,”test”):将”test”保存到${name}变量中
    • prev:获取前面sampler返回的信息
      • getResponseDataAsString():获取响应信息
      • getResponseCode():获取响应code
  • 调用jar包

    • 在测试计划中导入jar包
    • import 所需类;
  • 调用java源代码

    • source('jar路径')
  • BeanShell断言

    • Failure:是否失败,boolean类型
    • FailureMessage:失败日志,在断言失败时显示

检查点(断言)的使用

  • 断言分类(常用)
    • 响应断言
    • Json Assertion
    • 断言持续时间
    • Size Assertion:响应字节大小

参数化

  • 三种参数化方式
    • 用户参数
    • CVS Data Config:导入文件
    • 随机变量---通过函数助手生成
  • 常用随机函数
    • __Random:生成随机数
    • __RadndomString:生成随机字符串
    • __time:时间戳
    • __UUID:生成唯一的UUID
    • __CSVRead:CSV文件读取
      • 一个线程只选第一行
  • 函数生成的可选参数
    • 函数生成时可以把随机数保存到一个变量中
    • 该变量可以被再次调用

逻辑控制器

  • 常用的逻辑控制器
    • 循环控制器:可以设置该控制器内的sampler执行的次数,循环次数与线程的循环次数各自独立
    • if控制器:根据判断条件决定是否执行该控制器内的请求,如果是字符串比较条件,参数和字符串都需要加引号
      • 条件格式:{__jexl3(条件表达式)}如:{__jexl3({num} > 10)}、{__jexl3(“${num}” == “10”)}
      • jex
    • 仅一次控制器:该控制器内的请求只执行一次,无论线程循环多少次
    • foreach控制器:可以遍历某个参数数组,循环获取数组中的参数

定时器

  • 常用的定时器
    • 固定定时器:设置一个固定的sleep时间
    • 同步定时器(集合点)
    • 常数吞吐量定时器
  • 同步定时器(集合点)
    • 什么是集合点?
      • 多个用户集合到一个时间点同时并发
    • 集合点设置
      • 用户组数量:0,等同于设置为线程组中的线程数
      • 用户组数量:非0,代表达到设置的用户(线程)后,并发执行后续操作(不可超过线程数
      • 超时时间:0,Timer将等待线程数直到达到了设置用户组数的值后才执行,不够则一直等待
      • 超时时间:非0,如果超过了所设置的最大等待时间后,还没有达到用户组数量设置的值,Timer将不再等待
  • 常数吞吐量定时器
    • 什么是常数吞吐量定时器?
      • 控制接口的TPS
    • 为什么要控制?
      • 为控制TPS过高的接口,占用CPU
    • 字段
      • 目标吞吐量
      • 基于计算吞吐量:建议选当前线程组中所有活动线程

配置元件

  • HTTP Cookie管理器
    • Jmeter自动关联cookie的处理方式
      • 1、在线程组中加一个空的HTTP Cookie管理器
      • 2、通过正则提取后带入
  • HTTP信息头管理
    • 存在接口header中的数据

动态关联

  • 两种方式
    • 正则表达式提取器
      • 引用名称:变量名称
      • 正则表达式生成
        • 1、拷贝目标数据和左右边界
        • 2、把目标数据用括号括起来
        • 3、把目标数据用.+?代替
      • 模板:1
      • 匹配数字:1
    • json提取器
      • 格式:$.路径
      • 调试取样器结合查看结果树使用

插件扩展

  • 插件官网
  • 几个好用的插件
    • 3 Basic Graph:windows下可用的实时的TPS和响应时间的插件
    • Customer Jmeter Functions:扩展函数
    • Random CSV Data Set Config:随机csv文件参数化
    • PerfMon:服务端性能实时监控插件

数据库的使用

  • 步骤
    • 在测试计划中加入mysql驱动的jar包
      • Add directory or jar to classpath
    • JDBC Connection Configuration
      • DataBaseURL
      • JDBC Driver Class
      • Username
      • Password
    • JDBC Request
      • query type
        • Select Statement 查询
        • Update Statement 更新
      • 如需要多个用户配置不同的SQL,可以把SQL语句放在csv文件中,通过参数化进行调用
    • 断言
    • 监听器

分布式性能测试

  • 为什么要进行分布式?
  • 答:jmeter由java开发,耗内存、cpu,所以大并发下还是需要分布式的
  • 步骤
    • 关闭防火墙
    • 选择一台机器作为controller,其他的机器作为agent,全部安装jmeter应用,并运行agent机 器bin目录下的jmeter-server文件
    • 在controller机器的bin目录下找到jmeter.properties文件中修改remote_hosts地址
    • 在controller机子的jmeter应用点击运行-->远程启动即可

监听器

  • 常用的监听器
    • 断言结果
    • 查看结果树
    • 聚合报告
    • 用表格查看结果
    • 图形结果
    • aggregate graph
    • 等等。。。。。
  • 文件保存
    • 默认保存为jtl文件
    • jtl文件分析
  • 聚合报告含义及分析
    • 各个字段的含义(单位:毫秒
      • Lable:定义HTTP请求名称
      • Samples:这次测试中一共发出多少个请求
      • Average:平均响应时长
      • Median:50%用户的响应时长
      • 90%Line99%Line:90%99%用户的响应时长
      • Min:最小响应时间
      • Max:最大响应时间
      • Error%:错误率
      • Throughput:吞吐量--默认表示每秒完成的请求数量
      • Received KB/src:每秒从服务器端接收的数据量
      • Sent KB/src:每秒从客户端发送的请求数量
    • 性能指标分析
      • 并发数(用户数量)
      • 响应时间
      • 吞吐量(TPS)
      • 流量
      • 硬件指标
        • CPU
        • I/O
        • 内存(memory)

命令行执行

  • 准备工作
    • 1,压力机安装并配置好JDK
    • 2、配置jmeter的环境变量
    • 3,调试好jmeter脚本
  • 单机器测试步骤:
    • 执行 jmeter -n -t test.jmx -l result.jtl
      • -n: 命令行模式,no-gui
      • -t:jmx脚本路径;
      • -l:jtl结果文件存放路径
  • Html报表生成步骤
    • 1、进入jmeter的bin目录下,修改reportgenerator.properties
    • 2、修改jmeter.reportgenerator.overall_granularity=1000(报表中数据展示间隔1秒)
    • 3、创建一个存放数据报表的文件夹
    • 4、执行命令:jmeter –g result.jtl –o ./output
      • -g: 指定jtl文件的路径
      • -o: 指定html报表生成到哪个文件夹下

项目实操

文件上传和下载

  • 上传
    • POST请求,勾选 use …for post
    • 同请求一起发送文件里,填写文件名称,参数名称
    • MIME类型: application/octet-stream
  • 下载
    • 如何判断是否下载成功?
      • 判断响应体的字节比真实文件的字节大

webservice接口

  • webservice的网址
  • webservice接口和http接口的异同点
    • webservice是基于http接口封装的,是xml的
  • webservice接口调用关键点
    • 1、把参数放在消息体中
    • 2、添加header:Conent-type:text/xml

接口签名校验

--------------待补充-------------------

性能测试报告

  • 目录:
    • 测试计划
    • 参考资料
    • 术语解释
    • 系统介绍
    • 测试环境
    • 测试指标
    • 测试工具和测试策略
    • 测试数据收集
    • 测试结果数据与截图
    • 测试结论
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容