@songying
2019-01-11T13:09:09.000000Z
字数 1474
阅读 1179
pytest
参考: https://blog.csdn.net/hekaiyou/article/details/79242391
pytest --fixtures example.py # 查看该文件中可用的fixture
pytest fixture 可以使得测试能够可靠, 重复的执行。
- fixture具有明确的名称,并通过在测试函数、模块、类或整个项目中声明它们的使用来激活。
- fixture是以模块化的方式实现的,因为每个fixture名称都会触发fixture函数,其本身也可以使用其他fixture。
- fixture管理从简单的单元扩展到复杂的函数测试,允许根据配置和组件选项参数化fixture和测试,或者在函数、类、模块或整个测试会话范围内重复使用fixture。
测试函数可以通过命名参数的方式来接受fixture对象。而每个参数代表的fixture对象是通过fixture函数产生的。
fixture函数是通过@pytest.fixture
来标记注册的。
import pytest
@pytest.fixture
def smtp_connection():
import smtplib
return smtplib.SMTP("smtp.gmail.com", 587, timeout=5)
def test_ehlo(smtp_connection):
response, msg = smtp_connection.ehlo()
assert response == 250
assert 0 # for demo purposes
在上面的代码中, test_ehlo
函数需要smtp_connection
fixture的值, pytest 会发现并调用 @pytest.fixture
标记的名为smtp_connection
fixture 函数。
- pytest 通过 test_* 找到测试函数
test_ehlo
,发现该测试函数需要一个名为smtp_connection
的函数参数, 然后pytest 去寻找一个名为smtp_connection
的fixture函数
smtp_connection
函数被调用并创建一个实例test_echlo
被调用,并进行测试。
在测试期间, 可能会在一个测试中使用来自多个test文件的fixture 函数, 你可以将这些fixture函数移到conftest.py
文件中。这样你就不需要在测试函数中导入想要的fixture, 此时它会自动被pytest发现。
pytest函数的发现始于测试类,然后是测试模块,再然后是conftest.py文件,最后是内置和第三方插件。
如果我们想获取可用的测试文件, 有两种方法:
1. 在一个fixture中导入这些数据。 这里会用到pytest的自动缓存机制
2. 在tests文件夹中添加数据文件, 还有一些社区插件可以帮助我们管理这些测试:pytest-datadir和pytest-datafiles
通过在@pytest.fixture
后添加 class, module, session
可以指定在多大范围内共享fixture实例
@pytest.fixture(scope="module") # 每个测试模块只能调用一次修饰的fixture函数,