pytest详解-(7)fixture
fixture是pytest特有的功能,它用pytest.fixture标识,定义在函数前面。在你编写测试函数的时候,你可以将此函数名称做为传入参数,pytest将会以依赖注入方式,将该函数的返回值作为测试函数的传入参数。 fixture有明确的名字,在其他函数,模块,类或整个工程调用它时会被激活。 fixture是基于模块来执行的,每个fixture的名字就可以触发一个fixture的函数,它自身也可以调用其他的fixture。 我们可以把fixture看做是资源,在你的测试用例执行之前需要去配置这些资源,执行完后需要去释放资源。比如module类型的fixture,适合于那些许多测试用例都只需要执行一次的操作。 fixture还提供了参数化功能,根据配置和不同组件来选择不同的参数。 fixture主要的目的是为了提供一种可靠和可重复性的手段去运行那些最基本的测试内容。比如在测试网站的功能时,每个测试用例都要登录和退出,利用fixture就可以只做一次,否则每个测试用例都要做这两步也是冗余。
把一个函数定义为Fixture很简单,只能在函数声明之前加上“@pytest.fixture”。其他函数要来调用这个Fixture时,会先执行fixture,只用把它当做一个输入的参数即可
demo
1 class TestDemo: 2 @pytest.fixture() 3 def login(self): 4 print("登录") 5 6 def test_demo(self,login): #调用fixture,执行test_demo方法时,会先调用fixture 7 result = self.demo.demo(1, 2) 8 assert 3 == result
fixture作用范围
-
scope参数可以是session, module,class,function;默认为function
-
session 会话级别(通常这个级别会结合conftest.py文件使用,所以后面说到conftest.py文件的时候再说)
-
module 模块级别: 模块里所有的用例执行前执行一次module级别的fixture
-
class 类级别 :每个类执行前都会执行一次class级别的fixture
-
function :前面实例已经说了,这个默认是默认的模式,函数级别的,每个测试用例执行前都会执行一次function级别的fixture
-
级别顺序(执行顺序)session>module>class>function