万本电子书0元读

万本电子书0元读

顶部广告

Python测试驱动开发:使用Django、Selenium和JavaScript进行Web编程(第2版)电子书

本书手把手教你从头发一个真正的Web应用,演示使用Python做测试驱动发(TDD)的优势。你将学会如何在发应用的每一个组成部分之前编写和运行测试,然后再编写少量的代码让测试通过,*终得到简洁可用的代码。此外,你还会了解Django、Selenium、Git、jQuery和Mock的基础知识,以及其他目前流行的Web发技术。 ·深分析TDD流程,包括“单元测试 编写代码”循环和重构 ·使用单元测试检查类和函数,使用功能测试检查浏览器中的用户交互

售       价:¥

纸质售价:¥89.20购买纸书

379人正在读 | 0人评论 6.5

作       者:(英)哈利·帕西瓦尔(Harry J. W. Percival)

出  版  社:人民邮电出版社

出版时间:2018-07-01

字       数:45.1万

所属分类: 科技 > 计算机/网络 > 程序设计

温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印

为你推荐

  • 读书简介
  • 目录
  • 累计评论(0条)
  • 读书简介
  • 目录
  • 累计评论(0条)
本书从基础的知识始,讲解Web发的整个流程,展示如何使用Python做测试驱动发。本书由三个部分组成。*部分介绍了测试驱动发和Django的基础知识,并在每个阶段行严格的单元测试。第二部分讨论了Web发要素,探讨了Web发过程中不可避免的问题,以及如何通过测试解决这些问题。第三部分探讨了一些话题,如模拟技术、集成第三方认证系统、Ajax、测试固件以及持续集成等。 第2版全部使用Python 3,并针对新版Django全面升级,介绍了由外而内的测试驱动发流程。 本书适合Web发人员阅读。<br/>【推荐语】<br/>本书手把手教你从头发一个真正的Web应用,演示使用Python做测试驱动发(TDD)的优势。你将学会如何在发应用的每一个组成部分之前编写和运行测试,然后再编写少量的代码让测试通过,*终得到简洁可用的代码。此外,你还会了解Django、Selenium、Git、jQuery和Mock的基础知识,以及其他目前流行的Web发技术。 ·深分析TDD流程,包括“单元测试 编写代码”循环和重构 ·使用单元测试检查类和函数,使用功能测试检查浏览器中的用户交互 ·学习何时、如何使用驭件,以及隔离测试和整合测试的优缺 ·在过渡服务器中测试和自动部署 ·测试网站中集成的第三方插件 ·使用持续集成环境自动运行测试 ·使用TDD构建一个具有Ajax前端界面的REST API<br/>【作者】<br/>哈利·J.W. 帕西瓦尔(Harry J.W. Percival),TDD积极践行者,曾参与发电子制作表软件先驱Resolver One;目前jiu职于PythonAnywhere公司,经常受邀参加TDD和Python发主题演讲、研讨会;取得了利物浦大学计算机科学硕士学位和剑桥大学哲学硕士学位。<br/>
目录展开

O'Reilly Media, Inc. 介绍

业界评论

前言

为什么要写一本关于测试驱动开发的书

写作本书的目的

本书结构

排版约定

提交勘误

使用代码示例

O'Reilly Safari

联系我们

电子书

准备工作和应具备的知识

了解Python 3,会编程

HTML的工作方式

Django

JavaScript

需要安装的软件

搭建虚拟环境

配套视频

致谢

第2版附加致谢

第一部分 TDD和Django基础

第 1 章 使用功能测试协助安装Django

1.1 遵从测试山羊的教诲,没有测试什么也别做

1.2 让Django运行起来

1.3 创建Git仓库

第 2 章 使用unittest模块扩展功能测试

2.1 使用功能测试驱动开发一个最简可用的应用

2.2 Python标准库中的unittest模块

2.3 提交

第 3 章 使用单元测试测试简单的首页

3.1 第一个Django应用,第一个单元测试

3.2 单元测试及其与功能测试的区别

3.3 Django中的单元测试

3.4 Django中的MVC、URL和视图函数

3.5 终于可以编写一些应用代码了

3.6 urls.py

3.7 为视图编写单元测试

第 4 章 测试(及重构)的目的

4.1 编程就像从井里打水

4.2 使用Selenium测试用户交互

4.3 遵守“不测试常量”规则,使用模板解决这个问题

4.4 关于重构

4.5 接着修改首页

4.6 总结:TDD流程

第 5 章 保存用户输入:测试数据库

5.1 编写表单,发送POST请求

5.2 在服务器中处理POST请求

5.3 把Python变量传入模板中渲染

5.4 事不过三,三则重构

5.5 Django ORM和第一个模型

5.6 把POST请求中的数据存入数据库

5.7 处理完POST请求后重定向

5.8 在模板中渲染待办事项

5.9 使用迁移创建生产数据库

5.10 回顾

第 6 章 改进功能测试:确保隔离,去掉含糊的休眠

6.1 确保功能测试之间相互隔离

6.2 升级Selenium和Geckodriver

6.3 隐式等待、显式等待和含糊的time.sleep

第 7 章 步步为营

7.1 必要时做少量的设计

7.2 使用TDD实现新设计

7.3 确保出现回归测试

7.4 逐步迭代,实现新设计

7.5 自成一体的第一步:新的URL

7.6 变绿了吗?该重构了

7.7 再迈一小步:一个新模板,用于查看清单

7.8 第三小步:用于添加待办事项的URL

7.9 下定决心,调整模型

7.10 每个列表都应该有自己的URL

7.11 功能测试又检测到回归

7.12 还需要一个视图,把待办事项加入现有清单

7.13 使用URL引入做最后一次重构

第二部分 Web 开发要素

第 8 章 美化网站:布局、样式及其测试方法

8.1 如何在功能测试中测试布局和样式

8.2 使用CSS框架美化网站

8.3 Django模板继承

8.4 集成Bootstrap

8.5 Django中的静态文件

8.6 使用Bootstrap中的组件改进网站外观

8.7 使用自己编写的CSS

8.8 补遗:collectstatic命令和其他静态目录

8.9 没谈到的话题

第 9 章 使用过渡网站测试部署

9.1 TDD以及部署的危险区域

9.2 一如既往,先写测试

9.3 注册域名

9.4 手动配置托管网站的服务器

9.5 手动部署代码

9.6 手动部署大功告成

第 10 章 为部署到生产环境做好准备

10.1 换用Gunicorn

10.2 让Nginx伺服静态文件

10.3 换用Unix套接字

10.4 把DEBUG设为False,设置ALLOWED_HOSTS

10.5 使用Systemd确保引导时启动Gunicorn

10.6 考虑自动化

10.7 保存进度

第 11 章 使用Fabric自动部署

11.1 分析一个Fabric部署脚本

11.2 试用部署脚本

11.3 使用Git标签标注发布状态

11.4 延伸阅读

第 12 章 输入验证和测试的组织方式

12.1 针对验证的功能测试:避免提交空待办事项

12.2 功能测试新工具:通用显式等待辅助方法

12.3 补完功能测试

12.4 重构单元测试,分拆成多个文件

第 13 章 数据库层验证

13.1 模型层验证

13.2 在视图中显示模型验证错误

13.3 Django模式:在渲染表单的视图中处理POST请求

13.4 重构:去除硬编码的URL

第 14 章 简单的表单

14.1 把验证逻辑移到表单中

14.2 在视图中使用这个表单

14.3 在处理POST请求的视图中使用这个表单

14.4 在其他视图中使用这个表单

14.5 值得鼓励

14.6 这难道不是浪费时间吗

14.7 使用表单自带的save方法

第 15 章 高级表单

15.1 针对重复待办事项的功能测试

15.2 在视图层试验待办事项重复验证

15.3 处理唯一性验证的复杂表单

15.4 在清单视图中使用ExistingListItemForm

15.5 小结:目前所学的Django测试知识

第 16 章 试探JavaScript

16.1 从功能测试开始

16.2 安装一个基本的JavaScript测试运行程序

16.3 使用jQuery和<div>固件元素

16.4 为想要实现的功能编写JavaScript单元测试

16.5 固件、执行顺序和全局状态:JavaScript 测试的重大挑战

16.6 经验做法:onload样板代码和命名空间

16.7 JavaScript测试在TDD循环中的位置

16.8 一些缺憾

第 17 章 部署新代码

17.1 部署到过渡服务器

17.2 部署到线上服务器

17.3 如果看到数据库错误该怎么办

17.4 总结:为这次新发布打上Git标签

第三部分 高级话题

第 18 章 用户身份验证、探究及去掉探究代码

18.1 无密码验证

18.2 探索性编程(又名“探究”)

18.3 去掉探究代码

18.4 一个极简的自定义用户模型

18.5 令牌模型:把电子邮件地址与唯一的ID关联起来

第 19 章 使用驭件测试外部依赖或减少重复

19.1 开始之前布好基本管道

19.2 自己动手模拟(打猴子补丁)

19.3 Python的模拟库

19.4 去除自定义的身份验证后端中的探究代码

19.5 使用驭件的另一个原因:减少重复

19.6 关键时刻:功能测试能通过吗

19.7 理论上正常,那么实际呢

19.8 完善功能测试,测试退出功能

第 20 章 测试固件和一个显式等待装饰器

20.1 事先创建好会话,跳过登录过程

20.2 显式等待辅助方法最终版:wait装饰器

第 21 章 服务器端调试技术

21.1 实践是检验真理的唯一标准:在过渡服务器中捕获最后的问题

21.2 在服务器上通过环境变量设定机密信息

21.3 调整功能测试,以便通过POP3测试真实的电子邮件

21.4 在过渡服务器中管理测试数据库

21.5 集成日志相关的代码

21.6 小结

第 22 章 完成“My Lists”页面:由外而内的TDD

22.1 对立技术:“由内而外”

22.2 为什么选择使用“由外而内”

22.3 “My Lists”页面的功能测试

22.4 外层:表现层和模板

22.5 下移一层到视图函数(控制器)

22.6 使用由外而内技术,再让一个测试通过

22.7 视图层的下一个需求:新建清单时应该记录属主

22.8 下移到模型层

第 23 章 测试隔离和“倾听测试的心声”

23.1 重温抉择时刻:视图层依赖于尚未编写的模型代码

23.2 首先尝试使用驭件实现隔离

23.3 倾听测试的心声:丑陋的测试表明需要重构

23.4 以完全隔离的方式重写视图测试

23.5 下移到表单层

23.6 下移到模型层

23.7 关键时刻,以及使用模拟技术的风险

23.8 把层与层之间的交互当作“合约”

23.9 还缺一个测试

23.10 清理:保留哪些整合测试

23.11 总结:什么时候编写隔离测试,什么时候编写整合测试

第 24 章 持续集成

24.1 安装Jenkins

24.2 配置Jenkins

24.3 设置项目

24.4 第一次构建

24.5 设置虚拟显示器,让功能测试能在无界面的环境中运行

24.6 截图

24.7 如有疑问,增加超时试试

24.8 使用PhantomJS运行QUnit JavaScript测试

24.9 CI服务器能完成的其他操作

第 25 章 简单的社会化功能、页面模式以及练习

25.1 有多个用户以及使用addCleanup的功能测试

25.2 页面模式

25.3 扩展功能测试测试第二个用户和“My Lists”页面

25.4 留给读者的练习

第 26 章 测试运行速度的快慢和炽热的岩浆

26.1 正题:单元测试除了运行速度超快之外还有其他优势

26.2 纯粹的单元测试有什么问题

26.3 合题:我们到底想从测试中得到什么

26.4 架构方案

26.5 小结

附录 A PythonAnywhere

A.1 使用Xvfb在Firefox中运行Selenium会话

A.2 以PythonAnywhere Web应用的方式安装Django

A.3 清理/tmp目录

A.4 截图

A.5 关于部署

附录 B 基于类的Django视图

B.1 基于类的通用视图

B.2 使用FormView实现首页

B.3 使用form_valid定制CreateView

B.4 一个更复杂的视图,既能查看清单,也能向清单中添加待办事项

B.5 新旧版对比

B.6 为CBGV编写单元测试有最佳实践吗

B.7 记住:编写多个只有一个断言的隔离视图测试有所帮助

遵从测试山羊的教诲

测试很难

别忘了给吧台服务员小费

别见外

附录 C 使用Ansible配置服务器

C.1 安装系统包和Nginx

C.2 配置Gunicorn,使用处理程序重启服务

C.3 接下来做什么

附录 D 测试数据库迁移

D.1 尝试部署到过渡服务器

D.2 在本地执行一个用于测试的迁移

D.3 插入一个数据迁移

D.4 一起测试这两个迁移

D.5 小结

附录 E 行为驱动开发

E.1 BDD是什么

E.2 基本的准备工作

E.3 使用Gherkin句法以“特性描述”的形式编写功能测试

E.4 编写步骤函数

E.5 定义第一步

E.6 environment.py中与setUp和tearDown等价的函数

E.7 再次运行

E.8 在步骤中捕获参数

E.9 与行间式功能测试比较

E.10 BDD得到的测试代码结构更好

E.11 与页面模式比较

E.12 BDD可能没有行间注释的表达力强

E.13 非程序员会编写测试吗

E.14 目前的结论

附录 F 构建一个REST API:JSON、Ajax和 JavaScript模拟技术

F.1 本附录采用的方案

F.2 选择测试方案

F.3 基本结构

F.4 返回实质内容

F.5 添加对POST请求的支持

F.6 使用Sinon.js测试客户端Ajax

F.7 在模板中连接各部分,确认这样是否真的可行

F.8 实现Ajax POST,包括CSRF令牌

F.9 JavaScript中的模拟技术

F.10 数据验证:留给读者的练习

附录 G Django-Rest-Framework

G.1 安装

G.2 串化器(具体而言是ModelSerializer)

G.3 Viewset(具体而言是ModelViewSet)和路由器

G.4 通过POST请求添加待办事项的URL

G.5 调整客户端代码

G.6 Django-Rest-Framework的优势

附录 H 速查表

H.1 项目开始阶段

H.2 TDD基本流程

H.3 测试不止要在开发环境中运行

H.4 通用的测试最佳实践

H.5 Selenium/功能测试最佳实践

H.6 由外而内,测试隔离与整合测试,模拟技术

附录 I 接下来做什么

I.1 提醒——站内提醒以及邮件提醒

I.2 换用Postgres

I.3 在不同的浏览器中运行测试

I.4 400和500测试

I.5 Django管理后台

I.6 编写一些安全测试

I.7 测试优雅降级

I.8 缓存和性能测试

I.9 JavaScript MVC框架

I.10 异步和websocket

I.11 换用py.test

I.12 试试coverage.py

I.13 客户端加密

I.14 你的建议

附录 J 示例源码

J.1 使用Git检查自己的进度

J.2 下载各章代码的ZIP文件

J.3 不要完全依赖我的代码

参考书目

作者简介

封面介绍

累计评论(0条) 0个书友正在讨论这本书 发表评论

发表评论

发表评论,分享你的想法吧!

买过这本书的人还买过

读了这本书的人还在读

回顶部