《JMeter核心技术、性能测试与性能分析》是一本由清华大学出版社出版的图书,JMeter是一款基于Java的压力测试工具,可用于对服务器、网络或对象模拟巨大的负载,在不同压力类别下测试它们的强度和分析整体性能。本书详解JMeter性能测试和性能分析的方法,配套PPT课件、教学大纲与作者微信群答疑服务。
本书共分11章,内容包括认识JMeter、认识性能测试、初识JMeter元件、JMeter主要元件详细介绍、常见JMeter性能测试脚本编写案例、BeanShell、JMeter中如何编写自定义的取样器、性能分析、电商网站的秒杀系统性能测试与性能分析案例、JMeter性能测试的最佳实践、大模型辅助性能测试。最后还给出一个JMeter属性配置项的附录供读者参考。
本书既适合JMeter性能测试初学者、性能测试与分析人员、性能测试解决方案设计师、软件性能测试经理,也适合高等院校或高职高专院校学习软件测试课程的学生。
本书目的
本书针对性能测试中遇到的常见问题,帮助读者掌握性能测试的基础知识、JMeter性能测试工具的使用、JMeter性能测试的执行方法与案例,以及遇到性能瓶颈时分析和解决问题的技巧。
本书作者
张永清、张永松
作者简介
张永清,从事功能测试、自动化测试、性能测试、Java软件开发、大数据开发、架构师等工作近二十年,在自动化测试设计、性能测试设计、性能诊断、性能调优、分布式架构设计等方面积累了多年经验。参与过的系统涉及公安、互联网、移动互联网、大数据、人工智能等领域。先后任职于江苏飞搏软件、苏宁大数据研发中心、苏宁研究院、苏宁人工智能研发中心、紫金普惠研发中心、福特汽车工程研究有限公司,历任测试经理、技术经理、部门经理、高级架构师等职位。重点关注大数据、图像处理、高性能分布式架构设计等领域。著有图书《数据资产管理核心技术与应用》《软件性能测试、分析与调优实践之路》《软件性能测试、分析与调优实践之路 (第2版)》《Robot Framework自动化测试框架核心指南》。
本书内容
第1、2章,主要介绍JMeter的基础知识以及性能测试的基础概念,帮助读者建立起对性能测试的知识框架,并快速入门性能测试领域。
第3、4章,主要介绍如何使用JMeter提供的各种强大的测试功能,帮助读者掌握JMeter的使用方法。
第5~7章,主要介绍如何使用JMeter来完成性能测试脚本的编写。这几章提供了多个性能测试脚本编写案例,帮助读者将第3、4章讲解的JMeter测试功能运用到脚本编写实践中去。
第8章,主要介绍软件性能分析与调优的理论知识以及调优思想等。本章还会对常见的性能问题做了分析和总结。
第9章,主要剖析了一个完整的性能测试与性能分析调优的案例。通过该案例,帮助读者把前面章节中学习到的知识进行一个完整的实践。读者通过这个案例的实践,在拿到一个性能测试需求时,可以自己有条有理地去完成性能测试的整个过程。
第10章,主要是JMeter性能测试的实践要点。本章包括确定编写脚本的场景、设计用户思考时间、脚本编写主意事项、执行性能测试时的注意事项,以及性能测试时的监控指标。
第11章,简单讲解一下大模型辅助性能测试的应用场景,帮助读者提高性能测试工作的效率。
附录,主要讲解JMeter属性配置项,方便读者在做性能测试时随手查阅。
本书学习方法
(1)本书精心设计的实践示例和案例,可以帮助读者深入掌握JMeter性能测试的方法和技巧。因此,建议读者在学习的时候一定要动手实践本书的示例和案例。
(2)本书每章的最后一节给出了读者必须掌握的重点内容,读者可以根据提示快速回顾每章的关键知识点,掌握本章内容之后再进行下一章的学习。
(3)本书讲解的性能测试基础知识,是完成性能测试的指导思想,建议读者熟记。
(4)多做JMeter操作练习,碰到问题多加思考,将理论知识运用到性能测试实践之中,并通过实践加深对性能测试与性能分析方法的理解。
本书读者
本书既适合JMeter性能测试初学者、性能测试与分析人员、性能测试解决方案设计师、软件性能测试经理,也适合高等院校或高职高专院校软件性能测试课程的学生。
本书目录
第1章 认识JMeter······················································································· 1
1.1 JMeter基本介绍······································································································· 1
1.2 性能测试的发展······································································································· 3
1.3 性能测试工具的发展································································································· 4
1.4 选择JMeter的原因··································································································· 5
1.5 JMeter的安装部署···································································································· 7
1.6 JMeter的元件·········································································································· 9
1.7 JMeter的运行模式·································································································· 13
1.7.1 GUI模式····································································································· 13
1.7.2 命令行模式·································································································· 13
1.7.3 服务器模式·································································································· 15
1.8 本章总结·············································································································· 18
第2章 认识性能测试··················································································· 19
2.1 性能的基本概念····································································································· 19
2.1.1 什么是性能·································································································· 19
2.1.2 性能测试的意义···························································································· 21
2.1.3 常见的性能指标···························································································· 21
2.2 性能测试的基本概念······························································································· 24
2.2.1 性能测试的种类··························································································· 24
2.2.2 性能测试的场景···························································································· 25
2.3 性能测试的流程····································································································· 25
2.3.1 性能需求分析······························································································· 26
2.3.2 指定性能测试计划························································································· 26
2.3.3 编写性能测试方案························································································· 27
2.3.4 编写性能测试案例························································································· 30
2.3.5 搭建性能测试环境························································································· 30
2.3.6 构造性能测试数据························································································· 30
2.3.7 编写性能测试脚本························································································· 31
2.3.8 执行性能测试······························································································· 31
2.3.9 编写性能测试报告························································································· 31
2.4 本章总结·············································································································· 32
第3章 初识JMeter元件··············································································· 33
3.1 测试计划·············································································································· 34
3.2 线程组················································································································· 36
3.3 配置元件·············································································································· 38
3.3.1 常用配置元件······························································································· 38
3.3.2 JDBC Connection Configuration配置项详情·························································· 40
3.3.3 TCP取样器配置详情······················································································ 42
3.3.4 HTTP授权管理器配置详情·············································································· 43
3.4 前置处理器··········································································································· 44
3.5 定时器················································································································· 47
3.6 取样器················································································································· 49
3.7 后置处理器··········································································································· 67
3.8 断言···················································································································· 72
3.9 监听器················································································································· 75
3.10 开始一个性能测试脚本的编写案例············································································ 80
3.11 本章总结············································································································· 83
第4章 JMeter主要元件详解·········································································· 85
4.1 配置元件·············································································································· 85
4.1.1 CSV数据文件设置························································································· 85
4.1.2 HTTP Cookie管理器······················································································· 87
4.1.3 HTTP 信息头管理器······················································································· 88
4.2 函数助手·············································································································· 89
4.3 逻辑控制器··········································································································· 94
4.4 取样器················································································································ 101
4.4.1 WebSocket取样器························································································ 102
4.4.2 Dubbo取样器······························································································ 105
4.5 本章总结············································································································· 107
第5章 常见JMeter性能测试脚本的编写案例··················································· 108
5.1 用户需先登录,然后再请求别的接口········································································· 108
5.2 前一个请求返回的结果作为后一个请求的入参····························································· 111
5.3 使用JMeter对MySQL数据进行性能测试··································································· 117
5.3.1 利用JMeter为MySQL数据库构造测试数据······················································· 117
5.3.2 利用JMeter对MySQL数据库查询进行性能测试················································· 123
5.4 本章总结············································································································· 126
第6章 BeanShell······················································································ 127
6.1 BeanShell的安装··································································································· 128
6.2 BeanShell的基础语法····························································································· 130
6.2.1 变量和数据类型·························································································· 130
6.2.2 运算符······································································································ 132
6.2.3 控制流语句································································································ 133
6.2.4 函数和方法································································································ 138
6.2.5 异常处理··································································································· 139
6.2.6 文件操作··································································································· 140
6.3 BeanShell中如何使用JMeter内置变量······································································· 145
6.3.1 ctx············································································································ 146
6.3.2 vars·········································································································· 147
6.3.3 props········································································································· 148
6.3.4 prev·········································································································· 150
6.3.5 sampler······································································································ 155
6.3.6 log············································································································ 156
6.3.7 data·········································································································· 156
6.3.8 sampleEvent································································································ 157
6.3.9 sampleResult······························································································· 158
6.3.10 ResponseMessage和ResponseCode·································································· 158
6.3.11 ResponseData和ResponseHeaders··································································· 159
6.3.12 RequestHeaders·························································································· 160
6.3.13 Failure和FailureMessage·············································································· 161
6.3.14 Parameters和FileName················································································ 162
6.3.15 SampleLabel······························································································ 163
6.4 JMeter中使用BeanShell的案例················································································ 163
6.5 本章总结············································································································· 171
第7章 JMeter中如何编写自定义的取样器······················································· 172
7.1 JavaSamplerClient取样器抽象接口介绍······································································ 173
7.2 自定义的取样器的编写案例····················································································· 176
7.3 本章总结············································································································· 185
第8章 性能分析与调优··············································································· 186
8.1 性能分析与调优模型······························································································ 186
8.2 性能分析与调优思想······························································································ 188
8.2.1 分层分析··································································································· 188
8.2.2 科学论证··································································································· 189
8.2.3 问题追溯与归纳总结···················································································· 190
8.3 性能调优技术······································································································· 190
8.3.1 缓存调优··································································································· 190
8.3.2 同步转异步推送·························································································· 192
8.3.3 削峰填谷··································································································· 193
8.3.4 拆分········································································································· 194
8.3.5 任务分解与并行计算···················································································· 195
8.3.6 索引与分库分表·························································································· 196
8.3.7 层层过滤··································································································· 198
8.4 常见性能问题分析总结··························································································· 199
8.5 本章总结············································································································· 203
第9章 电商网站的秒杀系统性能测试与性能分析案例········································· 205
9.1 性能需求分析······································································································· 205
9.2 制定性能测试计划································································································· 209
9.3 编写性能测试方案································································································· 211
9.4 编写性能测试案例································································································· 214
9.5 搭建性能测试环境································································································· 216
9.6 构造性能测试数据································································································· 219
9.7 编写性能测试脚本································································································· 223
9.7.1 性能测试涉及的3个接口··············································································· 223
9.7.2 单场景-商品查询性能测试脚本的编写······························································ 224
9.8 执行性能测试······································································································· 235
9.8.1 单场景-商品查询性能压测·············································································· 235
9.8.2 混合场景-商品查询-订单提交性能压测····························································· 246
9.9 完成性能测试报告································································································· 256
9.10 本章总结··········································································································· 260
第10章 JMeter性能测试的最佳实践······························································ 261
10.1 确定要编写脚本的关键业务场景············································································· 261
10.2 如何设计真实的用户思考时间················································································ 262
10.3 JMeter编写性能测试脚本的注意事项······································································· 265
10.4 JMeter执行性能测试时的注意事项·········································································· 266
10.4.1 JMeter运行内存设置··················································································· 266
10.4.2 操作系统参数的设置··················································································· 268
10.5 性能测试时,通常需要做哪些监控·········································································· 272
10.6 本章总结··········································································································· 273
第11章 大模型辅助性能测试········································································ 274
11.1 人工智能大模型的发展························································································· 274
11.2 大模型辅助性能测试···························································································· 276
11.2.1 大模型辅助性能测试脚本的编写···································································· 276
11.2.2 大模型辅助性能测试数据的构造···································································· 278
11.2.3 大模型辅助性能瓶颈问题的分析···································································· 280
11.3 本章总结··········································································································· 282
附录 JMeter属性配置················································································· 283