
某知名在线教育公司测试开发
霍格沃兹测试开发助教
擅长Java,docker,python
多年自动化框架的二次开发
假如某外卖日订单量300W,平均一单外卖30元
中午高峰期宕机10分钟
外卖80%点单在中午和晚上 4个小时内
10 * 300w * 80% / ( 4 * 60 ) = 100w
4 * 60 总共多少分钟
300w * 80% 总共单量
一分钟单量 = 总单量 / 总分钟
10 分钟的单量
简单理解
功能测试
性能测试
接⼝响应时间
吞吐量
TPS:Transaction Per Second 事务处理能⼒,每秒处理事务数
直接扩容解决
阿里云服务器一个服务器企业级的都要两三万
良好的容量规划能力 + 性能调优能力
给公司省钱
短时⼤并发
⻓时⼩并发
Apache AB
http协议LoadRunner
Ngrinder
Locust
阿⾥ PTS
Web - HTTP, HTTPS (Java, NodeJS, PHP, ASP.NET, …)
SOAP / REST Webservices
FTP
Database via JDBC
LDAP 轻量目录访问协议
Message-oriented middleware (MOM) via JMS
Mail - SMTP(S), POP3(S) and IMAP(S)
TCP
功能测试
压力测试
分布式压力测试
Apache 组织开发的开源免费压测⼯具
多平台兼容,纯JAVA开发
源程序可以从⽹上下载

各种报表数据图形展示
beanshell


JMeter 安装JMeter 是Java应用,需要jdk环境支持
建议安装JDK环境,JRE也可以,但是https需要JDK里面的 keytool
jdk安装 最低版本1.8 下载链接
配置jdk环境变量:
export JAVA_HOME=/***/jdk1.8.0_291.jdk/Contents/Home
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin

JMeter目录结构JMeter目录结构JMETER_HOME/bin
放的是JMeter的主jar包、启动脚本、配置文件
ApacheJMeter.jar:
JMETER_HOME/binjmeter.bat/jmeter.sh(jmeter):
JMeter的启动脚本,JMeter启动脚本时的JVM参数进行调整
HEAP:="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m"
-Xms1g -Xmx1g 不要超过物理内存的50%
通过jconsole查看jmeter内存设置是否成功

JMETER_HOME/binexamples目录:
jmeter.properties:
JMeter主要配置文件,大部分选项在该文件中配置
language=en
language=zh_CN
sampleresult.default.encoding=ISO-8859-1
sampleresult.default.encoding=UTF-8
user.properties:
log4j2.xml:
JMETER_HOME/docsJMeter API
docs/api/index.html
JMeter二次开发,beanshell的使用
beanshell的使用java请求中
Java Request
SamplerData : Welcome ceshiren.combeanshell
BeanShell PostProcessor
System.out.println(prev.getSamplerData());SampleResult
beanshell的使用http请求中
HTTP Request
beanshell
BeanShell PostProcessor
System.out.println(prev.queryString);
System.out.println(prev.getQueryString());
SampleResult

JMETER_HOME/extras附加目录,存放的是JMeter和其它工具集成所需要的一些文件
提供了对Ant的支持,用ant实现自动化测试 批量脚本执行,生成html报告
ant-jmeter-1.1.1.jar
JMETER_HOME/libJMeter启动默认的classpath路径
使用JMeter进行测试的过程中,所有依赖的(import)的类都必须以jar包的方式存放于该目录。
如果lib内对应jar包发生改变,重启JMeter才能生效
lib/ext
存放JMeter组件、第三方组件和插件
组件和插件:继承JMeter的GUI框架的对象,在GUI模式下可见
上台面的都在ext,不上台面的在lib
JMeter目录结构JMETER_HOME/printable_docs

BlazeMeter录制脚本第三方工具录制:
BlazeMeter{chrome浏览器}JMeter录制
抓包手写
BlazeMeter基于Chrome浏览器的插件
在Chrome浏览器中直接生成录制脚本
BlazeMeter
BlazeMeter默认Only Top Level Requests
改为Top Level下的other

BlazeMeter对录制脚本命名为demo
点击start recording

BlazeMeterchrome浏览器打开相关网站 https://ceshiren.com/
录制成功后点击停止

BlazeMetersave
BlazeMeter
BlazeMeter
JMeter录制请求JMeter录制请求原理客户端需要进行相关的设置
客户端通过代理服务器与被测服务进行通信

确定对应的压测对象,对应网站http://news.baidu.com
确定对应的压测页面:⾸⻚,国际频道,财经频道
相关的步骤确定一下:
点击页面的国际(频道)
点击页面的财经(频道)
JMeter录制步骤添加 HTTP(S) 测试脚本记录器
命令行打开JMeter
新建压测脚本
添加非测试元件 HTTP(S) Test Script Recorder
HTTP(S) Test Script RecorderTo use the recorder, add the HTTP(S) Test Script Recorder element. Right-click on the Test Plan element to get the Add menu: (Add → Non-Test Elements → HTTP(S) Test Script Recorder ).

添加 Thread Group添加线程组

添加 Recording Conroller添加录制控制器

监听端口的设置根据业务设定对应录制的端口及请求
打开HTTP(S) Test Script Recorder
设置监听浏览器端口号,默认是8888,要求是本地没有被占用 6666
mac:netstat -an|grep "8888"
window:netstat -an|findstr "8888"
脚本存放路径的设置设置录制请求的路径
录制出来的请求放在 线程组/Recording Conroller
测试计划–线程组
测试计划–线程组–Recording Conroller
录制乱码问题Recording's default encoding
录制的默认编码格式 utf8
解决中文乱码
Exclude
Include
请求包含内容,只抓京东URL的内容,不抓其他网站的内容
Requests Filtering添加Include,Exclude
Include:.*\.(jd\.com).*
Exclude:.*\.(png|jpg|css|jsp|js|mp4|gif).*
服务器发送到客户端的文件,常见的比如js、css、图片、音频等
静态资源不占用服务器运算资源,压测不关注
静态资源放到cdn
自建 CDN
又拍云
阿里云
七牛云

Chrome
127.0.0.1
localhost


Firefox
127.0.0.1
localhost




JMeter 需要使用自己的证书才能拦截来自浏览器的 HTTPS 连接
JMeter 必须伪装成目标服务器。
对应系统没有安装jmeter证书导致
系统导入jmeter证书


检验代码的正确性
压测的话也是代码
JMeter上添加查看结果树「View Results Tree」
检验对应请求接口是否能跑通
点击JMeter的运行按钮
查看结果树里面检查刚刚的请求/响应是否都成功
小结JMeter 脚本录制之前的业务步骤梳理、明确
JMeter脚本相关组件添加
创建代理 HTTP(S) Test Script Recorder
添加 Thread Group
添加 Recorder Controller
小结配置相关内容
端⼝、包含URL过滤(include)、排除URL过滤 (exclude)、存放位置录制步骤
开启JMeter代理
配置浏览器的代理
在浏览器中完成业务操作
运⾏验证
JMeter 中完成录制之后检查
运⾏单并发压测,验证是否跑通
在 View Results Tree 中查看结果
JMeter代理录制APP端
代理录制APP端手机是iPhone
app选择哔哩哔哩,App Store上下载安装
为什么不用安卓?Https对应的抓包必须有相对应的证书进行信任
JMeter的证书只能安装到用户信任的证书库里
安卓系统版本是7.0以上,不会信任用户证书库
非要用安卓怎么办?改对应的源码
在手机上安装黑客工具
打开哔哩哔哩app
搜索: 霍格沃兹测试
切换到用户tab,进入第一个用户
切换主页,动态,投稿三个tab
JMeter录制步骤添加 HTTP(S) 测试脚本记录器
命令行打开JMeter
新建压测脚本
添加非测试元件 HTTP(S) Test Script Recorder
HTTP(S) Test Script RecorderTo use the recorder, add the HTTP(S) Test Script Recorder element. Right-click on the Test Plan element to get the Add menu: (Add → Non-Test Elements → HTTP(S) Test Script Recorder ).

添加 Thread Group添加线程组

添加 Recording Conroller添加录制控制器

监听端口的设置根据业务设定对应录制的端口及请求
打开HTTP(S) Test Script Recorder
设置监听浏览器端口号,默认是8888,要求是本地没有被占用 6666
mac:netstat -an|grep "8888"
window:netstat -an|findstr "8888"
脚本存放路径的设置设置录制请求的路径
录制出来的请求放在 线程组/Recording Conroller
测试计划–线程组
测试计划–线程组–Recording Conroller
录制乱码问题Recording's default encoding
录制的默认编码格式 utf8
解决中文乱码
开始录制打开JMeter代理:
HTTP(S) Test Script Recorder的Start
开始录制 单击弹框中的OK


证书配置对应证书配置
iPhone配置JMeter证书
7天有效期
证书位置:
JMETER_HOME/bin/ApacheJMeterTemporaryRootCA.crt手机端证书配置电脑上安装了对应的python环境
cd到对应JMeter的安装路径下
python环境是2.*版本
python -m SimpleHTTPServer 8080
python环境是3.*版本
python3 -m http.server 8080
手机端证书配置查看本地ip,命令行输入
ifconfig | grep inet

手机端证书配置手机端浏览器输入:
http://192.168.0.102:8080
避坑手机打不开网页?
手机连接的Wi-Fi和电脑端是否一致
需要在一个局域网内
手机端证书配置证书下载手机端证书配置通用 --> 描述文件 --> 安装信任JMeter开头的描述文件手机端证书配置点证书,查看页面显示到期日
手机端证书配置设置 --> 关于本机 ,证书信任设置打开
电脑端,对应的命令行打开的服务终止
手机端代理配置手机端网络连接 --> 配置代理,填对应服务器及端口号请求过滤只是录制**哔哩哔哩**app相关
Resquests Filtering,
URL Include,add:
.*\.(bilibili\).*请求过滤去掉页面相关的静态资源
Resquests Filtering,
URL Exclude,add:
.*\.(png|jpg|css|jsp|js|mp4|gif).*检验代码的正确性
压测的话也是代码
JMeter上添加查看结果树「View Results Tree」
检验对应请求接口是否能跑通
点击JMeter的运行按钮
查看结果树里面检查刚刚的请求/响应是否都成功
小结JMeter 脚本录制之前的业务步骤梳理、明确
JMeter脚本相关组件添加
创建代理 HTTP(S) Test Script Recorder
添加 Thread Group
添加 Recorder Controller
小结配置相关内容
端⼝、包含URL过滤(include)、排除URL过滤 (exclude)、存放位置录制步骤
开启JMeter代理
配置浏览器的代理
在浏览器中完成业务操作
运⾏验证
JMeter 中完成录制之后检查
运⾏单并发压测,验证是否跑通
在 View Results Tree 中查看结果
测试计划 + 线程组测试计划
测试计划JMeter默认的组件,不可以删除
所有组件都是位于测试计划组件之下
保存JMeter的脚本的时候又叫做保存 测 试 计 划
测试计划全局变量的配置
配置的格式为key,value
IP地址为:192.168.1.199

测试计划全局变量的配置

请求引用http request组件进行引用
IP对应的name属性名即可:${hostname}不同测试环境下进行相同业务的测试

测试计划JMeter内一个测试计划下的所有线程组默认是并行运行
测试计划多个线程组之间的运行为非并行运行
Run Thread Groups consecutively「独立运行每个线程组」示例jmx:测试计划.jmx

测试计划最后一个框内是jar包的导入
对应的最后一个框内是jar包的导入,不建议用
拷贝到JMeter安装路径下的lib内
线程组
线程组JMeter里必选组件
控制虚拟用户如何执行脚本
JMeter的线程组件默认有三个
setUp线程组
tearDown线程组
线程组
区 别执行顺序:
setUp线程组 --> 线程组 --> tearDown线程组
代码中的 before 和 after 的方法
setUp线程组setUp线程是先进行执行,运行完成后才运行线程组
tearDown线程组tearDown线程是最后执行
线程组线程组JMeter中,场景计划通过线程组设置来实现的
场景是组计划模式,不是全局模式
单一场景,就是一个测试计划下有一个线程组
混合场景,就是一个测试计划下有多个线程组组成
组件中各个字段的相关含义第一部分
第一部分名称
这个名称只是随意起的名字
没有实质性的作用,只是该组件代号
类比到代码里相当于声明的方法名
起名为setUp线程组,运行的时候也不是提前运行,只是显示名称为setUp
注释
和代码中的注释一样
自己想写什么就写什么,结果树里不会显示出来
第二部分
第二部分继续「Continue」
启动下一进程循环「Start Next Loop」
忽略错误,执行下一个循环
执行到第5个请求报错,对应到下面到请求取样器不会进行执行,直接进行一个新一轮到测试,从第一个取样器请求开始
第二部分停止线程「Stop Thread」
停止测试「Stop Test」
立即停止测试「Stop Test Now」
第三部分
第三部分线程属性
线程数
Number of Thread (users);虚拟用户数,模拟的用户数量
在整个测试过程中所启动的线程的总数
⚠️ 线程数不等于并发用户数,也不等于在线用户数
Ramp-Up period(in seconds)
设置启动所有线程所花费的总时间
线程启动的方式:
N秒 = 总时间/总线程数举例线程数设置为50,Ramp-Up设置为5,那么每秒启动的线程数50/5
🤔️:10个线程,每隔5秒启动一个,该怎么设置??

举例线程数设置为10,Ramp-Up设置为50
如果线程数设置为10000,Ramp-Up设置为0/1,会发生什么?
举例短时间内会把线程发送完,压测机能承受住就好
压测机能不能一次性启动10000个请求?
每隔N秒启动一个线程是不是最终对服务器造成的压力是每隔N秒一次请求?
举例第三部分循环次数
Loop Count;每一个线程循环执行脚本的次数
☑️永远
输入对应数字,表示请求重复指定次数,但是不支持0
遵循原则:
第三部分延迟创建线程直到需要
Delay Thread creation until needed
线程需要被执行的时候,才会被创建
不选择这个选项,在计划开始的时候,所有需要的线程就都被创建好了
第三部分调度器
勾选☑️可用
启动延迟
JMeter点击启动按钮之后的延迟时间持续时间
一旦勾选了调度器,则要注意循环次数和持续时间对线程的影响问题
🤔: JMeter中,线程停止的条件??
🤔: 循环次数设置为50,同时把调度器选中,并把持续时间设置为1800秒;脚本停止的条件??
思考🤔: JMeter中,线程停止的条件??
循环次数
持续时间

思考🤔: 循环次数设置为50,同时把调度器选中,并把持续时间设置为1800秒;脚本停止的条件??
发循环50次结束
5次还没循环结束,但是持续时间到了20秒也可以进行结束
要不你就给我干8个小时的工作,要不然你就把今天的工作做完,不管你用多久
props.put(a,b);props
a
tokenb
vars.get("token")demo:跨线程传参.jmx
