专栏首页phodal《Python Web开发 - 测试驱动方法》阅后感

《Python Web开发 - 测试驱动方法》阅后感

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

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

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

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

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

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

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

测试

这本书的主要话题自然是测试了。

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这样的自动测试工具,你应该试试,它会在你运行的时候,自动打开浏览器。

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

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

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

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

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

红-绿-重构

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

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

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

测试小结

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

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

持续交付

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

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

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

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

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

小结

So,So,如果你想:

  1. 学习自动测试
  2. 测试驱动开发
  3. 持续交付

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

如果你不感兴趣,那么就送给我吧。

本文分享自微信公众号 - phodal(phodal-weixin),作者:Phodal

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2015-10-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 设计测试策略

    我便有了想法重新写一篇文章,体系性的介绍一下相关的内容。我那已经达到 800+ 篇的博客,正好缺失这样的一篇文章。

    Phodal
  • 测试代码的坏味道

    某次代码重构中,我发现代码的测试覆盖率很高,过程中出了一些错误,重构手法不正确是一个问题。但是在重构的过程中,发现有些测试都是没有意义的,所以我变转向开始研究测...

    Phodal
  • 全栈工程师的思考

    什么是全栈工程师 在现在这一个时代来说,不会有人掌握所有的编程语言、技能,以后应该会有,但是掌握这些全部技术的不是人类了。所以,其实我们需要的是懂得多种技术的,...

    Phodal
  • 测试真的是一个无聊又没前途的岗位吗?

    测试小张:第一份工作就是测试,微软外包。别人在测试完了以后不知道干嘛,我抓紧时间看vs的源代码,抓紧时间看pheonix的源代码,抓紧时间看微软那个Perl和b...

    FunTester
  • 你真的会测试吗?

    前段时间公司在做一个专案,关于开发SAP三方交易单据联动的平台,大概功能就是系统里面两家公司交易业务里自动根据销售公司对客户的销售订单生成相应的采购订单和销售订...

    SAP梦心
  • 你掌握的那点代码技术 ,很容易被淘汰的 。

    对于测试团队 ,严格来说;老徐把其分为两个岗位:「业务测试工程师」和「测试开发工程师」 。

    IDO老徐
  • 腾讯TMQ在线沙龙回顾|移动终端性能测试

    移动终端性能测试 活动时间:2016年12月27日 QQ群视频交流 活动介绍:TMQ在线沙龙第十五期分享 本次分享的主题是移动终端性能测试。 共有122位测试...

    腾讯移动品质中心TMQ
  • 测试 ASP.NET Core API Controller

    本文需要您了解ASP.NET Core MVC/Web API, xUnit以及Moq相关知识.

    solenovex
  • 渠道优化完全指南:如何最大化的获得转化效果

    只有在对与用户交互的每个元素进行实验、深入分析并优化设计时,才能实现转化漏斗的最大化。

    iCDO互联网数据官
  • Django来敲门[升级版]-0000-概述web概述课程介绍开发环境写在前面:

    web软件,是软件发展过程中最重要也是代表了将来软件应用的一种趋势。 对于web软件的开发来说,传统意义上的java语言、php语言、ruby语言都是web软...

    大牧莫邪

扫码关注云+社区

领取腾讯云代金券