Pytest ------ fixture 参数值传递 +固件之间相互调用 + 作用范围(五)

Fixture使用说明:

  • fixture 函数命名不要以test开头,尽量与用例区分开

  • 一个fixture可以供多个函数来使用

  • fixture可以有返回值,其返回值可以被函数来使用

  • 一个方法可以有多个fixture

  • fixture之间可以相互调用

 

1、一个方法可以有多个fixture、一个固件可以供多个函数来使用,如下图所示:

Pytest ------ fixture 参数值传递 +固件之间相互调用 + 作用范围(五)

 

2、fixture返回执被其函数来使用,如下图所示:

固件中添加返回值,在测试方法中可以通过固件名来表示返回值

 

Pytest ------ fixture 参数值传递 +固件之间相互调用 + 作用范围(五)

 

3、固件之间相互调用

 

Pytest ------ fixture 参数值传递 +固件之间相互调用 + 作用范围(五)

 

4、fixture 的作用范围(scope)
 
fixture里面有个scope参数可以控制fixture的作用范围:session>module>class>function
 
  • -function:每一个函数或方法都会调用
  • -class:每一个类调用一次,一个类中可以有多个方法
  • -module:每一个.py文件调用一次,该文件内又有多个function和class
  • -session:是多个文件调用一次,可以跨.py文件调用,每个.py文件就是module
 
4.1、scope = "function"  
@pytest.fixture() 如果不写参数,参数就是 scope="funciton", 它的作用范围是每个测试用例之前运行一次,销毁代码在测试用例之后运行
 
scope = "class"
fixture为class级别的时候,如果一个class里面有多个用例,都调用了fixture,那么此fixture只在此class里所有用例开始 执行一次  ,如果类外面方法也调用了fixture,那么此方法也会执行一次
Pytest ------ fixture 参数值传递 +固件之间相互调用 + 作用范围(五)
从图上来看,fixture函数只在第一个test01函数执行之前,被执行一次,其他函数均未执行
 

从上图来看类外面方法也调用了固件,此方法运行之前也会调用此固件

 
4.2、scope="module"
fixture为module时,在当前.py脚本里面所有用例开始前只执行一次
从下图来看,当参数值为 module的时候,此模块脚本在执行之前只执行一次固件
 
 
Pytest ------ fixture 参数值传递 +固件之间相互调用 + 作用范围(五)
 
 
4.3、sope="session" 
 
fixture 为session级别是可以跨.py 模块调用的,当多个 .py 文件中的用例需要调用同一个fixture的时候,可以将fixture设置为 scope="session", 并且将其写入到 conftest.py 文件中