这本书的原名是叫《Test-Driven Development with Python》,小标题是 Obey the Testing Goat: Using Django, Selenium, and JavaScript。虽然有点难以理解为何这本书的中文名变成了《Python Web开发 - 测试驱动方法》,总感觉怪怪的,毕竟Kent Beck的那本书名是《测试驱动开发》。

如我在微博上所说,这本书的Python Web开发所用的框架是Django。问了几个出版社都没有出版Django书的计划,要知道有这么多公司使用了Django:

Who use Django

尽管最近几年里Flask似乎比Django受欢迎,但是Django是一个设计得非常巧妙的框架。而且,越来越多的公司开始使用Django替换他们原有的系统,如Firefox所在的Mozilla。吐槽完毕,让我们进入正题。

书的作者在一家使用敏捷开发的软件公司里。

如果你想(复制一下小结):

学习自动测试(针对Developer)
测试驱动开发
持续交付

那么,这本书是非常值得看的。
测试

这本书的主要话题自然是测试了。
TDD(测试驱动开发)

传统的软件公司的测试和开发是分离的,这就意味着你并不需要写你的功能测试。由于,没有在那样的公司工作过,我也不知道他们是否写单元测试。反正我所在的公司,单元测试和功能测试都是要写的。但是,我相信他们需要有个三次握手的过程:

三次握手

这就有点像开发团队和产品团队在互相推诿责任,“你们的需求实现不了”,“你们开发的东西有问题”。对于产品来说,最好的过程莫过于产品团队和开发团队一起开发实现功能。同比,如果你的测试和产品代码是分开写的,如果你不打算改变现状、走出舒适区或者尝试新的东西,那么你不需要TDD,你也不需要这本书。

So,这本书的大部分内容都是关于如何展开TDD的。
自动测试

现在,有一个新的项目来了,客户想到一个TO-DO List。TDD的第一要素是测试,所以先用Selenium来了一个单元测试,用于测试首页是存在的,并且标题中含有Django。

from selenium imoprt webdriver

browser = webdriver.Firefox()
browser.get(‘http://localhost:8000‘)

assert ‘Django’ in browser.title

你可能已经猜到结果了,这个测试必须是挂的。如果你没有用到Selenium这样的自动测试工具,你应该试试,它会在你运行的时候,自动打开浏览器。

Selenium Firefox

因为Web服务并没有启动,所以你需要用django-admin.py去创建一个项目,然后就是经典的Hello,World。

如果你写过Java或者Python等等的测试,你可能已经猜到了。你写的测试都会自动的执行下去,所以他会把这些任务一个个跑一遍。并且,是由机器来执行:

Selenium会打开一个浏览器窗口,打开某个页面,输入表单信息,然后点击确认,最后验证信息是不是正确的。
Selenium会打开一个浏览器窗口,打开某个页面查看页面的标题是不是正确的。
Selenium会打开一个浏览器窗口,并按照你的需要点击页面的某个button,然后检查页面是不是会出现类似的东西。

contribute

而你并没有实现这些功能,所以你需要去实现他们。

然后这本书就在重复上面的过程,过程中你学会了怎么使用Django。但是,你并不会意识到这其中的美妙之处。
红-绿-重构

实现上,我们在重复的过程是:红-绿-重构。

通常来说,红的原因是因为我们依据客户需求编写测试用例。接着,通过让测试变绿(成功),我们就知道我们实现了这个功能。如果你的功能代码写得很好,那么你不就需要去重构代码了。所以,其实重构代码的前提是你已经有了测试,而TDD就是在保证你有测试来cover功能代码。

所以,如果你所在的项目之所以没有人敢重构,就是因为测试覆盖率不够。
测试小结

接着,作者对实践过程中遇到的问题进行了一些总结。如测试速度、拆分测试、什么时候使用集成测试(书中翻译为整合测试),这些小结相当重要。像在我们的项目中,运行所有的测试大概要半个小时,这期间不断跳到的Firefox浏览器(~10个)会夺走你对电脑的使用权。

好了,这本书2/3的话题已经完了。
持续交付

这是这本书另外1/3的话题划分到了持续交付这样的话题,当然这只是我对他们的总结。

持续交付意味着几个话题,如持续集成、持续发布、自动部署,所以书中提到了几个不错的软件:

Fabric,一个用于自动部署的工具 —— Python语言。
HTTP服务器Nginx。
WSGI服务器Gunicorn
Jenkins,持续集成(CI)。虽然我们项目上用的是Bamboo,但是他们都是持续集成构建服务器软件。这意味着,在你PUSH代码后,在CI上会安装依赖、运行测试、发布版本等等。

(ps: 我的博客就是 Django + Nginx + Gunicorn + Mezzanine (CMS) + Fabric (Mezzanine自带),但是没有Jenkins)

忘说了,上面的所有内容都是敏捷的开发流程。
小结

So,So,如果你想:

学习自动测试
测试驱动开发
持续交付

那么,这本书是非常值得看的。

《Python Web开发 - 测试驱动方法》相关推荐

  1. ComeFuture英伽学院——2020年 全国大学生英语竞赛【C类初赛真题解析】(持续更新)

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  2. ComeFuture英伽学院——2019年 全国大学生英语竞赛【C类初赛真题解析】大小作文——详细解析

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  3. 信息学奥赛真题解析(玩具谜题)

    玩具谜题(2016年信息学奥赛提高组真题) 题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业.有一天, 这些玩具小人把小南的眼镜藏了起来.小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的 ...

  4. 信息学奥赛之初赛 第1轮 讲解(01-08课)

    信息学奥赛之初赛讲解 01 计算机概述 系统基本结构 信息学奥赛之初赛讲解 01 计算机概述 系统基本结构_哔哩哔哩_bilibili 信息学奥赛之初赛讲解 02 软件系统 计算机语言 进制转换 信息 ...

  5. 信息学奥赛一本通习题答案(五)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  6. 信息学奥赛一本通习题答案(三)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  7. 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题

    第1章   快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章  素数 第 3 章  约数 第 4 章  同余问题 第 5 章  矩阵乘法 第 6 章 ...

  8. 信息学奥赛一本通题目代码(非题库)

    为了完善自己学c++,很多人都去读相关文献,就比如<信息学奥赛一本通>,可又对题目无从下手,从今天开始,我将把书上的题目一 一的解析下来,可以做参考,如果有错,可以告诉我,将在下次解析里重 ...

  9. 信息学奥赛一本通(C++版) 刷题 记录

    总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 刷题 记录 http://ybt.ssoier. ...

  10. 最近公共祖先三种算法详解 + 模板题 建议新手收藏 例题: 信息学奥赛一本通 祖孙询问 距离

    首先什么是最近公共祖先?? 如图:红色节点的祖先为红色的1, 2, 3. 绿色节点的祖先为绿色的1, 2, 3, 4. 他们的最近公共祖先即他们最先相交的地方,如在上图中黄色的点就是他们的最近公共祖先 ...

最新文章

  1. 生成pojo mysql_通过数据库表反向生成pojo类
  2. 新时代,大数据战略和DevOps更配
  3. python 解析xml格式_Python解析XML文件
  4. 卡片游戏 数学期望
  5. 基于python爬虫技术的应用_基于Python爬虫技术的应用
  6. java中interrupt,interrupted和isInterrupted的区别
  7. 怎样使用两行代码实现博客园打赏功能
  8. mysql index sub part_mysql中的key和index 理解
  9. C#调用C和C++函数的一点区别
  10. 3年,从工程师到创始人
  11. 面向对象(Python):学习笔记之继承
  12. windows php7怎么配置,PHP7在windows7中的环境配置详解
  13. 转:7招,教你在工作中高效做笔记
  14. vue3.0+vite跑项目遇到的问题
  15. 2021南京大学计算机考研分数线,【34所院校线】南京大学2021考研复试分数线已公布...
  16. HDU 1873 优先队列
  17. 1610C - Keshi Is Throwing a Party 题解
  18. java pdf 签名_java – PDFBox 1.8.10:填充和签名PDF生成无效签名
  19. 赛门铁克2010年大中国区杰出用户奖获奖名单
  20. (74)Verilog实现CRC【MIPI】

热门文章

  1. 葛兰岱尔数字孪生GIS/BIM/3D融合渲染引擎功能更新(一)
  2. 算法视角揭秘抖音短视频如何实现精准推荐?为何能产生100w+
  3. 想要做网页游戏怎么办 ?PixiJs 篇(一)
  4. SDOI 2016 生成魔咒 题解
  5. linux微信qq钉钉,Ubuntu使用Wine安装钉钉、微信、QQ等Windows软件
  6. Windows 10 、GPU 1080 ti 安装 Anaconda, GPU版本的TensorFlow 详细教程
  7. 安装kuboard-kubernetes图形化管理工具
  8. 【Python教程】有了它,excel彻底沦为工具人|初识pandas模块(一)
  9. 12.1 什么是文件路径,Python中如何书写文件路径?(os.path.join()函数)
  10. 什么叫做classpath(类路径)