一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第4天,点击查看活动详情。
感谢点赞,我们一起学习。可以的话,关注一下。
我先介绍一下这个fixtures,这是一个pytest的装饰器。它是放在一个方法上的。使用的时候,作为参数,直接传入即可。它有几个参数,一会儿我们会在下文来介绍。
Fixture函数作为用例参数使用
case可以通过在其参数中使用函数名称来接收fixture装饰过的函数。 每个fixture装饰器所对应的函数,可以通过使用@pytest.fixture注册成为一个fixture函数,来为case提供一个fixture函数。 让我们看一个只包含一个fixture和一个使用它的测试用例的简单独立测试模块:
运行case的命令是pytest test.py
大家可以看到如上图,装饰器装饰过的函数,我们在case中,只需要使用函数名作为参数,直接使用就好,而且,我们可以把fixtures当在before来使用,可以提前为case做一些准备数据啥的。
conftest.py: 共享Fixture函数
这个共享函数就比较简单了,我们可能会在case中需要使用多个测试文件中的fixture函数,这个时候,我们就可以将其移动到conftest.py文件中,所需的fixture函数会自动被Pytest发现,而不需要再每次导入。 fixture函数的发现顺序从测试类开始,然后是测试模块,然后是conftest.py文件,最后是内置和第三方插件。
只需要把函数放到conftest.py中就可以。
生效范围:在测试类/测试模块/测试会话中共享Fixture函数
这个我们就用的了参数scope='',
function:每个test都运行,默认是function的scope
class:每个class的所有test只运行一次
module:每个module的所有test只运行一次
session:每个session只运行一次
但是我在使用中,写了这个参数,没什么用,有知道的可以评论此文章。
我是这么写的,但是,这个方法也不在类中,也是可以使用的。不懂了。
Fixture结束/执行teardown代码
当我们在使用fixture的时候,出现超时什么的,没法关闭,比如说,打开文件,我们的关闭文件。这个时候,通过使用yield语句而不是return,pytest支持fixture执行特定的teardown代码。yield语句之后的所有代码都视为teardown代码:
其实,我们使用with语句也能解决这个问题,如下:
运行这个case的命令行是pytest -s -q --tb=no 文件名