第1章测试软件和被测产品/1
1.1JMeter概述/1
1.2JMeter的安装/2
1.2.1JMeter的单机环境安装/2
1.2.2JMeter的分布式环境安装/4
1.3进入JMeter的世界/5
1.3.1JMeter的目录结构及多语言版本/5
1.3.2JMeter的界面/7
1.3.3JMeter的九大元件组/11
1.4被测产品: 电子商务系统/13
1.4.1被测产品的介绍/13
1.4.2被测产品的安装/14
1.4.3被测产品的模块/15
1.4.4被测产品的安全机制/19
第2章HTTP/HTTPS/21
2.1HTTP的工作原理/21
2.2HTTP的请求包和响应包/22
2.2.1HTTP的请求包/22
2.2.2HTTP的响应包/24
2.3HTTP的无连接性和无状态性/24
2.3.1HTTP的无连接性/24
2.3.2HTTP的无状态性/25
第3章测试脚本初始化/27
3.1测试脚本的初始化生成/27
3.1.1利用工具录制JMeter测试脚本/28
3.1.2录制HTTPS下的脚本/37
3.1.3自己建立JMeter测试脚本/43
3.2录制结果的验证/45
3.3脚本初始化中使用的JMeter基本元件/46
3.3.1“测试计划”元件/46
3.3.2“HTTP Cookie管理器”元件/48
3.3.3“HTTP信息头管理器”元件/49
3.3.4“用户定义的变量”元件/50
3.3.5“HTTP请求默认值”元件/50
3.3.6“HTTP代理服务器”元件/53
3.3.7“线程组”元件/56
3.3.8“setUp线程组”和“tearDown线程组”元件/58
3.4脚本初始化中使用的取样器/59
3.4.1“HTTP请求”元件/59
3.4.2“调试取样器”元件/61
3.5脚本初始化中使用的逻辑控制器/63
3.5.1“录制控制器”元件/63
3.5.2“循环控制器”元件/63
3.6脚本初始化中使用的监听器/64
3.6.1“察看结果树”元件/64
3.6.2“简单数据写入器”元件/68
3.6.3“用表格察看结果”元件/68
目录
第4章建立登录接口测试脚本/69
4.1登录接口测试脚本的建立/69
4.1.1生成密码的SHA256散列值/69
4.1.2对CSRF token的处理/70
4.1.3建立测试断言/75
4.1.4用户名和密码的参数化/79
4.1.5建立“setUp线程组”元件与“tearDown线程组”元件/84
4.2J2EE版本商品列表的接口测试脚本/90
4.3登录接口测试脚本中使用的散列函数/94
4.4登录接口测试脚本中使用的断言/96
4.4.1“响应断言”元件/96
4.4.2“BeanShell断言”元件/98
4.4.3与XML相关的断言/100
4.5登录接口测试脚本中使用的提取器/102
4.5.1“正则表达式提取器”元件/102
4.5.2“边界提取器”元件/103
4.5.3“XPath提取器”元件/104
4.5.4XPath2 Extractor元件/105
4.6登录接口测试脚本中使用的配置元件/106
4.6.1CSV Data Set Config元件/106
4.6.2JDBC Connection Configuration元件/108
4.6.3“计数器”元件/110
4.7登录接口测试脚本中使用的取样器/111
第5章建立其他接口测试脚本/113
5.1与注册相关的测试脚本/113
5.1.1建立正常注册功能的接口测试脚本/113
5.1.2建立异常注册功能的接口测试脚本/117
5.1.3清理注册功能测试产生的垃圾数据/121
5.1.4处理与登录相关的元件/122
5.2与商品相关的接口测试脚本/122
5.2.1查询商品接口测试脚本/123
5.2.2Django版本查看商品详情接口测试脚本/124
5.2.3J2EE版本查看商品详情接口测试脚本/127
5.2.4通过后台添加商品测试脚本/132
5.3与购物车相关的接口测试脚本/136
5.3.1添加购物车的接口测试脚本/136
5.3.2查看购物车的接口测试脚本/138
5.4与订单相关的接口测试脚本/139
5.4.1与订单相关的接口测试脚本初始化/139
5.4.2创建与订单相关的接口测试脚本/141
5.5与注册、商品、购物车、订单相关的接口测试脚本中使用的逻辑控制器/145
5.5.1“仅一次控制器”元件/145
5.5.2“简单控制器”元件/145
5.5.3“如果(If)控制器”元件/146
5.6与注册、商品、购物车、订单相关的接口测试脚本中使用的函数助手/147
5.6.1随机函数/147
5.6.2CSVRead函数/148
5.7与注册、商品、购物车、订单相关的接口测试脚本中使用的提取器/149
5.7.1“CSS/JQuery提取器”元件/149
5.7.2与JSON相关的提取器/151
5.8与注册、商品、购物车、订单相关的接口测试脚本中使用的断言/161
5.8.1“JSON断言”元件/162
5.8.2JSON JMESPath Assertion元件/162
5.9与注册、商品、购物车、订单相关的接口测试脚本中使用的取样器/163第6章JMeter二次开发/166
6.1JMeter二次开发的3种方法/166
6.1.1开发BeanShell调用外部JAR文件实现SHA256散列处理/166
6.1.2开发函数助手实现SHA256散列处理/169
6.1.3利用Java请求实现SHA256散列处理/173
6.2JMeter二次开发中使用的元件/181
6.2.1前置/后置处理器/181
6.2.2取样器: “Java请求”元件/183
第7章建立安全测试脚本及运行/185
7.1暴力破解测试方法及预防措施/185
7.1.1暴力破解的原理和预防措施/185
7.1.2暴力破解的测试方法/186
7.2篡改找回密码的邮件地址和手机号码的测试方法/189
7.2.1篡改找回密码的邮件地址的测试方法/189
7.2.2篡改找回密码的手机号码的测试方法/190
7.3横向越权和纵向越权的测试方法/191
7.3.1横向越权的测试方法/191
7.3.2纵向越权的测试方法/196
7.4安全测试中使用的逻辑控制器/197
7.4.1“模块控制器”元件/198
7.4.2“ForEach控制器”元件/198
7.5安全测试中使用的“测试片段”元件/199
第8章建立及运行性能测试脚本/200
8.1单场景性能测试的搭建/200
8.2多场景性能测试的搭建/203
8.2.1搭建Django版本的多场景性能测试/203
8.2.2搭建Django版本与J2EE版本共同的多场景性能测试/205
8.3性能测试的执行/206
8.3.1并发负载测试的执行/206
8.3.2容量负载测试的执行/211
8.3.3疲劳性测试的执行/213
8.3.4强度测试的执行/213
8.4性能测试中使用的逻辑控制器: “吞吐量控制器”元件/214
8.5性能测试中使用的断言: “断言持续时间”元件/215
8.6性能测试中使用的配置元件: “HTTP缓存管理器”元件/216
8.7性能测试中使用的定时器/217
8.7.1“同步定时器”元件/217
8.7.2“固定定时器”元件/218
8.7.3“统一随机定时器”元件/218
8.7.4“高斯随机定时器”元件/218
8.7.5“泊松随机定时器”元件/219
8.8性能测试中使用的监控器/220
8.8.1“聚合报告”元件/220
8.8.2“汇总报告”元件/221
8.8.3“汇总图”元件/222
8.8.4“响应时间图”元件/223
8.8.5“图形结果”元件/225
第9章JMeter性能测试的运行与监控/226
9.1通过JMeter自带的工具运行JMeter性能测试/226
9.2通过Apache Ant运行JMeter性能测试/227
9.3通过Taurus运行JMeter/231
9.4性能测试监控/232
9.4.1压测端监控工具组: JMeter+InfluxDB+Grafana/232
9.4.2被测端监控工具组: Exporter+Prometheus+Grafana/241
9.4.3全链路监控工具: SkyWalking/247
9.5性能测试监控中使用的元件: 后端监听器/252
第10章JMeter的其他元件/255
10.1逻辑控制器/255
10.1.1“While控制器”元件/255
10.1.2“Switch控制器”元件/256
10.1.3“交替控制器”元件/257
10.1.4“Runtime控制器”元件/258
10.1.5“随机控制器”元件/258
10.1.6“随机顺序控制器”元件/258
10.2断言/259
10.2.1“大小断言”元件/259
10.2.2“HTML断言”元件/260
10.2.3“MD5Hex断言”元件/261
10.3定时器/261
10.3.1“常数吞吐量定时器”元件/262
10.3.2“准确的吞吐量定时器”元件/262
10.4取样器/263
10.4.1“FTP取样器”元件/263
10.4.2“OS进程取样器”元件/264
10.4.3“JUnit取样器”元件/267
10.5配置元件/270
10.5.1“FTP默认请求”元件/270
10.5.2“Java默认请求”元件/270
10.5.3简单配置元件/270
10.5.4“随机变量”元件/271
附录AJMeter元件中英文术语对照/273
软件测试从测试方向上分为功能测试和非功能测试。功能测试以外的测试均为非功能测试。非功能测试又可分为易用性测试、性能测试、安全性测试、可靠性测试、可维护性测试等。
软件测试从测试方法上可分为自动化测试和非自动化测试。自动化测试既可以自己编写测试脚本,也可以使用已有的测试工具;非自动化测试通过手工的方式进行测试。在非功能测试中,性能测试必须使用自动化测试工具,这是因为在性能测试中并发测试是非常重要的一个测试内容。如果不使用自动化测试工具,性能测试是很难实现的。性能测试可以自己构建,也可以使用现有的性能测试产品构建。
前些年,自动化测试最热门的工具是HP公司的LoadRunner。近几年来,在移动互联网对并发量要求越来越高的情况下,开源的性能测试工具JMeter越来越受到软件测试工程师的认可。另外,由于JMeter是基于协议的测试工具,所以也可以进行接口测试(一种不考虑GUI,仅考虑协议的功能测试技术)和安全测试。然而,JMeter毕竟是一个开源的测试工具,其易用性远远比不上LoadRunner。现在市面上关于JMeter的图书比较少,而仅有的几种图书也主要是对JMeter工具本身进行介绍。许多读者反映,阅读了这些书,仅仅知道了JMeter的各个元件的功能,还是不知道如何将JMeter结合到实际工作中。为此,我编写了本书,基于案例手把手地帮助读者掌握JMeter的使用方法。
本书内容可以分为5部分。
第1部分为本书的第1、2章,是入门内容。第1章介绍JMeter基础知识和安装方法,并介绍被测产品——电子商务系统,这个被测产品将贯穿本书的始终;第2章介绍在JMeter中用得最多的协议——HTTP/HTTPS。
第2部分为本书的第3~6章,主要介绍测试脚本的建立。第3章介绍测试脚本初始化;第4章介绍如何建立登录接口测试脚本;第5章介绍如何建立其他接口测试脚本,包括与注册、商品、购物车和订单相关的接口测试脚本;第6章介绍JMeter的二次开发,即针对复杂业务建立测试脚本的方法。
第3部分为本书的第7章,介绍如何利用JMeter进行安全测试。
第4部分为本书的第8、9章,介绍性能测试。第8章介绍如何在接口测试的基础上进行性能测试;第9章介绍如何运行JMeter和进行性能测试监控。
第5部分为本书的第10章,简要介绍在前面各章中没有提及的比较重要的JMeter元件。
对于工具的介绍,大部分图书采取的方式是先介绍工具涉及的理论知识,然后介绍工具本身。编者认为这种方式不便于初学者快速掌握工具的使用。反过来,先对工具进行一系列操作,对工具有了一定的感性认识,再学习理论,才会对工具的使用有更深入的了解。建议读者在学习完理论知识以后,再回过头来想一想开始时这样操作的原因,这样的学习方法对于掌握工具更有好处。基于这样的思路,本书第2~8章的内容都是按照先操作再介绍产品的顺序组织的。
另外,本书的主要内容都配有微视频课程以及相关的代码和JMeter脚本。
在下面的二维码中,有本书配套微视频课程、相关代码和JMeter脚本的观看方式,以及作者的公众号和本书的讨论群信息。