pytest内置了一些通用的fixutre,称之为内置fixtures。
内置fixture可以帮助我们方便地处理一些非常有用的事情。例如,提供临时文件目录、访问命令行选项、测试session之间通信、验证输出流、修改环境变量等
使用tmpdir和tmpdir_factory
tmpdir和tmpdir_factory这两个fixtures用于在测试运行之前创建临时文件目录,并在测试完成后删除目录。如果要测试文件的读、写或者修改的时候,可以使用tmpdir来给每个测试用例创建一个临时的文件目录。如果想让多个测试用例共用一个临时目录,则可以使用tmpdir_factory。
tmpdir的scope是function,tmpdir_factory的scope是session。
1 | |
tmpdir这个fixturn会return一个py.path.local对象。这个对象相当于是对pathlib.Path的封装(自从python3.4后,推荐使用pathlib代替os.path)。
关于py.path.loacl对象的api参考这里
pathlib和os.path的对比参考这里
临时目录的前缀路径是可以修改的。使用pytest --basetemp=/path/you/want就可以指定临时目录的前缀路径。
在其他域使用临时目录
我们可以使用tmpdir和tmpdir_factory分别创建function域和session域的临时目录,但是有个问题是:假如我们想要module域的临时目录,要怎么创建呢?(想象一下,一个module中的所有test函数都要共用一个临时目录中的json文件)))
答案是:自定义一个module域的fixture,这个fixture使用tmpdir_factory来获取一个session级别的临时目录,然后fixturereturn一个新的临时目录。
1 | |
module中的所有使用了上面的fixture的测试函数,都共用一个临时目录。
使用pytestconfig
pytest有一个内置fixture叫做pytestconfig。这个fixture是于pytest的配置参数相关的。
pytestconfig这个fixture返回一个_pytest.config.Config对象。可以调用该对象的属性和方法获取相关配置信息。
使用cache
pytest有个内置fixture叫做cache。这个fixutre是和缓存相关的。可以将一次session的结果保存,然后下一次session运行时,可以获取缓存信息。
使用pytest --cache-show可以列出上次测试的结果。
使用pytest -lf可以列出上次失败的测试用例。
使用pytest -ff可以优先执行上次失败的测试用例。
使用pytest --clear--cache可以清除缓存。
此外,如果测试函数使用了cache这个内建fixture,可以调用cache.get(key,default)和cache.set(key,value)来保存和获取数据到缓存中。
还有其他内置的fixture。等于要用到了,再进一步了解。