登入帳戶  | 訂單查詢  | 購物車/收銀台(0) | 在線留言板  | 付款方式  | 聯絡我們  | 運費計算  | 幫助中心 |  加入書簽
會員登入   新用戶註冊
HOME新書上架暢銷書架好書推介特價區會員書架精選月讀2023年度TOP分類閱讀雜誌 香港/國際用戶
最新/最熱/最齊全的簡體書網 品種:超過100萬種書,正品正价,放心網購,悭钱省心 送貨:速遞 / 物流,時效:出貨後2-4日

2024年11月出版新書

2024年10月出版新書

2024年09月出版新書

2024年08月出版新書

2024年07月出版新書

2024年06月出版新書

2024年05月出版新書

2024年04月出版新書

2024年03月出版新書

2024年02月出版新書

2024年01月出版新書

2023年12月出版新書

2023年11月出版新書

2023年10月出版新書

『簡體書』Python Web开发 测试驱动方法

書城自編碼: 2666132
分類: 簡體書→大陸圖書→計算機/網絡程序設計
作 者: [英] 珀西瓦尔[Harry J.W. Percival]
國際書號(ISBN): 9787115403278
出版社: 人民邮电出版社
出版日期: 2015-10-10
版次: 1 印次: 1
頁數/字數: 416/656
書度/開本: 16开 釘裝: 平装

售價:NT$ 822

我要買

share:

** 我創建的書架 **
未登入.



新書推薦:
浪潮将至
《 浪潮将至 》

售價:NT$ 395.0
在虚无时代:与马克斯·韦伯共同思考
《 在虚无时代:与马克斯·韦伯共同思考 》

售價:NT$ 260.0
斯大林格勒:为了正义的事业(格罗斯曼“战争二部曲”的第一部,《生活与命运》前传)
《 斯大林格勒:为了正义的事业(格罗斯曼“战争二部曲”的第一部,《生活与命运》前传) 》

售價:NT$ 840.0
日内交易与波段交易的资金风险管理
《 日内交易与波段交易的资金风险管理 》

售價:NT$ 390.0
自然信息图:一目了然的万物奇观
《 自然信息图:一目了然的万物奇观 》

售價:NT$ 640.0
经纬度丛书·州县之民:治乱之间的小民命运
《 经纬度丛书·州县之民:治乱之间的小民命运 》

售價:NT$ 440.0
女性史:古代卷(真正意义上的女性大历史)
《 女性史:古代卷(真正意义上的女性大历史) 》

售價:NT$ 560.0
你当我好骗吗?
《 你当我好骗吗? 》

售價:NT$ 550.0

建議一齊購買:

+

NT$ 324
《 有趣的二进制 软件安全与逆向分析 》
+

NT$ 496
《 Python项目开发实战 》
+

NT$ 407
《 编程之法:面试和算法心得 》
+

NT$ 573
《 EECS应用概率论 》
編輯推薦:
本书手把手教你从头开始开发一个真正的Web应用,并且展示使用Python做测试驱动开发(TDD)的优势。你将学到如何在开发应用的每一个部分之前先编写和运行测试,然后再编写少量的代码让测试通过。也就是说,你将学会应用TDD理念,写出简洁可用、赏心悦目的代码。
在这个过程中,你还将学到Django、Selenium、Git、jQuery和Mock的基础知识,以及其他当前流行的Web开发技术。如果你准备提升自己的Python技能,本书将清楚地演示如何使用TDD实现简单的设计。
通过阅读本书,你将:
深入分析TDD流程,包括“单元测试编写代码”循环和重构;
使用单元测试检查类和函数,使用功能测试检查浏览器中的用户交互;
学习何时以及如何使用模拟对象,以及隔离测试和整合测试的优缺点;
在过渡服务器中测试和自动部署;
测试网站中集成的第三方插件;
使用持续集成环境自动运行测试。
內容簡介:
本书从基础的知识开始,讲解Web开发的整个流程,展示如何使用Python做测试驱动开发。本书由三个部分组成。介绍了测试驱动开发和Django的基础知识。第二部分讨论了Web开发要素,探讨了Web开发过程中不可避免的问题,及如何通过测试解决这些问题。第三部分探讨了一些高级话题,如模拟技术、集成第三方插件、Ajax、测试固件、持续集成等。本书适合Web开发人员阅读。
關於作者:
Harry J.W. Percival目前就职于PythonAnywhere LLP公司,他在各种演讲、研讨会和开发者大会上积极推广TDD。他在利物浦大学获得计算机科学硕士学位,在剑桥大学获得哲学硕士学位。
目錄
第一部分 TDD 和Django 基础
第1章 使用功能测试协助安装Django3
1.1 遵从测试山羊的教诲,没有测试什么也别做3
1.2 让Django运行起来6
1.3 创建Git仓库7
第2章 使用unittest模块扩展功能测试11
2.1 使用功能测试驱动开发一个最简可用的应用11
2.2 Python标准库中的unittest模块14
2.3 隐式等待16
2.4 提交16
第3章 使用单元测试测试简单的首页18
3.1 第一个Django应用,第一个单元测试19
3.2 单元测试及其与功能测试的区别19
3.3 Django中的单元测试20
3.4 Django中的MVC、URL 和视图函数21
3.5 终于可以编写一些应用代码了22
3.6 urls.py24
3.7 为视图编写单元测试27
第4章 编写这些测试有什么用31
4.1 编程就像从井里打水31
4.2 使用Selenium测试用户交互33
4.3 遵守“不测试常量”规则,使用模板解决这个问题35
4.4 关于重构39
4.5 接着修改首页40
4.6 总结:TDD流程42
第5章 保存用户输入45
5.1 编写表单,发送POST请求45
5.2 在服务器中处理POST请求48
5.3 把Python变量传入模板中渲染49
5.4 事不过三,三则重构53
5.5 Django ORM和第一个模型54
5.5.1 第一个数据库迁移56
5.5.2 测试向前走得挺远57
5.5.3 添加新字段就要创建新迁移57
5.6 把POST请求中的数据存入数据库58
5.7 处理完POST请求后重定向61
5.8 在模板中渲染待办事项63
5.9 使用迁移创建生产数据库65
第6章 完成最简可用的网站70
6.1 确保功能测试之间相互隔离70
6.2 必要时做少量的设计74
6.2.1 YAGNI74
6.2.2 REST75
6.3 使用TDD 实现新设计76
6.4 逐步迭代,实现新设计78
6.5 使用Django测试客户端一起测试视图、模板和URL80
6.5.1 一个新测试类80
6.5.2 一个新URL81
6.5.3 一个新视图函数81
6.5.4 一个新模板,用于查看清单82
6.6 用于添加待办事项的URL和视图85
6.6.1 用来测试新建清单的测试类85
6.6.2 用于新建清单的URL和视图86
6.6.3 删除当前多余的代码和测试88
6.6.4 让表单指向刚添加的新URL88
6.7 调整模型89
6.7.1 通过外键实现的关联91
6.7.2 根据新模型定义调整其他代码92
6.8 每个列表都应该有自己的URL94
6.8.1 捕获URL中的参数95
6.8.2 按照新设计调整new_list视图96
6.9 还需要一个视图,把待办事项加入现有清单97
6.9.1 小心霸道的正则表达式98
6.9.2 最后一个新URL98
6.9.3 最后一个新视图99
6.9.4 如何在表单中使用那个URL100
6.10 使用URL 引入做最后一次重构102
第二部分 Web开发要素
第7章 美化网站:布局、样式及其测试方法106
7.1 如何在功能测试中测试布局和样式106
7.2 使用CSS框架美化网站109
7.3 Django模板继承111
7.4 集成Bootstrap112
7.5 Django中的静态文件114
7.6 使用Bootstrap中的组件改进网站外观116
7.6.1 超大文本块116
7.6.2 大型输入框116
7.6.3 样式化表格117
7.7 使用自己编写的CSS117
7.8 补遗:collectstatic命令和其他静态目录118
7.9 没谈到的话题121
第8章 使用过渡网站测试部署122
8.1 TDD以及部署的危险区域123
8.2 一如既往,先写测试124
8.3 注册域名126
8.4 手动配置托管网站的服务器126
8.4.1 选择在哪里托管网站127
8.4.2 搭建服务器127
8.4.3 用户账户、SSH和权限128
8.4.4 安装Nginx128
8.4.5 解析过渡环境和线上环境所用的域名129
8.4.6 使用功能测试确认域名可用而且Nginx正在运行130
8.5 手动部署代码130
8.5.1 调整数据库的位置131
8.5.2 创建虚拟环境133
8.5.3 简单配置Nginx135
8.5.4 使用迁移创建数据库137
8.6 为部署到生产环境做好准备138
8.6.1 换用Gunicorn138
8.6.2 让Nginx伺服静态文件139
8.6.3 换用Unix套接字140
8.6.4 把DEBUG设为False,设置ALLOWED_HOSTS141
8.6.5 使用Upstart确保引导时启动Gunicorn141
8.6.6 保存改动:把Gunicorn 添加到requirements.txt142
8.7 自动化143
第9章 使用Fabric自动部署147
9.1 分析一个Fabric部署脚本148
9.2 试用部署脚本151
9.2.1 部署到线上服务器153
9.2.2 使用sed配置Nginx 和Gunicorn155
9.3 使用Git标签标注发布状态155
9.4 延伸阅读156
第10章 输入验证和测试的组织方式158
10.1 针对验证的功能测试:避免提交空待办事项158
10.1.1 跳过测试159
10.1.2 把功能测试分拆到多个文件中160
10.1.3 运行单个测试文件162
10.1.4 填充功能测试163
10.2 使用模型层验证164
10.2.1 重构单元测试,分拆成多个文件164
10.2.2 模型验证的单元测试和self.assertRaises上下文管理器165
10.2.3 Django怪异的表现:保存时不验证数据166
10.3 在视图中显示模型验证错误167
10.4 Django模式:在渲染表单的视图中处理POST 请求171
10.4.1 重构:把new_item实现的功能移到view_list 中172
10.4.2 在view_list 视图中执行模型验证174
10.5 重构:去除硬编码的URL176
10.5.1 模板标签{% url %}176
10.5.2 重定向时使用get_absolute_url177
第11章 简单的表单181
11.1 把验证逻辑移到表单中181
11.1.1 使用单元测试探索表单API182
11.1.2 换用Django中的ModelForm类183
11.1.3 测试和定制表单验证184
11.2 在视图中使用这个表单186
11.2.1 在处理GET请求的视图中使用这个表单187
11.2.2 大量查找和替换189
11.3 在处理POST请求的视图中使用这个表单191
11.3.1 修改new_list视图的单元测试191
11.3.2 在视图中使用这个表单192
11.3.3 使用这个表单在模板中显示错误消息193
11.4 在其他视图中使用这个表单194
11.5 使用表单自带的save方法196
第12章 高级表单199
12.1 针对重复待办事项的功能测试199
12.1.1 在模型层禁止重复200
12.1.2 题外话:查询集合排序和字符串表示形式202
12.1.3 重写旧模型测试204
12.1.4 保存时确实会显示完整性错误205
12.2 在视图层试验待办事项重复验证206
12.3 处理唯一性验证的复杂表单207
12.4 在清单视图中使用ExistingListItemForm209
第13章 试探JavaScript213
13.1 从功能测试开始213
13.2 安装一个基本的JavaScript 测试运行程序214
13.3 使用jQuery 和div固件元素217
13.4 为想要实现的功能编写JavaScript单元测试219
13.5 JavaScript测试在TDD循环中的位置221
13.6 经验做法:onload样板代码和命名空间222
13.7 一些缺憾223
第14章 部署新代码224
14.1 部署到过渡服务器224
14.2 部署到线上服务器225
14.3 如果看到数据库错误该怎么办225
14.4 总结:为这次新发布打上Git 标签225
第三部分 高级话题
第15章 用户认证、集成第三方插件以及JavaScript模拟技术的使用228
15.1 Mozilla Persona(BrowserID)229
15.2 探索性编程(又名“探究”)229
15.2.1 为此次探究新建一个分支230
15.2.2 前端和JavaScript代码230
15.2.3 Browser-ID协议231
15.2.4 服务器端:自定义认证机制232
15.3 去掉探究代码237
15.3.1 常用Selenium技术:显式等待240
15.3.2 删除探究代码241
15.4 涉及外部组件的JavaScript单元测试:首次使用模拟技术242
15.4.1 整理:全站共用的静态文件夹242
15.4.2 什么是模拟技术,为什么要模拟,模拟什么244
15.4.3 命名空间244
15.4.4 在initialize函数的单元测试中使用一个简单的驭件245
15.4.5 高级模拟技术250
15.4.6 检查参数的调用253
15.4.7 QUnit 中的setup和teardown函数,以及Ajax请求测试255
15.4.8 深层嵌套回调函数和测试异步代码259
第16章 服务器端认证,在Python中使用模拟技术262
16.1 探究登录视图262
16.2 在Python代码中使用模拟技术263
16.2.1 通过模拟authenticate函数测试视图263
16.2.2 确认视图确实登录了用户266
16.3 模拟网络请求,去除自定义认证后台中的探究代码270
16.3.1 一个if 语句需要一个测试270
16.3.2 在类上使用patch修饰器272
16.3.3 进行布尔值比较时要留意驭件275
16.3.4 需要时创建用户276
16.3.5 get_user方法277
16.4 一个最简单的自定义用户模型279
16.4.1 稍微有点儿失望280
16.4.2 把测试当作文档281
16.4.3 用户已经通过认证282
16.5 关键时刻:功能测试能通过吗283
16.6 完善功能测试,测试退出功能284
第17章 测试固件、日志和服务器端调试287
17.1 事先创建好会话,跳过登录过程287
17.2 实践是检验真理的唯一标准:在过渡服务器中捕获最后的问题290
17.2.1 设置日志291
17.2.2 修正Persona引起的这个问题293
17.3 在过渡服务器中管理测试数据库295
17.3.1 创建会话的Django管理命令295
17.3.2 让功能测试在服务器上运行管理命令296
17.3.3 使用subprocess模块完成额外的工作298
17.4 集成日志相关的代码301
17.5 小结304
第18章 完成“My Lists”页面:由外而内的TDD305
18.1 对立技术:“由内而外”305
18.2 为什么选择使用“由外而内”306
18.3 “My Lists”页面的功能测试306
18.4 外层:表现层和模板307
18.5 下移一层到视图函数(控制器)308
18.6 使用由外而内技术,再让一个测试通过309
18.6.1 快速重组模板的继承层级309
18.6.2 使用模板设计API310
18.6.3 移到下一层:视图向模板中传入什么311
18.7 视图层的下一个需求:新建清单时应该记录属主312
18.8 下移到模型层313
第19章 测试隔离和“倾听测试的心声”318
19.1 重温抉择时刻:视图层依赖于尚未编写的模型代码318
19.2 首先尝试使用驭件实现隔离319
19.3 倾听测试的心声:丑陋的测试表明需要重构322
19.4 以完全隔离的方式重写视图测试323
19.4.1 为了新测试的健全性,保留之前的整合测试组件323
19.4.2 完全隔离的新测试组件324
19.4.3 站在协作者的角度思考问题324
19.5 下移到表单层328
19.6 下移到模型层332
19.7 关键时刻,以及使用模拟技术的风险335
19.8 把层与层之间的交互当作“合约”336
19.8.1 找出隐形合约337
19.8.2 修正由于疏忽导致的问题338
19.9 还缺一个测试340
19.10 清理:保留哪些整合测试340
19.10.1 删除表单层多余的代码340
19.10.2 删除以前实现的视图341
19.10.3 删除视图层多余的代码342
19.11 总结:什么时候编写隔离测试,什么时候编写整合测试343
19.11.1 以复杂度为准则344
19.11.2 两种测试都要写吗344
19.11.3 继续前行345
第20章 持续集成346
20.1 安装Jenkins346
20.1.1 Jenkins的安全配置348
20.1.2 添加需要的插件348
20.2 设置项目350
20.3 第一次构建351
20.4 设置虚拟显示器,让功能测试能在无界面的环境中运行353
20.5 截图355
20.6 一个常见的Selenium问题:条件竞争358
20.7 使用PhantomJS运行QUnit JavaScript测试361
20.7.1 安装node361
20.7.2 在Jenkins中添加构建步骤362
20.8 CI 服务器能完成的其他操作364
第21章 简单的社会化功能、页面模式,以及练习365
21.1 有多个用户以及使用addCleanup 的功能测试365
21.2 实现Selenium交互等待模式367
21.3 页面模式368
21.4 扩展功能测试测试第二个用户和“My Lists”页面371
21.5 留给读者的练习373
第22章 测试运行速度的快慢和炽热的岩浆375
22.1 正题:单元测试除了运行速度超快之外还有其他优势376
22.1.1 测试运行得越快,开发速度越快376
22.1.2 神赐的心流状态377
22.1.3 速度慢的测试经常不想运行,导致代码变坏377
22.1.4 现在还行,不过随着时间推移,整合测试会变得越来越慢377
22.1.5 别只听我一个人说377
22.1.6 单元测试能驱使我们实现好的设计377
22.2 纯粹的单元测试有什么问题378
22.2.1 隔离的测试难读也难写378
22.2.2 隔离测试不会自动测试集成情况378
22.2.3 单元测试几乎不能捕获意料之外的问题378
22.2.4 使用驭件的测试可能和实现方式联系紧密378
22.2.5 这些问题都可以解决379
22.3 合题:我们到底想从测试中得到什么379
22.3.1 正确性379
22.3.2 简洁可维护的代码379
22.3.3 高效的工作流程379
22.3.4 根据所需的优势评估测试379
22.4 架构方案380
22.4.1 端口和适配器(或六边形、简洁)架构380
22.4.2 函数式核心,命令式外壳381
22.5 小结381
遵从测试山羊的教诲383
附录A PythonAnywhere385
附录B 基于类的Django 视图388
附录C 使用Ansible配置服务器398
附录D 测试数据库迁移402
附录E 接下来做什么407
附录F 速查表411
附录G 参考书目415
作者简介416
封面介绍416

 

 

書城介紹  | 合作申請 | 索要書目  | 新手入門 | 聯絡方式  | 幫助中心 | 找書說明  | 送貨方式 | 付款方式 台灣用户 | 香港/海外用户
megBook.com.tw
Copyright (C) 2013 - 2024 (香港)大書城有限公司 All Rights Reserved.