Magnolia's Blog

持续成长

有时测试需要调用依赖于全局设置的功能,或者调用不容易测试的代码(如网络访问)。这个 monkeypatch fixture帮助您安全地设置/删除属性、字典项或环境变量,或修改 sys.path 用于导入。

这个 monkeypatch fixture为测试中的安全修补和模拟功能提供了以下帮助方法:

1
2
3
4
5
6
7
8
monkeypatch.setattr(obj, name, value, raising=True)
monkeypatch.delattr(obj, name, raising=True)
monkeypatch.setitem(mapping, name, value)
monkeypatch.delitem(obj, name, raising=True)
monkeypatch.setenv(name, value, prepend=False)
monkeypatch.delenv(name, raising=True)
monkeypatch.syspath_prepend(path)
monkeypatch.chdir(path)

所有修改将在请求的测试功能或固件完成后撤消。如果设置/删除操作的目标不存在,这个 raising 参数决定了是否抛出 KeyErrorAttributeError错误。

考虑以下情况:

Read more »

通过使用 pytest.mark 可以帮助你轻松地在测试函数上设置元数据。一些内置标记,例如:

  • skip - 总是跳过测试函数
  • skipif - 如果满足某个条件,则跳过测试函数
  • xfail - 如果满足某个条件,则产生“预期失败”结果
  • parametrize 对同一测试函数执行多个调用

很容易创建自定义标记,或将标记应用于整个测试类或模块。这些标记可以被插件使用,也常用于 select tests 在命令行上 -m 选择权。

注解:标记只能用于测试,对 fixtures 没有作用。


Read more »

Pytest 固件:显式、模块化、可扩展

purpose of test fixtures 是提供一个固定的基线,在此基础上测试可以可靠地重复执行。Pytest 固件比传统的XUnit 的setup/teardown功能提供了显著的改进:

  • 固件有明确的名称,通过声明它们在测试函数、模块、类或整个项目中的使用来激活。
  • 固件以模块化的方式实现,因为每个固件名称触发一个 固件功能 , 可以使用其他固件。
  • 固件管理规模从简单的单元扩展到复杂的功能测试,允许根据配置和组件选项参数化固件和测试,或者跨功能、类、模块或整个测试会话范围重复使用固件。

此外,pytest继续支持经典的Xunit-style setup. 你可以混合这两种样式,根据喜好,逐步从经典样式转移到新样式。你也可以从现有的 unittest.TestCase style 或 nose based 项目开始。


Read more »

多进程与多线程的对比

多任务的实现原理

一般地, 设计Master-Worker模式, Master负责分配任务, Worker负责执行任务, 所以在多任务环境下, 一般是由一个Master, 多个Worker.

多进程

主进程就是Master, 其他进程就是Worker

Read more »
0%