[关闭]
@songying 2019-01-11T13:09:09.000000Z 字数 1474 阅读 1179

5. pytest fixtures: explicit, modular, scalable

pytest


参考: https://blog.csdn.net/hekaiyou/article/details/79242391

  1. pytest --fixtures example.py # 查看该文件中可用的fixture

pytest fixture 可以使得测试能够可靠, 重复的执行。

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

Fixtures作为参数

测试函数可以通过命名参数的方式来接受fixture对象。而每个参数代表的fixture对象是通过fixture函数产生的。
fixture函数是通过@pytest.fixture来标记注册的。

  1. import pytest
  2. @pytest.fixture
  3. def smtp_connection():
  4. import smtplib
  5. return smtplib.SMTP("smtp.gmail.com", 587, timeout=5)
  6. def test_ehlo(smtp_connection):
  7. response, msg = smtp_connection.ehlo()
  8. assert response == 250
  9. assert 0 # for demo purposes

在上面的代码中, test_ehlo函数需要smtp_connection fixture的值, pytest 会发现并调用 @pytest.fixture标记的名为smtp_connection fixture 函数。


Fixtures的依赖注入

1.共享 fixture 函数

在测试期间, 可能会在一个测试中使用来自多个test文件的fixture 函数, 你可以将这些fixture函数移到conftest.py文件中。这样你就不需要在测试函数中导入想要的fixture, 此时它会自动被pytest发现。

pytest函数的发现始于测试类,然后是测试模块,再然后是conftest.py文件,最后是内置和第三方插件。

共享测试数据

如果我们想获取可用的测试文件, 有两种方法:
1. 在一个fixture中导入这些数据。 这里会用到pytest的自动缓存机制
2. 在tests文件夹中添加数据文件, 还有一些社区插件可以帮助我们管理这些测试:pytest-datadir和pytest-datafiles

在指定范围内共享fixture实例

通过在@pytest.fixture后添加 class, module, session 可以指定在多大范围内共享fixture实例

  1. @pytest.fixture(scope="module") # 每个测试模块只能调用一次修饰的fixture函数,

Higher-scoped fixtures are instantiated first

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注