图书介绍
Python测试驱动开发 使用Django、Selenium和JavaScript进行Web编程 第2版PDF|Epub|txt|kindle电子书版本网盘下载
![Python测试驱动开发 使用Django、Selenium和JavaScript进行Web编程 第2版](https://www.shukui.net/cover/7/31350698.jpg)
- (英)哈利·JW.帕西瓦尔著;安道译 著
- 出版社: 北京:人民邮电出版社
- ISBN:9787115485571
- 出版时间:2018
- 标注页数:454页
- 文件大小:57MB
- 文件页数:489页
- 主题词:软件工具-程序设计
PDF下载
下载说明
Python测试驱动开发 使用Django、Selenium和JavaScript进行Web编程 第2版PDF格式电子书版下载
下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!
(文件页数 要大于 标注页数,上中下等多册电子书除外)
注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具
图书目录
第一部分 TDD和Django基础2
第1章 使用功能测试协助安装Django2
1.1 遵从测试山羊的教诲,没有测试什么也别做2
1.2 让Django运行起来4
1.3 创建Git仓库6
第2章 使用unittest模块扩展功能测试10
2.1 使用功能测试驱动开发一个最简可用的应用10
2.2 Python标准库中的unittest模块12
2.3 提交14
第3章 使用单元测试测试简单的首页16
3.1 第一个Django应用,第一个单元测试16
3.2 单元测试及其与功能测试的区别17
3.3 Django中的单元测试18
3.4 Django中的MVC、URL和视图函数19
3.5 终于可以编写一些应用代码了20
3.6 urls.py22
3.7 为视图编写单元测试23
第4章 测试(及重构)的目的28
4.1 编程就像从井里打水28
4.2 使用Selenium测试用户交互30
4.3 遵守“不测试常量”规则,使用模板解决这个问题32
4.3.1 使用模板重构33
4.3.2 Django测试客户端35
4.4 关于重构37
4.5 接着修改首页38
4.6 总结:TDD流程39
第5章 保存用户输入:测试数据库42
5.1 编写表单,发送POST请求42
5.2 在服务器中处理POST请求45
5.3 把Python变量传入模板中渲染46
5.4 事不过三,三则重构50
5.5 Django ORM和第一个模型51
5.5.1 第一个数据库迁移53
5.5.2 测试向前走得挺远53
5.5.3 添加新字段就要创建新迁移54
5.6 把POST请求中的数据存入数据库55
5.7 处理完POST请求后重定向57
5.8 在模板中渲染待办事项59
5.9 使用迁移创建生产数据库61
5.10 回顾64
第6章 改进功能测试:确保隔离,去掉含糊的休眠66
6.1 确保功能测试之间相互隔离66
6.2 升级Selenium和Geckodriver70
6.3 隐式等待、显式等待和含糊的time.sleep70
第7章 步步为营75
7.1 必要时做少量的设计75
7.1.1 不要预先做大量设计75
7.1.2 YAGNI76
7.1.3 REST(式)76
7.2 使用TDD实现新设计77
7.3 确保出现回归测试78
7.4 逐步迭代,实现新设计80
7.5 自成一体的第一步:新的URL81
7.5.1 一个新URL82
7.5.2 一个新视图函数82
7.6 变绿了吗?该重构了84
7.7 再迈一小步:一个新模板,用于查看清单84
7.8 第三小步:用于添加待办事项的URL86
7.8.1 用来测试新建清单的测试类87
7.8.2 用于新建清单的URL和视图88
7.8.3 删除当前多余的代码和测试89
7.8.4 出现回归!让表单指向刚添加的新URL89
7.9 下定决心,调整模型90
7.9.1 外键关系92
7.9.2 根据新模型定义调整其他代码93
7.10 每个列表都应该有自己的URL95
7.10.1 捕获URL中的参数96
7.10.2 按照新设计调整new_list视图97
7.11 功能测试又检测到回归98
7.12 还需要一个视图,把待办事项加入现有清单99
7.12.1 小心霸道的正则表达式99
7.12.2 最后一个新URL100
7.12.3 最后一个新视图101
7.12.4 直接测试响应上下文对象102
7.13 使用URL引入做最后一次重构103
第二部分 Web开发要素108
第8章 美化网站:布局、样式及其测试方法108
8.1 如何在功能测试中测试布局和样式108
8.2 使用CSS框架美化网站111
8.3 Django模板继承112
8.4 集成Bootstrap114
8.5 Django中的静态文件115
8.6 使用Bootstrap中的组件改进网站外观117
8.6.1 超大文本块118
8.6.2 大型输入框118
8.6.3 样式化表格118
8.7 使用自己编写的CSS118
8.8 补遗:collectstatic命令和其他静态目录120
8.9 没谈到的话题122
第9章 使用过渡网站测试部署123
9.1 TDD以及部署的危险区域124
9.2 一如既往,先写测试125
9.3 注册域名127
9.4 手动配置托管网站的服务器127
9.4.1 选择在哪里托管网站127
9.4.2 搭建服务器128
9.4.3 用户账户、SSH和权限128
9.4.4 安装Nginx128
9.4.5 安装Python 3.6129
9.4.6 解析过渡环境和线上环境所用的域名130
9.4.7 使用功能测试确认域名可用而且Nginx正在运行130
9.5 手动部署代码130
9.5.1 调整数据库的位置131
9.5.2 手动创建虚拟环境,使用requirements.txt133
9.5.3 简单配置Nginx134
9.5.4 使用迁移创建数据库136
9.6 手动部署大功告成137
第10章 为部署到生产环境做好准备139
10.1 换用Gunicorn139
10.2 让Nginx伺服静态文件140
10.3 换用Unix套接字141
10.4 把DEBUG设为False,设置ALLOWED_HOSTS142
10.5 使用Systemd确保引导时启动Gunicorn143
10.6 考虑自动化144
10.7 保存进度147
第11章 使用Fabric自动部署148
11.1 分析一个Fabric部署脚本149
11.1.1 分析一个Fabric部署脚本149
11.1.2 使用Git拉取源码150
11.1.3 更新settings.py151
11.1.4 更新虚拟环境151
11.1.5 需要时迁移数据库152
11.2 试用部署脚本152
11.2.1 部署到线上服务器154
11.2.2 使用sed配置Nginx和Gunicorn155
11.3 使用Git标签标注发布状态157
11.4 延伸阅读157
第12章 输入验证和测试的组织方式159
12.1 针对验证的功能测试:避免提交空待办事项159
12.1.1 跳过测试160
12.1.2 把功能测试分拆到多个文件中161
12.1.3 运行单个测试文件163
12.2 功能测试新工具:通用显式等待辅助方法164
12.3 补完功能测试167
12.4 重构单元测试,分拆成多个文件168
第13章 数据库层验证171
13.1 模型层验证172
13.1.1 self.assertRaises上下文管理器172
13.1.2 Django怪异的表现:保存时不验证数据173
13.2 在视图中显示模型验证错误173
13.3 Django模式:在渲染表单的视图中处理POST请求177
13.3.1 重构:把new_item实现的功能移到view_list中178
13.3.2 在view_list视图中执行模型验证180
13.4 重构:去除硬编码的URL182
13.4.1 模板标签{%url%}182
13.4.2 重定向时使用get_absolute_url183
第14章 简单的表单186
14.1 把验证逻辑移到表单中186
14.1.1 使用单元测试探索表单API187
14.1.2 换用Django中的ModelForm类188
14.1.3 测试和定制表单验证189
14.2 在视图中使用这个表单191
14.2.1 在处理GET请求的视图中使用这个表单191
14.2.2 大量查找和替换192
14.3 在处理POST请求的视图中使用这个表单194
14.3.1 修改new_list视图的单元测试195
14.3.2 在视图中使用这个表单196
14.3.3 使用这个表单在模板中显示错误消息196
14.4 在其他视图中使用这个表单197
14.4.1 定义辅助方法,简化测试197
14.4.2 意想不到的好处:HTML5自带的客户端验证199
14.5 值得鼓励201
14.6 这难道不是浪费时间吗201
14.7 使用表单自带的save方法202
第15章 高级表单205
15.1 针对重复待办事项的功能测试205
15.1.1 在模型层禁止重复206
15.1.2 题外话:查询集合排序和字符串表示形式208
15.1.3 重写旧模型测试210
15.1.4 保存时确实会显示完整性错误211
15.2 在视图层试验待办事项重复验证212
15.3 处理唯一性验证的复杂表单213
15.4 在清单视图中使用ExistingListItemForm215
15.5 小结:目前所学的Django测试知识217
第16章 试探JavaScript219
16.1 从功能测试开始219
16.2 安装一个基本的JavaScript测试运行程序221
16.3 使用jQuery和〈div〉固件元素223
16.4 为想要实现的功能编写JavaScript单元测试225
16.5 固件、执行顺序和全局状态:JavaScript测试的重大挑战227
16.5.1 使用console.log打印调试信息227
16.5.2 使用初始化函数精确控制执行时间229
16.6 经验做法:onload样板代码和命名空间230
16.7 JavaScript测试在TDD循环中的位置232
16.8 一些缺憾232
第17章 部署新代码234
17.1 部署到过渡服务器234
17.2 部署到线上服务器235
17.3 如果看到数据库错误该怎么办235
17.4 总结:为这次新发布打上Git标签235
第三部分 高级话题238
第18章 用户身份验证、探究及去掉探究代码238
18.1 无密码验证238
18.2 探索性编程(又名“探究”)239
18.2.1 为此次探究新建一个分支239
18.2.2 前端登录UI240
18.2.3 从Django中发出邮件240
18.2.4 使用环境变量,避免源码中出现机密信息242
18.2.5 在数据库中存储令牌243
18.2.6 自定义身份验证模型243
18.2.7 结束自定义Django身份验证功能244
18.3 去掉探究代码248
18.4 一个极简的自定义用户模型251
18.5 令牌模型:把电子邮件地址与唯一的ID关联起来254
第19章 使用驭件测试外部依赖或减少重复257
19.1 开始之前布好基本管道257
19.2 自己动手模拟(打猴子补丁)258
19.3 Python的模拟库261
19.3.1 使用unittest.patch261
19.3.2 让测试向前迈一小步263
19.3.3 测试Django消息框架263
19.3.4 在HTML中添加消息265
19.3.5 构建登录URL266
19.3.6 确认给用户发送了带有令牌的链接267
19.4 去除自定义的身份验证后端中的探究代码269
19.4.1 一个if语句需要一个测试269
19.4.2 get_user方法272
19.4.3 在登录视图中使用自定义的验证后端273
19.5 使用驭件的另一个原因:减少重复274
19.5.1 使用驭件的返回值277
19.5.2 在类一级上打补丁278
19.6 关键时刻:功能测试能通过吗279
19.7 理论上正常,那么实际呢281
19.8 完善功能测试,测试退出功能283
第20章 测试固件和一个显式等待装饰器285
20.1 事先创建好会话,跳过登录过程285
20.2 显式等待辅助方法最终版:wait装饰器290
第21章 服务器端调试技术293
21.1 实践是检验真理的唯一标准:在过渡服务器中捕获最后的问题293
21.2 在服务器上通过环境变量设定机密信息295
21.3 调整功能测试,以便通过POP3测试真实的电子邮件296
21.4 在过渡服务器中管理测试数据库299
21.4.1 创建会话的Django管理命令300
21.4.2 让功能测试在服务器上运行管理命令301
21.4.3 直接在Python代码中使用Fabric302
21.4.4 回顾:在本地服务器和过渡服务器中创建会话的方式303
21.5 集成日志相关的代码304
21.6 小结305
第22章 完成“My Lists”页面:由外而内的TDD306
22.1 对立技术:“由内而外”306
22.2 为什么选择使用“由外而内”307
22.3 “My Lists”页面的功能测试307
22.4 外层:表现层和模板309
22.5 下移一层到视图函数(控制器)309
22.6 使用由外而内技术,再让一个测试通过310
22.6.1 快速重组模板的继承层级311
22.6.2 使用模板设计API311
22.6.3 移到下一层:视图向模板中传入什么313
22.7 视图层的下一个需求:新建清单时应该记录属主313
22.8 下移到模型层315
第23章 测试隔离和“倾听测试的心声”319
23.1 重温抉择时刻:视图层依赖于尚未编写的模型代码319
23.2 首先尝试使用驭件实现隔离320
23.3 倾听测试的心声:丑陋的测试表明需要重构323
23.4 以完全隔离的方式重写视图测试323
23.4.1 为了新测试的健全性,保留之前的整合测试组件324
23.4.2 完全隔离的新测试组件324
23.4.3 站在协作者的角度思考问题324
23.5 下移到表单层329
23.6 下移到模型层332
23.7 关键时刻,以及使用模拟技术的风险335
23.8 把层与层之间的交互当作“合约”336
23.8.1 找出隐形合约337
23.8.2 修正由于疏忽导致的问题338
23.9 还缺一个测试339
23.10 清理:保留哪些整合测试340
23.10.1 删除表单层多余的代码340
23.10.2 删除以前实现的视图341
23.10.3 删除视图层多余的代码342
23.11 总结:什么时候编写隔离测试,什么时候编写整合测试343
23.11.1 以复杂度为准则344
23.11.2 两种测试都要写吗344
23.11.3 继续前行344
第24章 持续集成346
24.1 安装Jenkins346
24.2 配置Jenkins347
24.2.1 首次解锁348
24.2.2 现在建议安装的插件348
24.2.3 配置管理员用户348
24.2.4 添加插件350
24.2.5 告诉Jenkins到哪里寻找Python 3和Xvfb350
24.2.6 设置HTTPS351
24.3 设置项目351
24.4 第一次构建352
24.5 设置虚拟显示器,让功能测试能在无界面的环境中运行354
24.6 截图356
24.7 如有疑问,增加超时试试359
24.8 使用PhantomJS运行QUnit JavaScript测试359
24.8.1 安装node359
24.8.2 在Jenkins中添加构建步骤361
24.9 CI服务器能完成的其他操作362
第25章 简单的社会化功能、页面模式以及练习363
25.1 有多个用户以及使用addCleanup的功能测试363
25.2 页面模式365
25.3 扩展功能测试测试第二个用户和“My Lists”页面367
25.4 留给读者的练习368
第26章 测试运行速度的快慢和炽热的岩浆371
26.1 正题:单元测试除了运行速度超快之外还有其他优势372
26.1.1 测试运行得越快,开发速度越快372
26.1.2 神赐的心流状态372
26.1.3 经常不想运行速度慢的测试,导致代码变坏373
26.1.4 现在还行,不过随着时间推移,整合测试会变得越来越慢373
26.1.5 别只听我一个人说373
26.1.6 单元测试能驱使我们实现好的设计373
26.2 纯粹的单元测试有什么问题373
26.2.1 隔离的测试难读也难写373
26.2.2 隔离测试不会自动测试集成情况374
26.2.3 单元测试几乎不能捕获意料之外的问题374
26.2.4 使用驭件的测试可能和实现方式联系紧密374
26.2.5 这些问题都可以解决374
26.3 合题:我们到底想从测试中得到什么374
26.3.1 正确性374
26.3.2 简洁可维护的代码375
26.3.3 高效的工作流程375
26.3.4 根据所需的优势评估测试375
26.4 架构方案375
26.4.1 端口和适配器(或六边形、简洁)架构376
26.4.2 函数式核心,命令式外壳377
26.5 小结377
遵从测试山羊的教诲379
附录A PythonAnywhere381
附录B 基于类的Django视图385
附录C 使用Ansible配置服务器394
附录D 测试数据库迁移398
附录E 行为驱动开发403
附录F 构建一个REST API:JSON、Ajax和JavaScript模拟技术416
附录G Django-Rest-Framework433
附录H 速查表443
附录I 接下来做什么447
附录J 示例源码451
参考书目453
作者简介454
封面介绍454