在Pytest框架中存在一些内置固件,不需要单独编写代码,可以直接使用。不仅能大幅简化测试工作,还能提高测试效率。
使用命令pytest --fixtures或者pytest --funcargs可以查看所有可用的fixture,包括内置的、插件中的以及当前项目定义的。
下面介绍一些常用固件:Tmpdir、tmpdir_factory、cache。
一、Tmpdir和tmpdir_factory固件
Tmpdir和tmpdir_factory用于临时文件和目录的管理,在测试开始前创建临时文件目录,并且在测试结束后销毁,适用于在测试过程中需要创建一个临时文件,并且对文件进行读写操作的场景。
tmpdir的作用范围是函数级别;tmpdir_factory的作用域是会话级别。
1、tmpdir的使用
看下面一个示例:测试方法在执行过程中创建临时目录和文件,在文件中写入数据,断言数据是否存在于临时文件中。
import pytest
def test_tmpdir(tmpdir):
tmp_dir = tmpdir.mkdir('testdir') #创建一个临时目录
tmp_file = tmp_dir.join('tmpfile.txt') #在临时目录下创建一个临时文件
tmp_file.write('这是一个临时文件') #在临时文件中写入数据
assert tmp_file.read() == '这是一个临时文件'
if __name__ == '__main__':
pytest.main(['-s', '-v', 'test_fixture_tmpdir.py'])
运行结果如下:可见断言成功了,临时目录和文件创建成功,也成功对文件进行了读写操作。
2、tmpdir_factory的使用
看下面的示例:自定义一个fixture方法,调用tmpdir_factory创建临时文件,并在其他测试方法可以读取临时文件。
import pytest
@pytest.fixture(scope='module')
def test_tempdir_fixture(tmpdir_factory):
tmp_dir = tmpdir_factory.mktemp('testdir') #创建一个临时目录
tmp_file = tmp_dir.join('testfile.txt') #创建一个临时文件
tmp_file.write('这是一个临时文件') #在临时文件中写入数据
return tmp_file #返回临时文件
def test_tmp1(test_tempdir_fixture):
with test_tempdir_fixture.open() as f:
assert f.read() == '这是一个临时文件'
def test_tmp2(test_tempdir_fixture):
assert '这是一个临时文件' in test_tempdir_fixture.read()
运行结果如下:两个测试方法都运行成功了,可见tmpdir_factory在module级别可以创建目录和文件,并且可以对文件进行读写。