共计 5147 个字符,预计需要花费 13 分钟才能阅读完成。
1、常用测试工具对比
1、loadrunner 性能稳定,压测结果及细粒度大,可以自定义脚本进行压测,但是太过于重大,功能比较繁多 2、apache ab(单接口压测最方便) 模拟多线程并发请求,ab 命令对发出负载的计算机要求很低,既不会占用很多 CPU,也不会占用太多的内存,但却会给目标服务器造成巨大的负载, 简单 DDOS 攻击等 3、webbench webbench 首先 fork 出多个子进程,每个子进程都循环做 web 访问测试。子进程把访问的结果通过 pipe 告诉父进程,父进程做最终的统计结果。
2、Jmeter 目录文件讲解
bin: 核心可执行文件,包含配置 jmeter.bat: windows 启动文件:jmeter: mac 或者 linux 启动文件:jmeter-server:mac 或者 Liunx 分布式压测使用的启动文件 jmeter-server.bat:mac 或者 Liunx 分布式压测使用的启动文件 jmeter.properties: 核心配置文件 extras:插件拓展的包 lib: 核心的依赖包 ext: 核心包 junit: 单元测试包
3、Jmeter 基础功能组件介绍线程组和 Sampler
1、添加 ->threads-> 线程组(控制总体并发)线程数:虚拟用户数。一个虚拟用户占用一个进程或线程 准备时长(Ramp-Up Period(in seconds)):全部线程启动的时长,比如 100 个线程,20 秒,则表示 20 秒内 100 个线程都要启动完成,每秒启动 5 个线程 循环次数:每个线程发送的次数,假如值为 5,100 个线程,则会发送 500 次请求,可以勾选永远循环
2、线程组 -> 添加 -> Sampler(采样器) -> Http(一个线程组下面可以增加几个 Sampler)名称:采样器名称 注释:对这个采样器的描述
web 服务器:默认协议是 http 默认端口是 80 服务器名称或 IP:请求的目标服务器名称或 IP 地址
路径:服务器 URL
Use multipart/from-data for HTTP POST:当发送 POST 请求时,使用 Use multipart/from-data 方法发送,默认不选中。
3、查看测试结果 线程组 -> 添加 -> 监听器 -> 察看结果树
4、Jmeter 的断言基本使用
增加断言: 线程组 -> 添加 -> 断言 -> 响应断言 apply to(应用范围):
Main sample only: 仅当前父取样器 进行断言,一般一个请求,如果发一个请求会触发多个,则就有 sub sample(比较少用)
要测试的响应字段:
响应文本:即响应的数据,比如 json 等文本 响应代码:http 的响应状态码,比如 200,302,404 这些 响应信息:http 响应代码对应的响应信息,例如:OK, Found Response Header: 响应头
模式匹配规则:
包括:是响应文本的一个子集,是包含关系,可以用正则表达式 匹配:使用正则表达式匹配 equals:完全与响应文本相同,不能使用正则表达式 substring:也是包含关系,但是不能使用正则表达式
2、断言结果监听器: 线程组 -> 添加 -> 监听器 -> 断言结果
里面的内容是 sampler 采样器的名称 断言失败,查看结果树任务结果颜色标红 通过结果数里面双击不通过的记录,可以看到错误信息 )
3、每个 sample 下面可以加单独的结果树,然后同时加多个断言,最外层可以加个结果树进行汇总
5、结果聚合报告分析
新增聚合报告:线程组 -> 添加 -> 监听器 -> 聚合报告(Aggregate Report)
lable: sampler 的名称 Samples: 一共发出去多少请求, 例如 10 个用户,循环 10 次,则是 100 Average: 平均响应时间 Median: 中位数,也就是 50% 用户的响应时间 90% Line : 90% 用户的响应不会超过该时间(90% of the samples took no more than this time. The remaining samples at least as long as this)95% Line : 95% 用户的响应不会超过该时间 99% Line : 99% 用户的响应不会超过该时间 min : 最小响应时间 max : 最大响应时间 Error%:错误的请求的数量 / 请求的总数 Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second) 可类比为 qps KB/Sec: 每秒接收数据量
6、Jmeter 用户自定义变量
1、线程组 ->add -> Config Element(配置原件)-> User Definde Variable(用户定义的变量)2、引用方式 ${XXX},在接口中变量中使用
7、CSV 数据文件使用
1、线程组 ->add -> Config Element(配置原件)-> CSV data set config (CSV 数据文件设置) 2、如果是多个参数需要同时引用,则在 CSV 数据文件里面设置加多个字段 Variabled names(comma-delitited): csv_name,csv_pwd
8、数据库压测操作
配置讲解:
1、Thread Group -> add -> sampler -> jdbc request 添加数据库请求 2、jar 包添加 mysql-connector-java-5.1.30.jar 添加连接数据库的 jar 包 3、JDBC connection Configuration 配置
JDBC request->add -> config element -> JDBC connection configuration
核心配置
Max Number of connections : 最大连接数
MAX wait : 最大等待时间 Auto Commit: 是否自动提交事务
DataBase URL : 数据库连接地址 jdbc:mysql://127.0.0.1:3306/blog
JDBC Driver Class : 数据库驱动,选择对应的 mysql
username: 数据库用户名
password: 数据库密码
数据库语句:
1、Debug Sampler 使用(结果树中查看)Thread Group -> add -> sampler -> debug sampler 2、参数讲解:(sql 结尾不要加 ”;”) 1、variable name of pool declared in JDBC connection configuration(和配置文件同名)2、Query Type 查询类型 3、parameter values 参数值 4、parameter types 参数类型 5、variable names sql 执行结果变量名 6、result variable names 所有结果当做一个对象存储 7、query timeouts 查询超时时间 8、handle results 处理结果集
9、Jmeter 非 GUI 界面参数
-h 帮助 -n 非 GUI 模式 -t 指定要运行的 JMeter 测试脚本文件 -l 记录结果的文件 每次运行之前,(要确保之前没有运行过, 即 xxx.jtl 不存在,不然报错) -r Jmter.properties 文件中指定的所有远程服务器 -e 在脚本运行结束后生成 html 报告 -o 用于存放 html 报告的目录(目录要为空,不然报错)
官方配置文件地址 http://jmeter.apache.org/usermanual/get-started.html
10、Jmeter 压测接口的性能优化
1、使用非 GUI 模式:jmeter -n -t test.jmx -l result.jtl 2、少使用 Listener,如果使用 - l 参数,它们都可以被删除或禁用。3、在加载测试期间不要使用“查看结果树”或“查看结果”表监听器,只能在脚本阶段使用它们来调试脚本。4、包含控制器在这里没有帮助,因为它将文件中的所有测试元素添加到测试计划中。5、不要使用功能模式, 使用 CSV 输出而不是 XML 6、只保存你需要的数据, 尽可能少地使用断言 7、如果测试需要大量数据,可以提前准备好测试数据放到数据文件中,以 CSV Read 方式读取。8、用内网压测,减少其他带宽影响压测结果 9、如果压测大流量,尽量用多几个节点以非 GUI 模式向服务器施压
11、Jmeter 图形化 HTML 压测报告 dashboard
1、Test and Report informations
Source file:jtl 文件名 Start Time:压测开始时间 End Time:压测结束时间 Filter for display:过滤器 Lable:sampler 采样器名称
2、APDEX(Application performance Index)
apdex: 应用程序性能指标, 范围在 0~1 之间,1 表示达到所有用户均满意 T(Toleration threshold):可接受阀值 F(Frustration threshold):失败阀值
3、Requests Summary 请求总结
OK: 成功率 KO: 失败率
4、Statistics 统计数据
lable:sampler 采样器名称 samples: 请求总数,并发数 * 循环次数 KO: 失败次数 Error%: 失败率 Average: 平均响应时间 Min: 最小响应时间 Max: 最大响应时间 90th pct: 90% 的用户响应时间不会超过这个值(关注这个就可以了)2ms,3ms,4,5,2,6,8,3,9 95th pct: 95% 的用户响应时间不会超过这个值 99th pct: 99% 的用户响应时间不会超过这个值 (存在极端值) throughtput:Request per Second 吞吐量 qps received: 每秒从服务器接收的数据量 send:每秒发送的数据量
12、Jmeter 图形化 HTML 压测报告 Charts 报表讲解
1、Over Time(随着时间的变化)
Response Times Over Time:响应时间变化趋势 Response Time Percentiles Over Time (successful responses):最大,最小,平均,用户响应时间分布 Active Threads Over Time:并发用户数趋势 Bytes Throughput Over Time:每秒接收和请求字节数变化,蓝色表示发送,黄色表示接受 Latencies Over Time:平均响应延时趋势 Connect Time Over Time:连接耗时趋势
2、Throughput
Hits Per Second (excluding embedded resources): 每秒点击次数 Codes Per Second (excluding embedded resources):每秒状态码数量 Transactions Per Second:即 TPS,每秒事务数 Response Time Vs Request:响应时间和请求数对比 Latency Vs Request:延迟时间和请求数对比
3、Response Times
Response Time Percentiles:响应时间百分比 Response Time Overview:响应时间概述 Time Vs Threads:活跃线程数和响应时间 Response Time Distribution:响应时间分布图
13、Jmeter 压测注意事项
the firewalls on the systems are turned off or correct ports are opened. 系统上的防火墙被关闭或正确的端口被打开。all the clients are on the same subnet. 所有的客户端都在同一个子网上。
the server is in the same subnet, if 192.x.x.x or 10.x.x.x IP addresses are used. If the server doesn’t use 192.xx or 10.xx IP address, there shouldn’t be any problems. 如果使用 192.x.x.x 或 10.x.x.x IP 地址,则服务器位于同一子网中。如果服务器不使用 192.xx 或 10.xx IP 地址,则不应该有任何问题。
Make sure JMeter can access the server. 确保 JMeter 可以访问服务器。
Make sure you use the same version of JMeter and Java on all the systems. Mixing versions will not work correctly. 确保在所有系统上使用相同版本的 JMeter 和 Java。混合版本将无法正常工作。
You have setup SSL for RMI or disabled it. 您已为 RMI 设置 SSL 或将其禁用。
官网地址 http://jmeter.apache.org/usermanual/jmeter_distributed_testing_step_by_step.html 压测注意事项:一定要用内网 IP,不用用公网 IP