目前其实还没有用到需要创建临时文件的测试场景,但是觉得这个功能还是挺有用的,来记录一下~
tmpdir
和tmpdir_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系统,执行结果如下所示:
测试通过,文件生成,且数据内容正常录入。文件主目录是用例名称后面加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
可以用于单个测试用例结果的写入;tmpdir_factory
则可以用于多个测试用例获取数据调用或者写入。
是今天努力学习的一个知识点,甚至有些头疼的那种。但是今天关注人数到50啦!希望可以有一篇更新来庆祝一下吧~~感谢大家的鼓励呦!
自我记录,有错误欢迎指正~
网友评论