pytest fixture 用于setup工作

什么是fixture

fixture是在测试函数运行前后,由pytest执行的外壳函数;代码可以定制,满足多变的测试需求;包括定义传入测试中的数据集,配置测试前系统的初始状态,为批量测试提供数据源等。fixture是pytest用于将测试前后进行预备,清理工作的代码分离出核心测试逻辑的一种机制!

举个例子

输出:

 #@pytest.fixture() 装饰器用于声明函数是一个fixture

如果测试函数的参数列表中包含fixture名字,那么pytest会检测到,

检测顺序是:优先搜索该测试所在的模块,然后搜索conftest.py

并在测试函数运行之前执行该fixture,

fixture可以完成测试任务,也可以返回数据给测试函数

fixture函数放在哪里合适

1.可以放在单独的测试文件里

2.如果希望多个测试文件共享fixture,可以放在某个公共目录下新建一个conftest文件,将fixture放在里面

fixture作用范围

fixture里面有个scope参数可以控制fixture的作用范围:session > module > class > function

1、scope="function"

@pytest.fixture()如果不写参数,参数就是scope="function",它的作用范围是每个测试用例来之前运行一次,销毁代码在测试用例之后运行。可以用在函数和方法中。

a、放函数中使用

 输出:

 b、放类的方法中使用

 输出:

2scope="class"

fixture为class级别的时候,如果一个class里面有多个用例,都调用了次fixture,那么此fixture只在此class里所有用例开始前执行一次。

 输出:

3scope="session"

fixture为session级别的时候,可以被多个文件调用,可以跨.py文件调用。

比如我们的登陆功能,一般只需要登陆一次,那么我们在每个测试类中其实只需要调用一次即可。

使用步骤:

1、定义conftest 文件

2、定义fixture 函数

3、标识被使用的范围(function、class、session)

conftest.py配置需要注意以下点:

  • conftest.py配置脚本名称是固定的,不能改名称
  • conftest.py与运行的用例要在同一个pakage下,并且有__init__.py文件
  • 不需要import导入 conftest.py,pytest用例会自动查找

举个例子

 

 模块一文件中使用:

 模块二文件中使用:

   查看输出:

 使用装饰器@pytest.mark.usefixtures()修饰需要运行的用例

举个例子

 输出:

 说明:

class 级别如果在class中使用,只在第一个用例执行之前执行一次;其他用例执行之前不会执行.

function 级别如果在class 中使用,每个用例执行前都执行一次

 

posted @ 2022-01-20 13:04  keena_jiao  阅读(279)  评论(0编辑  收藏  举报