第1章前端开发测试总览...2
1.1Web技术的发展和挑战...2
1.2传统开发流程的局限性...4
1.3传统手工测试的局限性...6
1.4开发模式的转型...7
1.4.1敏捷软件开发...7
1.4.2全流程测试...9
1.4.3让测试自动化...11
1.4.4持续集成...11
1.4.5DevOps...12
1.5本书目标...13
第2章搭建测试基础环境...15
2.1JavaScript的运行环境Node.js...15
2.1.1什么是Node.js...15
2.1.2Node.js的版本发展...17
2.1.3安装Node.js...18
2.2软件包管理系统NodePackageManager(npm)...21
2.2.1安装和更新npm...21
2.2.2package.json...22
2.2.3安装软件包...23
2.2.4列出已安装的软件包...27
2.3代码编辑器(VisualStudioCode)...28
目录
2.3.1安装VisualStudioCode...28
2.3.2初识VisualStudioCode...29
单元测试篇
第3章单元测试概论...34
3.1单元测试的特性...34
3.2单元测试的重要性...35
3.3测试金字塔...37
3.4测试先行(Test-First)...8
3.4.1测试驱动开发(Test-DrivenDevelopment)...39
3.4.2行为驱动开发(Behavior-DrivenDevelopment)...40
3.5Web前端测试框架...42
第4章深入Jasmine单元测试...44
4.1初识Jasmine...44
4.1.1获取Jasmine...44
4.1.2前端单元测试架构...46
4.1.3Jasmine测试框架类库...46
4.2组织测试用例...48
4.2.1describe...48
4.2.2it...49
4.2.3安装和拆卸...50
4.2.4禁用测试套件和挂起测试用例...54
4.3创建单元测试...55
4.3.1准备测试场景...55
4.3.2编写测试用例...56
4.3.3执行测试......58
4.4Jasmine的断言...59
4.4.1内置匹配器...59
4.4.2自定义匹配器(CustomMatcher)........................67
4.4.3自定义相等检验器(CustomEqualityTester)
..................68
4.4.4非对称相等检验器(AsymmetricEqualityTester)...............70
4.4.5辅助匹配函数...71
4.5测试替身(TestDouble)...74
4.5.1测试替身的类型...74
4.5.2使用JasmineSpies......77
4.6测试异步代码...84
4.6.1Jasmine的异步支持...87
4.6.2模拟JavaScriptTimeout相关函数...........................89
4.7Jasmine插件...90
4.7.1jasmine-ajax...90
4.7.2jasmine-jquery...94
4.8基于浏览器调试......100
第5章单元测试执行工具Karma..............................102
5.1初识Karma...102
5.2安装Karma和相关插件...104
5.2.1安装Karma...104
5.2.2安装插件...105
5.3Karma的配置...106
5.3.1生成配置文件...106
5.3.2配置文件的说明......107
5.4基于Karma的调试...115
5.5前端自动化任务构建工具..............................116
5.5.1gulp和Grunt...116
5.5.2gulp的API...118
5.5.3运行gulp任务...122
5.6Karma和gulp集成...123
第6章AngularJS应用的单元测试...........................125
6.1测试AngularJS应用的挑战..............................125
6.2初识ngMock...127
6.2.1准备测试环境...127
6.2.2理解模块(Module)...128
6.2.3理解注入机制(Inject)
...131
6.3AngularJS单元测试最佳实践...........................138
6.3.1测试Controller...138
6.3.2单元测试中的Scope...142
6.3.3测试HTTP交互...144
6.3.4测试Directive...154
6.3.5测试$timeout和$interval...166
6.3.6测试Promise...171
6.3.7测试$log......174
6.3.8测试$exceptionHandler...175
第7章代码覆盖率...177
7.1代码覆盖率的衡量标准...177
7.1.1函数覆盖率(FunctionCoverage)........................177
7.1.2语句覆盖率(StatementCoverage)
........................178
7.1.3分支覆盖率(BranchCoverage)........................179
7.1.4条件覆盖率(ConditionCoverage)........................179
7.2代码覆盖率的意义...179
7.3JavaScript代码覆盖率工具Istanbul........................180
7.3.1安装Istanbul...181
7.3.2覆盖率测试...181
7.3.3覆盖率阈值...183
7.3.4忽略代码...183
7.3.5Istanbul工作原理......184
7.4使用Karma生成覆盖率报告...........................185
自动化测试篇
第8章走进自动化测试...188
8.1自动化测试的优势...188
8.2自动化测试实施流程...189
8.3自动化测试转型的适应性..............................190
8.4测试工具的选择......192
第9章初识Selenium...194
9.1Selenium发展历史...194
9.2Selenium工具套装...196
9.2.1SeleniumRC...196
9.2.2SeleniumWebDriver...197
9.2.3SeleniumGrid...198
9.2.4SeleniumIDE...198
第10章SeleniumWebDriver与元素定位........................205
10.1搭建集成开发环境...205
10.2NUnit测试框架......207
10.3编写测试用例...209
10.4使用工厂模式创建驱动对象...........................212
10.5定位页面元素...214
10.5.1基于id定位...214
10.5.2基于Name定位...215
10.5.3基于ClassName定位...216
10.5.4基于TagName定位...217
10.5.5基于LinkText定位...217
10.5.6基于PartialLinkText定位...218
10.5.7基于CssSelector定位...219
10.5.8基于XPath定位......220
第11章基于WebDriver的Protractor测试框架..................227
11.1WebDriver的JavaScript绑定...........................227
11.1.1WebDriverJs与Protractor...228
11.1.2Protractor特点概述...229
11.1.3Protractor的兼容性...230
11.2搭建Protractor测试环境...230
11.2.1安装Protractor编辑器扩展..............................230
11.2.2准备AngularJS被测网站...231
11.2.3全局安装Protractor与浏览器驱动........................234
11.2.4本地安装Protractor与浏览器驱动........................235
11.2.5编写测试代码...235
11.2.6编写配置文件...236
11.2.7运行测试用例...236
11.2.8调试......237
11.3选择JavaScript测试框架..............................240
11.3.1配置JavaScript测试框架...240
11.3.2JavaScript测试框架的适配器...241
11.4定位页面元素...244
11.4.1基于binding定位......245
11.4.2基于model定位......246
11.4.3基于options定位......246
11.4.4基于buttonText定位...247
11.4.5基于repeater定位...247
11.4.6基于js定位...248
11.4.7链式调用定位操作...249
11.4.8使用$和$$...250
11.4.9自定义定位策略......251
11.5异步流程控制...252
11.5.1使用Promise...253
11.5.2定制的ControlFlow...256
11.5.3JavaScript测试框架的异步适配器........................259
11.6页面交互...260
11.6.1操作浏览器...260
11.6.2操作元素...263
11.7Protractor的等待机制...265
11.7.1waitForAngular...265
11.7.2使用sleep...266
11.7.3隐式等待...266
11.7.4显式等待...267
11.8测试非AngularJS程序...269
第12章使用SeleniumServer...273
12.1SeleniumServer环境配置..............................273
12.1.1安装JavaJDK...274
12.1.2下载SeleniumServerStandalone........................275
12.1.3下载浏览器驱动......276
12.1.4配置Protractor...276
12.1.5启动SeleniumServer...277
12.2JSONWireProtocol与W3CWebDriver标准..................279
12.3Selenium3.0...282
12.4配置浏览器...282
12.4.1Chrome......285
12.4.2Firefox......285
12.4.3Edge......288
12.4.4IE.........289
12.4.5多浏览器测试...291
第13章自动化测试最佳实践...294
13.1页面对象模型...294
13.1.1关注点分离...295
13.1.2实现Protractor页面对象...296
13.1.3页面对象最佳实践...306
13.2数据驱动测试...307
13.3测试报告...311
13.3.1控制台报告...312
13.3.2JUnit报告...313
13.3.3HTML报告...315
13.4性能测试...316
13.5图像匹配...319
13.6任务自动化...322
13.6.1与gulp集成...322
13.6.2npm脚本...325
第14章分布式自动化测试...327
14.1分布式测试概述...327
14.2基于SeleniumGrid的分布式测试........................328
14.2.1启动中央节点...329
14.2.2注册工作节点...329
14.2.3执行测试...331
14.3基于云计算的分布式测试...........................333
14.4配置共享...336
集成篇
第15章持续集成概论...340
15.1开发流程自动化...340
15.1.1什么是持续集成......341
15.1.2持续集成的价值......341
15.2持续集成的功能特征...343
15.2.1编译......343
15.2.2测试......344
15.2.3审计......344
15.2.4部署......345
15.2.5反馈......345
15.3如何实施持续集成...345
15.3.1消除误解...345
15.3.2前提条件...346
15.3.3CI工具......347
15.3.4实践准则...348
15.4选择持续集成工具...350
第16章持续测试......352
16.1测试策略...352
16.2基于Jenkins的持续集成...353
16.3集成TeamFoundationServer...........................356
16.3.1创建项目...356
16.3.2从VisualStudioCode提交变更...........................358
16.3.3配置TFS插件...359
16.3.4创建并配置Jenkins构建项..............................360
16.3.5集成单元测试...364
16.3.6集成自动化测试......368
16.3.7邮件反馈...370
16.4集成VisualStudioTeamServices........................371
16.5集成GitHub...376
16.5.1配置GitHub...377
16.5.2配置Jenkins...379
16.5.3配置构建任务...380