【译】Python Bytes:#245 开启你的Python时间机器(并测试一些代码)

141 阅读5分钟

观看直播:

在YouTube上观看

关于这个节目

我们赞助。

特别嘉宾。Juan Pedro Araque Espinosa (Youtube Chanel: Commit that Line)

Michael #1: 社区状况(通过Jet Brains)

  • 本报告介绍了JetBrains进行的第五次年度开发者生态系统调查的综合结果
  • 不仅仅是Python,而是我们所有人
  • 就总体使用情况而言,Python比Java更受欢迎,而作为主语言的Java比Python更受欢迎。
  • 增长最快的5种语言是Python、TypeScript、Kotlin、SQL和Go。
  • 大多数受访者(71%)为网络后端开发。
  • 虽然陷入了 "你好,我是一名CSS开发人员,很高兴认识你 "的陷阱
  • 女性比男性更可能参与数据分析、机器学习和UX/UI设计或研究。
  • 与男性相比,女性参与基础设施开发和 DevOps、系统管理或部署的可能性较小。

Brian #2: Cornell - record & replay mock server

  • Yael Mintz建议的(而且这是她的项目)
  • 介绍博文
    • "Cornell 通过其记录和重放功能,在快速和隔离的测试环境中执行端到端的测试,使其变得非常简单。
    • 当您的应用程序与多个基于 Web 的服务集成时,在部署到生产之前,端到端的测试非常重要。嘲讽通常是一项乏味的任务。
    • vcrpy是一个很棒的库,它可以为单元测试记录和复制 HTTP 交互。它的输出被保存到可重复使用的 "盒式 "文件中。
    • 通过用Flask包装vcrpy,Cornell提供了一个轻量级的记录和重放服务器,可以在分布式系统测试中轻松使用,并模拟您测试所需的所有HTTP流量。"

Juanpe #3: Factory boy (with Pydantic by chance)

Michael #4: pyinstrument

  • Python的调用栈分析器。告诉你为什么你的代码很慢!
  • 不要写python script.py,而是输入pyinstrument script.py
  • 您的脚本将正常运行,并且在结束时(或者当您按下^C),Pyinstrument将输出一个彩色的摘要,显示大部分时间花在哪里。Pyinstrument现在可以检测到一个异步任务遇到一个等待,并跟踪这个等待下的异步上下文之外的时间。只需用Pyinstrument包围你的代码即可
  • Flask和Django的漂亮中间件示例

Brian #5: Python 3.10现在处于候选发布阶段。RC1刚刚发布。

  • RC2计划于2021-09-06发布
  • 官方发布计划于2021-10-04发布
  • 我们强烈鼓励第三方Python项目的维护者为他们的项目做好3.10的准备。10的兼容性
  • 主要变化提醒:
    • PEP 623 -- 废弃并准备删除PyUnicodeObject中的wstr成员。
    • PEP 604 -- 允许将联合类型写成X | Y
    • PEP 612 -- 参数说明变量
    • PEP 626 -- 用于调试和其他工具的精确行号。
    • PEP 618 -- 为zip添加可选的长度检查。
    • bpo-12782:现在正式允许使用括号内的上下文管理器。
    • PEP 632 -- 废弃distutils模块。
    • PEP 613 -- 明确类型别名
    • PEP 634--结构模式匹配:规范
    • PEP 635--结构模式匹配:动机和原理
    • PEP 636 -- 结构模式匹配:教程
    • PEP 644 -- 需要OpenSSL 1.1.1或更新版本
    • PEP 624 -- 删除Py\_UNICODE编码器的API
    • PEP 597 -- 增加可选的 EncodingWarning

Juanpe #6: Time-machine

  • Time-machine在全球范围内模拟日期和时间相关的调用,明显比其他知名的工具如freezgun快。
  • 嘲弄是通过用我们想要的任何值替换c级调用来实现的,这意味着库不需要嘲弄个别的导入。
  • 嘲弄datetime不能用patch.object来完成,需要在所有使用它的地方进行修补,这可能会使嘲弄所有东西成为一个乏味(和/或缓慢)的过程。
  • 日期时间方法(now、today、utcnow...)可以通过设置一个冻结的时间或让时间在模拟调用后滴答作响来进行模拟。
  • 它提供了一个简单的上下文管理器来使用它,以及使其使用非常简单的pytest夹具
 from datetime import datetime import time\_machine @time\_machine.travel("2021-01-01 21:00") def test\_in\_the\_past(): assert datetime.now() == datetime(2021, 1, 1, 21, 0) --------------------------------- # time\_machine夹具也可用于pytest def test\_in\_the\_past(time\_machine) 。 time\_machine.move\_to(datetime(2021, 1, 1, 21, 0)) assert datetime.now() == datetime(2021, 1, 1, 21, 0) 

Extras

Michael

Brian

笑话

JavaScript开发人员从一个框架跳到另一个框架