基础篇 1
第1章 性能方向职业发展 1
1.1为什么选择软件测试 2
1.2软件测试痛处 2
1.3软件测试发展路线 3
1.4不仅仅是性能测试 4
1.5从招聘要求看岗位价值 5
1.6性能测试技能树 8
1.6.1测试工具 8
1.6.2测试基础 9
1.6.3代码 10
1.6.4服务器性能诊断知识 10
1.6.5性能调优技能 12
1.6.6自动化/持续集成 13
1.6.7云计算及虚拟化 13
1.7本章小结 13
第2章 性能测试初体验 14
2.1性能测试的价值 15
2.2性能测试流程 17
2.3性能测试成功与失败要素 18
2.4不同角色看性能 20
2.5性能测试工具选择 21
2.6性能测试相关术语 22
2.7性能测试通过标准 23
2.8性能测试趋势 24
2.9本章小节 24
工具篇 25
第3章 JMeter体系结构 25
3.1 JMeter简介 26
3.2 JMeter体系结构 26
3.2.1 X1【取样器】 27
3.2.2 X1【断言】 28
3.2.3 X1【监听器】 28
3.2.4 X2【前置处理器】 29
3.2.5 X2【配置元件】 29
3.2.6 X2【后置处理器】 30
3.2.7 X3【控制器】 31
3.2.8 X4【定时器】 31
3.2.9 X5【线程组】 31
3.2.10 Test Fragment 32
3.2.11工作台 32
3.3 JMeter运行原理 33
3.4 JMeter测试计划要素 34
3.5 JMeter环境介绍 35
3.6 JMeter与LoadRunner异同 37
3.7本章小结 38
第4章 JMeter脚本开发 39
4.1 JMeter工作区介绍 40
4.2 JMeter Http协议录制 41
4.2.1 Badboy进行录制 41
4.2.2 JMeter配置代理进行录制 49
4.3 JMeter脚本调试 52
4.4 JMeter关联 55
4.4.1后置处理器 56
4.4.2 Regular ExpressionExtractor 56
4.5 JMeter参数化 60
4.5.1配置元件 60
4.5.2 CSV Data Set Config 60
4.5.3函数助手 62
4.5.4访问地址参数化 64
4.5.5 HTTP请求默认值 64
4.6 JMeter检查点 65
4.6.1断言 65
4.6.2 Response Assertion 66
4.7 JMeter事务 68
4.7.1逻辑控制器 68
4.7.2事务控制器 68
4.8 JMeter集合点 69
4.8.1定时器 69
4.8.2同步定时器 69
4.9 JMeter元件运行顺序 70
4.10本章小结 72
第5章 JMeter负载与监听 74
5.1场景设计 75
5.2场景设置 75
5.3场景运行 77
5.3.1 GUI运行 77
5.3.2非GUI运行测试 79
5.4性能参数配置 82
5.5测试监听 83
5.5.1 JMeter监听器 83
5.5.2开源监听插件 85
5.6本章小结 85
第6章 JMeter元件详解 86
6.1逻辑控制器 87
6.1.1 ForEach Controller(循环控制器) 87
6.1.2 Simple Controller 89
6.1.3 Include Controller 90
6.1.4 Runtime Controller 90
6.1.5 Switch Controller 91
6.1.6 While Controller 91
6.1.7 Interleave Controller 91
6.1.8 Once Only Controller 92
6.1.9 Throughput Controller 93
6.1.10 If Controller 94
6.1.11 Module Controller 94
6.1.12 Random Controller 95
6.1.13 Random Order Controller 95
6.1.14 Loop Controller 96
6.1.15 Recording Controller 96
6.1.16 Transaction Controller 97
6.2配置元件 98
6.2.1 FTP请求默认值 98
6.2.2 HTTP Authorization Manager 99
6.2.3 HTTP Request Defaults 99
6.2.4 Java Request Defaults 99
6.2.5 JDBC Connection Configuration 100
6.2.6 Random Variable 100
6.2.7 Counter 100
6.2.8 Login Config Element 101
6.3定时器 101
6.3.1 Gaussian Random Timer 102
6.3.2 Constant Timer 102
6.3.3 Synchronizing Timer 102
6.3.4 Constant Throughput Timer 102
6.3.5 Uniform Random Timer 103
6.3.6 Poisson Random Timer 103
6.3.7 BeanShell Timer 103
6.3.8 BSF Timer 106
6.3.9 JSR223 Timer 106
6.4前置处理器 106
6.4.1 BeanShell PreProcessor 106
6.4.2 JSR223 PreProcessor 107
6.4.3 BSF PreProcessor 108
6.4.4 Regular User Parameter 108
6.4.5用户参数 110
6.4.6 JDBC PreProcessor 110
6.4.7 HTML链接解析器 111
6.4.8 HTTP URL重写修饰符 114
6.5后置处理器 115
6.5.1 Debug PostProcessor 115
6.5.2 JDBC PostProcessor 116
6.5.3 Result Status Action Handler 116
6.5.4 XPath Extractor 117
6.6断言 118
6.6.1 BeanShell Assertion 118
6.6.2 Compare Assertion 120
6.6.3 HTML Assertion 120
6.6.4 Size Assertion 121
6.6.5 XML Schema Assertion 122
6.6.6 XML Assertion 123
6.6.7 XPath Assertion 123
6.6.8 Duration Assertion 124
6.6.9其他断言元件 124
6.7监听器 124
6.7.1监听器默认配置 124
6.7.2 Aggregate Graph 127
6.7.3 BeanShell Listener(BeanShell监听器) 130
6.7.4 Distribution Graph(分布图) 130
6.7.5 Response Time Graph(响应时间图形监听器) 131
6.7.6 Simple Data Writer 131
6.7.7 Spline Visualizer(样条线显示取样器) 132
6.7.8 Summary Report(表格形式显示) 133
6.7.9 Save Response to a file(存储服务器响应) 133
6.7.10 View Results Tree(察看结果树) 134
6.7.11 Assertion Results(断言结果) 135
6.7.12 Generate Summa Results(窗口显示结果) 136
6.7.13 View Results in Table(表格形式显示) 136
6.7.14 Monitor Results 137
6.7.15Aggregate Report 138
6.7.16 Mailer Visualizer 138
6.8函数助手 139
6.8.1 _BeanShell脚本语言 139
6.8.2 _char 140
6.8.3 _counter 141
6.8.4 _CSVRead 142
6.8.5 _escapeHtml 143
6.8.6 _escapeOroRegexChars 143
6.8.7 _eval 144
6.8.8 _evalVar 144
6.8.9 _FileToString 145
6.8.10 _intSum 146
6.8.11 _longSum 146
6.8.12 _javaScript 146
6.8.13 _jexl 146
6.8.14 _log 147
6.8.15 _logn 148
6.8.16 _machineIP 148
6.8.17 _machineName 149
6.8.18 _P 149
6.8.19 _property 149
6.8.20 _Random 150
6.8.21 _RandomString 150
6.8.22 _regexFunction 151
6.8.23 _samplerName 151
6.8.24 _setProperty 152
6.8.25 _split 152
6.8.26 _StringFromFile 153
6.8.27 _TestPlanName 154
6.8.28 _threadNum 154
6.8.29 _time 154
6.8.30 _unescape 155
6.8.31 _unescapeHtml 155
6.8.32 _urldecode 155
6.8.33 _urlencode 155
6.8.34 _UUID 155
6.8.35 _V 155
6.8.36 _XPath 156
6.9本章小结 156
第7章 JMeter常用脚本开发 158
7.1 BeanShell Sampler 159
7.2 Debug Sampler 162
7.3 FTP请求 163
7.4 Java请求 164
7.5 JDBC请求 171
7.5.1 JDBC连接池设置 172
7.5.2添加JDBC Request 174
7.6 JUnit Request 179
7.6.1 JUnit简介 179
7.6.2 JUnit参数 180
7.6.3 JMeter JUnit Request 181
7.7 SOAP/XML-RPC Request 182
7.8本章小结 184
第8章 JMeter开源测试组件 185
8.1线程组 187
8.1.1 Ultimate Thread Group 187
8.1.2 Stepping Thread Group 188
8.2逻辑控制器 189
8.3配置元件 190
8.4定时器 190
8.5监听器 191
8.5.1 Transactions per Second 191
8.5.2 Response Times Over Time 192
8.5.3 Response Times vs Threads 192
8.5.4 Graphs Generator 192
8.6服务器监控 193
8.7本章小结 195
实战篇 196
第9章 性能监控诊断 196
9.1操作系统性能分析介绍 197
9.2系统性能分析思路 198
9.2.1系统性能分析因素-CPU 199
9.2.2系统性能分析因素-内存 199
9.2.3系统性能分析因素-网络 200
9.2.4系统性能分析因-I/O 201
9.2.5系统性能分析因素-总结 201
9.3瓶颈阈值分析思维导图与手册 202
9.3.1 CPU定位分析 202
9.3.2内存定位分析 203
9.3.3网络定位分析 203
9.3.4 IO定位分析 204
9.4 Linux系统性能分析思路和实践 204
9.4.1系统负载监控分析实践 205
9.4.2系统监控分析实践 206
9.5 Windows系统性能分析思路和实践 217
9.5.1性能监视器综述 217
9.5.2性能监视器工具介绍 218
9.5.3系统监控分析实践 218
9.5.4资源监视器介绍和实践 226
9.6 Tomcat监控之Probe 235
9.7 MySQL监控之MONyog 238
9.8 JVM监控 241
9.8.1 jps 241
9.8.2 jstat 243
9.8.3 jmap 245
9.8.4 JVisualVM 247
9.9本章小结 250
第10章 性能分析调优 251
10.1性能分析方法 253
10.2单机性能分析与调优 254
10.2.1性能分析流程 254
10.2.2系统性能关注点 256
10.2.3程序优化 261
10.2.4配置优化 263
10.2.5数据库连接池优化 263
10.2.6线程优化 265
10.2.7 DB优化 268
10.3业务流程优化 269
10.4结构优化 269
10.4.1单机结构 269
10.4.2集群结构 270
10.4.3分布式结构 271
10.5本章小结 277
第11章 综合实践之诊断分析与调优 278
11.1需求分析 280
11.1.1需求采集 282
11.1.2需求分析 285
11.1.3并发数计算 289
11.2测试模型 291
11.3测试计划 291
11.4环境搭建 292
11.5脚本开发 295
11.5.1浏览帖子 295
11.5.2回复帖子 298
11.5.3发帖 301
11.6数据准备 301
11.6.1主数据准备 302
11.6.2数据制作方法 303
11.7场景设计 307
11.7.1场景设计 307
11.7.2场景实现 309
11.8测试监控 312
11.9测试执行 313
11.9.1基准测试 313
11.9.2配置测试 315
11.9.3负载测试 319
11.9.4稳定性测试 327
11.10结果分析 328
11.11测试报告 329
11.12本章小结 330
提升篇 331
第12章 互联网测试必备知识——HTTP协议 331
12.1 HTTP协议简介 332
12.2 HTTP工作原理 332
12.3 HTTP请求 333
12.4 HTTP应答 335
12.5 HTTP捕获 336
12.6 HttpWatch 337
12.6.1 HttpWatch录制 337
12.6.2 HttppWatch数据分析 338
12.7本章小结 341
第13章 端到端性能监控平台 342
13.1为什么构建基于云的端到端性能监控平台 343
13.2端到端监控的意义 343
13.3前端监控常见策略 343
13.4基于httpWatch的自动捕获 344
13.5基于firebug的自动捕获 345
13.5.1自动导出瀑布图 345
13.5.2 HARViewer部署 346
13.5.3基于Fiddler的自动捕获 348
13.5.4基于YSlow的前端评估体系 348
13.5.5基于PageSpeed的前端评估体系 350
13.5.6基于dynaTrace Ajax的前端评估体系 351
13.6构建基于Showslow的监控体系 356
13.6.1 Showslow介绍 356
13.6.2 Showslow环境搭建 356
13.6.3 ShowSlow配置 357
13.6.4 YSlow配置 357
13.6.5 WebDriver驱动的定时监控体系 359
13.7本章小结 361
第14章 性能测试自动化——Jenkins+Ant+JMeter 362
14.1为什么要做性能测试自动化 363
14.2如何做性能测试自动化 365
14.3 Ant+JMeter集成 365
14.3.1 Ant下载 366
14.3.2 Ant安装 366
14.3.3 JMeter中配置XML文件来定义测试活动 367
14.3.4运行测试计划 369
14.4 Jenkins+Ant集成 371
14.4.1 Jenkins安装 372
14.4.2建立Slave节点 374
14.4.3 JMeter任务配置 377
14.5如何运行复杂场景 385
14.6报告自动化 385
14.6.1配置TPS、响应时间等图表 385
14.6.2报告合成 386
14.7 JMeter脚本拷贝自动化 391
14.8 JMeter Agent自动化 395
14.9本章小结 398
第15章 JMeter常见问题 399
15.1 JMeter无法开启 400
15.2 JMeter异常关闭 400
15.3 JMeter无法产生负载 401
15.4 JMeter日志输出控制 401
15.5记录测试结果影响Jmeter效率 402
15.6 JMeter可以测试接口吗 402
15.7 JMeter可以测试Dubbo接口吗 403
15.8 JMeter可以测试RPC接口吗 404
15.9 JMeter函数助手中函数不够用怎么办 404
15.10 JMeter支持子事务的定义吗 407
15.11 JMeter非GUI方式运行时如何传递运行参数 408
15.12运行场景时察看结果树为什么要关闭 409
15.13多个测试计划如何运行 409
15.14如何找导致CPU瓶颈的程序 410
15.15如何找导致内存瓶颈的程序 410
15.16如何找导致IO瓶颈的程序 411
15.17如何计算并发用户数 411
15.18 JMeter可以做哪些测试 412
15.19性能测试的分析方法有哪些 412
15.20如何看懂Java线程栈信息 413
15.21能用本地负载环境测试“云环境”的性能吗 413
15.22性能测试环境和生产环境不一致 414
15.23本章小结 414
附录A Jforum性能测试计划 415
A.1性能测试背景 416
A.2性能测试目标 416
A.3性能测试范围 416
A.4名词术语约定 416
A.5测试环境 417
A.5.1生产环境系统架构 417
A.5.2测试环境系统架构 418
A.5.3生产环境软硬件配置 418
A.5.4测试环境软硬件配置 419
A.5.5负载机软硬件配置 419
A.6需求分析 420
A.6.1业务模型 420
A.6.2性能指标 421
A.7测试策略 422
A.7.1测试执行策略 422
A.7.2测试监控策略 422
A.8测试场景 423
A.9测试准备 423
A.9.1测试工具准备 424
A.9.2测试脚本及程序准备 424
A.9.3测试数据准备 424
A.9.4测试环境准备 424
A.10测试组织架构 425
A.11交付清单 425
A.12项目风险 426
A.13附录 426
附录B 性能测试报告 427
B.1性能测试背景 428
B.2性能测试目标 428
B.3性能测试范围 428
B.4名词术语约定 429
B.5测试环境 430
B.5.1生产环境系统架构 430
B.5.2测试环境系统架构 430
B.5.3生产环境软硬件配置 431
B.5.4测试环境软硬件配置 431
B.5.5负载机软硬件配置 431
B.6测试数据 432
B.6.1历史数据量 432
B.6.2主数据 432
B.6.3性能指标 432
B.7测试进度 433
B.8测试结果 433
B.8.1基准测试结果 433
B.8.2配置测试 434
B.8.3负载测试结果 438
B.8.4稳定性测试结果 445
B.9测试结论 447
B.9.1测试结论 447
B.9.2系统缺陷 448
B.10系统风险 448
参考资料 449