pytest-利用tmpdir/tmpdir_factory创建临时文件

目前其实还没有用到需要创建临时文件的测试场景,但是觉得这个功能还是挺有用的,来记录一下~

tmpdirtmpdir_factory是pytest的内置fixture(内置fixture可能是个宝藏,等待大家去挖掘的那种),区别在于:tmpdir作用范围是函数级别,创建临时文件供单个测试点调用。tmpdir_factory作用范围是会话级别,主要针对创建临时目录的情况,可供多个测试点调用。

tmpdir

通过编写测试文件,直接调用tmpdir,完成临时文件的创建及数据录入。

#test_tmpdir.py
import os.path
def test_tmpdir(tmpdir):
    file=tmpdir.join('a.txt')#创建临时文件
    file.write('what is this')#在文件中写入数据
    print("临时文件的路径是:{}".format(os.path.abspath(file)))
    assert file.read()=='what is this'

默认情况下,会将此文件增加到一个默认地址中,但为了后期查找方便,可以在运行时通过设置--basetemp参数来指定文件生成目录。
pytest test_tmpdir.py --basetemp="/write/data"
在macOS系统,执行结果如下所示:

tmpdir生成文件

测试通过,文件生成,且数据内容正常录入。文件主目录是用例名称后面加0,此外还会生成一个替身文件。(我也没懂这个替身文件有什么具体的作用)

tmpdir_factory

这个内置函数呢,则是首先需要生成一个临时目录,然后再进行临时文件的添加。为了方便多个测试用例调用,前期目录的建立可写在conftest.py文件中。

#conftest.py
@pytest.fixture
def factory(tmpdir_factory):
    return tmpdir_factory.mktemp("temp")

在测试用例文件中,直接调用factory生成临时文件。

#test_tmpdirfac.py
def test_factory(factory):
    file=factory.join('ddd.txt')
    file.write('what is this1')
    assert file.read()=='what is this'

def test_factory2(factory):
    file=factory.join('eee.txt')
    file.write('what is this2')
    assert file.read()=='what is this'

而后执行pytest test_tmpdirfac.py --basetemp="/write/data"
在macOS系统,结果如下所示:

tmpdir_factory生成文件

小结

目前的感觉,tmpdir可以用于单个测试用例结果的写入;tmpdir_factory则可以用于多个测试用例获取数据调用或者写入。

是今天努力学习的一个知识点,甚至有些头疼的那种。但是今天关注人数到50啦!希望可以有一篇更新来庆祝一下吧~~感谢大家的鼓励呦!

自我记录,有错误欢迎指正~

你可能感兴趣的:(pytest-利用tmpdir/tmpdir_factory创建临时文件)