第一部分Cucumber基础 1
第1章 为何使用Cucumber 3
1.1自动化验收测试 3
1.2行为驱动开发 4
1.2.1通用语言 4
1.2.2实例 5
1.3活的文档 6
事实来源 6
1.4 Cucumber如何工作 6
1.5我们学到了什么 7
第2章Cucumber初体验 9
2.1理解我们的目标 9
2.2创建一个特性 10
2.3创建步骤定义 12
2.4实现第一个步骤定义 13
2.5运行程序 14
2.6改变格式器 15
2.7添加一个断言 16
2.8让测试通过 18
2.9我们学到了什么 20
2.9.1目录结构 20
2.9.2小步前进 21
2.9.3 Gherkin 21
2.9.4步骤定义 21
第3章Gherkin基础 22
3.1 Gherkins是干什么的 22
3.1.1具体实例 22
3.1.2可执行的规格说明 23
3.2格式和语法 24
3.2.1关键字 25
3.2.2 模拟运行 25
3.3 Feature 25
3.4场景 26
3.4.1Given、 When和Then 27
3.4.2 And和But 27
3.4.3使用星号替换Given、When和Then 28
3.4.4无状态 28
3.4.5名称和描述 29
3.5注释 29
3.6语言 30
3.7我们学到了什么 31
第4章 步骤定义:外在篇 34
4.1步骤和步骤定义 35
4.1.1匹配步骤 35
4.1.2创建步骤定义 36
4.1.3 Given、 When和Then是相同的 37
4.1.4使用本国语言 38
4.2捕获参数 39
4.2.1捕获组 39
4.2.2多选分支 39
4.2.3点号 40
4.2.4星号修饰符 40
4.2.5字符组 41
4.2.6字符组简记法 41
4.2.7加号修饰符 42
4.3多重捕获 42
4.4灵活性 43
4.4.1问号修饰符 44
4.4.2 非捕获组 44
4.4.3锚点 45
4.5返回结果 45
4.5.1未定义的步骤 46
4.5.2待定的步骤 48
4.5.3失败的步骤 49
4.6我们学到了什么 50
第5章 富有表现力的场景 53
5.1背景 53
5.2数据表 56
5.2.1在步骤定义中处理数据表 57
5.2.2将数据表转换成数组 58
5.2.3使用diff!比较数据表 59
5.3场景轮廓 60
5.3.1更大的占位符 62
5.3.2多个实例表 63
5.3.3解释自己 64
5.4嵌套步骤 65
5.4.1嵌套步骤重构 66
5.4.2参数和嵌套步骤 67
5.4.3嵌套步骤的危险 67
5.5文档字符串 68
5.6使用标签和子文件夹保持条理性 69
5.6.1子文件夹 69
5.6.2运行子文件夹中的特性 70
5.6.3标签 70
5.7我们学到了什么 72
第6章Cucumber常见问题及解决之道 73
6.1感受痛苦 73
6.1.1闪烁的场景 74
6.1.2脆弱的特性 74
6.1.3缓慢的特性 75
6.1.4厌倦的利益相关人 76
6.2同心协力 76
6.2.1偶然细节 77
6.2.2命令式步骤 78
6.2.3重复 80
6.2.4语言不通用 82
6.2.5闭门造车式的特性 82
6.3照管好你的测试 84
6.3.1渗露的场景 84
6.3.2竞争条件和打瞌睡的步骤 85
6.3.3共享的环境 86
6.3.4被隔离的测试人员 87
6.3.5固件数据 87
6.3.6大量场景 89
6.3.7大泥球 90
6.4停掉生产线和缺陷预防 90
6.5我们学到了什么 92
第二部分 可以工作的示例 95
第7章 步骤定义:内在篇 97
7.1勾勒出领域模型 98
7.1.1准确用词 99
7.1.2实话实说 100
7.1.3做最简单的事情 101
7.2使用变形器消除重复 102
7.3为World添加自定义辅助方法 105
7.3.1在World中存储状态 107
7.3.2创建自定义辅助方法 107
7.3.3自定义WorlD 108
7.3.4设计抵达终点线的方法 109
7.4组织代码 113
7.4.1隔离应用程序代码 113
7.4.2启动Cucumber环境 113
7.4.3变形器和World模块 114
7.4.4组织步骤定义 114
7.4.5模拟运行和enV.rB. 114
7.5我们学到了什么 115
第8章 支持代码 117
8.1修复bug 117
检查和重构 121
8.2开启用户界面 123
安装gem 125
8.3做出转换 126
设计用户界面 128
8.4使用钩子 129
8.4.1打标签的钩子 130
8.4.2观察场景 131
8.4.3 Around钩子 131
8.4.4在其他时间运行的钩子 132
8.5构建用户界面 133
提供现金 134
8.6我们学到了什么 136
第9章 处理消息队列和异步组件 139
9.1我们全新的异步架构 139
9.2如何同步 140
9.2.1通过监听同步 141
9.2.2通过取样同步 141
9.3实现新架构 142
9.3.1驱动出接口 142
9.3.2构建交易队列 143
9.3.3构建BalanceStore 144
9.3.4添加钩子以重置状态 145
9.3.5构建Transaction Processor 145
9.4修复闪烁的场景 146
9.4.1安装及配置Service Manager 146
9.4.2调查闪烁 148
9.4.3使用取样修复闪烁 150
9.4.4测试什么都没有发生 152
9.5我们学到了什么 152
第10章 数据库 154
10.1 ActiveRecord介绍 154
使用迁移管理模式变更 155
10.2重构至使用数据库 156
10.3读取及写入数据库 159
10.4用事务清理数据库 162
10.5使用截断清理数据库 166
10.6我们学到了什么 167
第三部分 应用Cucumber 169
第11章Cucumber命令行界面 171
11.1 Cucumber命令行选项 171
11.2运行一个场景子集 172
11.2.1 使用标签表达式过滤 172
11.2.2基于行号过滤 173
11.2.3基于名称过滤 174
11.3改变Cucumber的输出 174
11.3.1特殊的格式器 174
11.3.2格式化至文件及使用多种格式器 175
11.3.3显示完整回溯 175
11.4指定步骤定义的位置 175
11.5管理进行中的工作 177
11.6使用profiile 177
11.7从Rake运行Cucumber 178
11.8在持续集成中运行Cucumber 178
11.8.1严格要求 178
11.8.2共享报告 179
11.9我们学到了什么 179
第12章 测试RESTWeb服务 181
12.1进程内测试基于Rack的REST API 182
12.1.1建立应用的骨架——然后存储一些水果 183
12.1.2使用Rack-Test测一测我们的应用 185
12.1.3比较JSON 187
12.2进程外测试任意REST API 192
12.3我们学到了什么 198
第13章 为遗留应用添加测试 199
13.1特性描述测试 200
13.2消灭buG 202
13.3添加新的行为 202
13.4代码覆盖率 204
13.5我们学到了什么 204
第14章 引导RailS 206
14.1运行生成器 207
14.2创建用户 208
14.3发布消息 212
14.4关联消息与用户 215
14.5手工创建控制器 217
14.6实现视图 218
14.7我们学到了什么 219
第15章 使用Capybara测试Ajax Web应用 221
15.1实现不用Ajax的简单搜索 223
15.1.1准备内容以供搜索 223
15.1.2导航、填写输入域和点击按钮 224
15.1.3修复控制器代码 225
15.1.4让Capybara做点事情 226
15.1.5验证页面内容 228
15.1.6从页面中提取数据 228
15.1.7使 用表格比较 230
15.2基于Ajax的搜索 232
15.2.1使用SeleniuM. 233
15.2.2活动搜索的设计 236
15.2.3让Web应用返回JSON 238
15.2.4处理Ajax的异步特性 240
15.3 Capybara API 242
15.3.1导航 242
15.3.2链接与按钮点击 242
15.3.3表单交互 242
15.3.4查询 243
15.3.5查找 243
15.3.6范围限定 244
15.4抓取屏幕截图 244
15.5我们学到了什么 245
第16章 使用Aruba测试命令行应用 247
16.1简单界面 247
16.2我们的第一个Aruba特性 248
16.2.1流和退出状态 249
16.2.2安装ArubA. 250
16.2.3考察Aruba的步骤定义 251
16.3使用文件与可执行程序 252
16.3.1使用@announce查看Aruba见到的内容 255
16.3.2隔离场景 256
16.3.3告知Aruba勿删文件 256
16.3.4设置Aruba的工作目录 257
16.3.5设置SPATH 258
16.4与用户输入交互 259
16.5使用Aruba的Ruby DSL 262
16.6我们学到了什么 263
附录A在其他平台上使用CucumbeR 264
附录B 安装CucumbeR. 266
B.1安装RubY 266
B.1.1 OS X和LinuX 266
B.1.2 WindowS 267
B.2 HTTP代理设置 267
B.3安装BundleR 267
B.4安装Cucumber(及RSpec) 268
B.5安装其他geM 268
B.6选择一款文本编辑器 268
附录C Ruby gem版本 269
附录D参考文献 271