以视觉辅助的 Python 测试驱动开发

会议信息
以视觉辅助的 Python 测试驱动开发

听完这场分享后,您将学习到如何用 pytest 以 TDD 做 Python 项目的开发。

会议日期:2020 年 02 月 28 日

会议时间:PM 09:00

主办方:

 
讲师介绍
Paul Everitt
JetBrains PyCharm 技术布道师

Paul 是 JetBrains 的 PyCharm 技术布道师,负责 Python 技术的推广。Paul 對 Python 有极大的热情,他是 Zope Corporation 的联合创始人,并同时催生了 Python Software Foundation 和 Plone Foundation。除了 Python 后端外,Paul 对前端和 Web 方面也有丰富的经验。

范圣佑
JetBrains Developer Advocate

圣佑是 JetBrains 技术布道师,负责推广 JetBrians 相关技术与产品,包括:Kotlin 编程语言、 IntelliJ IDEA 系列 IDE 及 YouTrack、TeamCity、Upsource 等团队合作解决方案,协助开发者善用工具辅助来提升生产力,同时维护代码品质。

捕蛇者说

捕蛇者说是一档关注程序员、编程、Python 的播客。本次特别邀请创始人及主播 Manjusaka、Adam、小白三位嘉宾一同参与本次网络研讨会,与大家一同分享 Python 开发经验。

听过 TDD 但没体验过 TDD?不知怎么写 pytest 测试?还再犹豫该用哪个编辑器写 Python 项目?以上这些疑问在我们的网络研讨会里都能获得解答!视频现已上传,需要回放的同学请点击播放开始补课。

主題分享

在本次分享里,PyCharm 布道师 Paul 为大家说明为什么我们应该用 TDD 开发? 因为 通过 TDD 开发,我们可以即早发现错误,而不是让用户使用时才发现。且在 PyCharm 的辅助下,写测试是高效且愉悅的。

为了打开我们大脑的 TDD 开发模式,Paul 分享数个 PyCharm 的设置技巧。首先通过调整 UI,把 Navigation Bar、Toolbar、Editor Tab 都关闭,并进入全屏模式已取得最大的工作空间。接着,把编辑区纵切成左右两块,把代码放在左边、把测试放在右边。最后,右击 tests 文件夹运行测试,并在测试窗口里打开 auto-test,让 PyCharm 定时重覆运行测试。配置后的样貌如下图。建立这样的习惯后,以后你的大脑看到这样的工作区,就会自动进入 TDD 模式。

PyCharm TDD 模式

设置好工作环境后,该如何让我们进入 TDD 的心流?Paul 也演示了几个技巧。首先, 先写一个很简单且一定会通过的测试,让我们为接下来的工作热身, 同时也确保 pytest 及 PyCharm 的设置没有问题,可以很有信心的开始开发。而 正式开始写代码后,则依照 TDD 的工作流:先写一个失败的测试、撰写代码实现功能以通过测试、重构, 三步骤让开发工作可以高效有品质。

最后,Paul 还教我们在写代码的时候,可以 运用 Type Hinting 加上 PyCharm 对类型推断的特性来即早发现错误,快速迭代出有品质的代码。

嘉宾分享

本次活动也很荣幸能与捕蛇者说的三位创始人及主播们一起交流,分享他们写测试、使用 PyCharm 的经验:

Adam 分享 写测试时的一个重要心法「测试行为而不是测试实现」 并以具体的代码为大家解释这个概念的重要性。另外,也分享了六个测试原则:

  1. 外部调用全部用 Stub 替换掉
  2. 若是需要关心的外部调用,可以通过 Mock 来测试
  3. 用 Fake 来测试存储
  4. 要有一定的机制防止测试在生产环境跑起来
  5. 用很长、易理解的测试名字
  6. 保持测试的单一原则

而小白则是分享了身为 PyCharm 重度依賴用戶的使用心得。他提到 虽然有些人会觉得 IDE 这种重工具会抑制你的创造力,但实际上是相反的,这种经过检验的工具能更好的引导新手养成良好的创造习惯。 PyCharm 安装后不需配置就可以马上上手,并提供给他想到的全部功能,甚至还提供很多他没有想到但很方便的功能, 用过后就非常依赖 PyCharm 带给他的安全感。除了拿来开发外,他还拿 PyCharm 做为源码阅读的工具。 在阅读源码的时候,就能够很清晰的理解模块的分布、查找想看的类、追踪调用函数的地方或是可以将一个模块下的全部类的全局变量都列出来。因此 非常推荐新人应使用像 PyCharm 或 Django 这种稳定的工具来进行编程

在 Manjusaka 的分享里首先提到测试的重要性,虽然有时测试和开发速度是冲突的,但即便时程再赶,人类的直觉还是不可信, 至少在类键路径上一定要有测试覆盖。另外他介绍了 pytest-xpara 这个插件,让我们可以将 Test Case 与 Code Base 分开, 只需要关注测试逻辑,不需要构造具体的 Test Case,写起测试更开心。最后他附和 Paul 的观点,建议大家 一定要善用 Type Hint 的特性,在开发上会有很大的帮助

问答

Q. 有没有关于测试这方面的一些最佳实践资料或者文章链接分享?

Adam 分享了一个 Google 团队的 Testing 博客,里面有跟思想有关系的、也有简短的 Tips 分享,虽然里面使用的语言不止 Python,但仍值得参考其中的概念。Manjusaka 则是推荐大家可以去看《Python 测试驱动开发 (Test-Driven Development with Python)》,这本书在 2018 年更新了第二版,其中介绍了 TDD 理念及让 Python 代码简洁可用的技巧。

Q. PyCharm 对于数据库开发的支持有哪些?

PyCharm Professional 版内置了所有 DataGrip 的功能,支持所有主流的关联数据库或是 MongoDB。除了通过 Database 面板操作数据库外,还可以通过 Language Injection 的特性,让您在写 SQL 语句时也能有语法提示、自动补全的功能。除了观看视频内 Paul 的演示外,也可以参考 PyCharm 文档Visual SQL Develoment with PyCharm 这场网络研讨会的视频。

問卷調研

在本次网络研讨会进行的同时,我们也进行了一个问卷调研,在这边也将结果分享给大家参考:

问卷调研结果 问卷调研结果 问卷调研结果

从调研的结果,看来许多同学都听过 pytest,未来也非常愿意尝试呢!希望这场「以视觉辅助的 Python 测试驱动开发」的演讲对同学们使用 PyCharm 写 TDD 有帮助。我们也会持续举办不同主题的网络研讨会,请大家持续关注,下次见!